]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/move/example/doc_file_descriptor.cpp
1 //////////////////////////////////////////////////////////////////////////////
3 // (C) Copyright Ion Gaztanaga 2008-2012.
4 // Distributed under the Boost Software License, Version 1.0.
5 // (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
8 // See http://www.boost.org/libs/move for documentation.
10 //////////////////////////////////////////////////////////////////////////////
12 //[file_descriptor_def
14 #include <boost/move/utility_core.hpp>
20 int operating_system_open_file(const char *)
25 void operating_system_close_file(int)
31 BOOST_MOVABLE_BUT_NOT_COPYABLE(file_descriptor
)
34 explicit file_descriptor(const char *filename
) //Constructor
35 : os_descr_(operating_system_open_file(filename
))
38 //=throw std::runtime_error("file not found");
41 ~file_descriptor() //Destructor
42 { if(os_descr_
) operating_system_close_file(os_descr_
); }
44 file_descriptor(BOOST_RV_REF(file_descriptor
) x
) // Move ctor
45 : os_descr_(x
.os_descr_
)
48 file_descriptor
& operator=(BOOST_RV_REF(file_descriptor
) x
) // Move assign
50 if(os_descr_
) operating_system_close_file(os_descr_
);
51 os_descr_
= x
.os_descr_
;
56 bool empty() const { return os_descr_
== 0; }
61 //[file_descriptor_example
62 #include <boost/container/vector.hpp>
65 //Remember: 'file_descriptor' is NOT copyable, but it
66 //can be returned from functions thanks to move semantics
67 file_descriptor
create_file_descriptor(const char *filename
)
68 { return file_descriptor(filename
); }
72 //Open a file obtaining its descriptor, the temporary
73 //returned from 'create_file_descriptor' is moved to 'fd'.
74 file_descriptor fd
= create_file_descriptor("filename");
77 //Now move fd into a vector
78 boost::container::vector
<file_descriptor
> v
;
79 v
.push_back(boost::move(fd
));
81 //Check ownership has been transferred
83 assert(!v
[0].empty());
85 //Compilation error if uncommented since file_descriptor is not copyable
86 //and vector copy construction requires value_type's copy constructor:
87 //boost::container::vector<file_descriptor> v2(v);