]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/beast/core/file_stdio.hpp
import quincy beta 17.1.0
[ceph.git] / ceph / src / boost / boost / beast / core / file_stdio.hpp
1 //
2 // Copyright (c) 2015-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // Official repository: https://github.com/boostorg/beast
8 //
9
10 #ifndef BOOST_BEAST_CORE_FILE_STDIO_HPP
11 #define BOOST_BEAST_CORE_FILE_STDIO_HPP
12
13 #include <boost/beast/core/detail/config.hpp>
14 #include <boost/beast/core/error.hpp>
15 #include <boost/beast/core/file_base.hpp>
16 #include <cstdio>
17 #include <cstdint>
18
19 namespace boost {
20 namespace beast {
21
22 /** An implementation of File which uses cstdio.
23
24 This class implements a file using the interfaces present
25 in the C++ Standard Library, in `<stdio>`.
26 */
27 class file_stdio
28 {
29 std::FILE* f_ = nullptr;
30
31 public:
32 /** The type of the underlying file handle.
33
34 This is platform-specific.
35 */
36 using native_handle_type = std::FILE*;
37
38 /** Destructor
39
40 If the file is open it is first closed.
41 */
42 BOOST_BEAST_DECL
43 ~file_stdio();
44
45 /** Constructor
46
47 There is no open file initially.
48 */
49 file_stdio() = default;
50
51 /** Constructor
52
53 The moved-from object behaves as if default constructed.
54 */
55 BOOST_BEAST_DECL
56 file_stdio(file_stdio&& other);
57
58 /** Assignment
59
60 The moved-from object behaves as if default constructed.
61 */
62 BOOST_BEAST_DECL
63 file_stdio& operator=(file_stdio&& other);
64
65 /// Returns the native handle associated with the file.
66 std::FILE*
67 native_handle() const
68 {
69 return f_;
70 }
71
72 /** Set the native handle associated with the file.
73
74 If the file is open it is first closed.
75
76 @param f The native file handle to assign.
77 */
78 BOOST_BEAST_DECL
79 void
80 native_handle(std::FILE* f);
81
82 /// Returns `true` if the file is open
83 bool
84 is_open() const
85 {
86 return f_ != nullptr;
87 }
88
89 /** Close the file if open
90
91 @param ec Set to the error, if any occurred.
92 */
93 BOOST_BEAST_DECL
94 void
95 close(error_code& ec);
96
97 /** Open a file at the given path with the specified mode
98
99 @param path The utf-8 encoded path to the file
100
101 @param mode The file mode to use
102
103 @param ec Set to the error, if any occurred
104 */
105 BOOST_BEAST_DECL
106 void
107 open(char const* path, file_mode mode, error_code& ec);
108
109 /** Return the size of the open file
110
111 @param ec Set to the error, if any occurred
112
113 @return The size in bytes
114 */
115 BOOST_BEAST_DECL
116 std::uint64_t
117 size(error_code& ec) const;
118
119 /** Return the current position in the open file
120
121 @param ec Set to the error, if any occurred
122
123 @return The offset in bytes from the beginning of the file
124 */
125 BOOST_BEAST_DECL
126 std::uint64_t
127 pos(error_code& ec) const;
128
129 /** Adjust the current position in the open file
130
131 @param offset The offset in bytes from the beginning of the file
132
133 @param ec Set to the error, if any occurred
134 */
135 BOOST_BEAST_DECL
136 void
137 seek(std::uint64_t offset, error_code& ec);
138
139 /** Read from the open file
140
141 @param buffer The buffer for storing the result of the read
142
143 @param n The number of bytes to read
144
145 @param ec Set to the error, if any occurred
146 */
147 BOOST_BEAST_DECL
148 std::size_t
149 read(void* buffer, std::size_t n, error_code& ec) const;
150
151 /** Write to the open file
152
153 @param buffer The buffer holding the data to write
154
155 @param n The number of bytes to write
156
157 @param ec Set to the error, if any occurred
158 */
159 BOOST_BEAST_DECL
160 std::size_t
161 write(void const* buffer, std::size_t n, error_code& ec);
162 };
163
164 } // beast
165 } // boost
166
167 #ifdef BOOST_BEAST_HEADER_ONLY
168 #include <boost/beast/core/impl/file_stdio.ipp>
169 #endif
170
171 #endif