GCC Code Coverage Report


Directory: libs/http_proto/
File: boost/http_proto/file_stdio.hpp
Date: 2024-08-30 20:13:36
Exec Total Coverage
Lines: 4 4 100.0%
Functions: 2 2 100.0%
Branches: 0 0 -%

Line Branch Exec Source
1 //
2 // Copyright (c) 2022 Vinnie Falco (vinnie.falco@gmail.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/cppalliance/http_proto
8 //
9
10 #ifndef BOOST_HTTP_PROTO_FILE_STDIO_HPP
11 #define BOOST_HTTP_PROTO_FILE_STDIO_HPP
12
13 #include <boost/http_proto/detail/config.hpp>
14 #include <boost/http_proto/error.hpp>
15 #include <boost/http_proto/file_base.hpp>
16 #include <cstdio>
17 #include <cstdint>
18
19 namespace boost {
20 namespace http_proto {
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_HTTP_PROTO_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_HTTP_PROTO_DECL
56 file_stdio(
57 file_stdio&& other) noexcept;
58
59 /** Assignment
60
61 The moved-from object behaves as if default constructed.
62 */
63 BOOST_HTTP_PROTO_DECL
64 file_stdio&
65 operator=(
66 file_stdio&& other) noexcept;
67
68 /// Returns the native handle associated with the file.
69 std::FILE*
70 2 native_handle() const
71 {
72 2 return f_;
73 }
74
75 /** Set the native handle associated with the file.
76
77 If the file is open it is first closed.
78
79 @param f The native file handle to assign.
80 */
81 BOOST_HTTP_PROTO_DECL
82 void
83 native_handle(std::FILE* f);
84
85 /// Returns `true` if the file is open
86 bool
87 10 is_open() const
88 {
89 10 return f_ != nullptr;
90 }
91
92 /** Close the file if open
93
94 @param ec Set to the error, if any occurred.
95 */
96 BOOST_HTTP_PROTO_DECL
97 void
98 close(system::error_code& ec);
99
100 /** Open a file at the given path with the specified mode
101
102 @param path The utf-8 encoded path to the file
103
104 @param mode The file mode to use
105
106 @param ec Set to the error, if any occurred
107 */
108 BOOST_HTTP_PROTO_DECL
109 void
110 open(char const* path, file_mode mode, system::error_code& ec);
111
112 /** Return the size of the open file
113
114 @param ec Set to the error, if any occurred
115
116 @return The size in bytes
117 */
118 BOOST_HTTP_PROTO_DECL
119 std::uint64_t
120 size(system::error_code& ec) const;
121
122 /** Return the current position in the open file
123
124 @param ec Set to the error, if any occurred
125
126 @return The offset in bytes from the beginning of the file
127 */
128 BOOST_HTTP_PROTO_DECL
129 std::uint64_t
130 pos(system::error_code& ec) const;
131
132 /** Adjust the current position in the open file
133
134 @param offset The offset in bytes from the beginning of the file
135
136 @param ec Set to the error, if any occurred
137 */
138 BOOST_HTTP_PROTO_DECL
139 void
140 seek(std::uint64_t offset, system::error_code& ec);
141
142 /** Read from the open file
143
144 @param buffer The buffer for storing the result of the read
145
146 @param n The number of bytes to read
147
148 @param ec Set to the error, if any occurred
149 */
150 BOOST_HTTP_PROTO_DECL
151 std::size_t
152 read(void* buffer, std::size_t n, system::error_code& ec) const;
153
154 /** Write to the open file
155
156 @param buffer The buffer holding the data to write
157
158 @param n The number of bytes to write
159
160 @param ec Set to the error, if any occurred
161 */
162 BOOST_HTTP_PROTO_DECL
163 std::size_t
164 write(void const* buffer, std::size_t n, system::error_code& ec);
165 };
166
167 } // http_proto
168 } // boost
169
170 #endif
171