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_WIN32_HPP
11#define BOOST_BEAST_CORE_FILE_WIN32_HPP
12
13#include <boost/beast/core/detail/config.hpp>
14
15#if ! defined(BOOST_BEAST_USE_WIN32_FILE)
16# ifdef _WIN32
17# define BOOST_BEAST_USE_WIN32_FILE 1
18# else
19# define BOOST_BEAST_USE_WIN32_FILE 0
20# endif
21#endif
22
23#if BOOST_BEAST_USE_WIN32_FILE
24
25#include <boost/beast/core/error.hpp>
26#include <boost/beast/core/file_base.hpp>
27#include <boost/winapi/basic_types.hpp>
28#include <boost/winapi/handles.hpp>
29#include <cstdio>
30#include <cstdint>
31
32namespace boost {
33namespace beast {
34
35/** An implementation of File for Win32.
36
37 This class implements a <em>File</em> using Win32 native interfaces.
38*/
39class file_win32
40{
41 boost::winapi::HANDLE_ h_ =
42 boost::winapi::INVALID_HANDLE_VALUE_;
43
44public:
45 /** The type of the underlying file handle.
46
47 This is platform-specific.
48 */
49#if BOOST_BEAST_DOXYGEN
50 using native_handle_type = HANDLE;
51#else
52 using native_handle_type = boost::winapi::HANDLE_;
53#endif
54
55 /** Destructor
56
57 If the file is open it is first closed.
58 */
59 BOOST_BEAST_DECL
60 ~file_win32();
61
62 /** Constructor
63
64 There is no open file initially.
65 */
66 file_win32() = default;
67
68 /** Constructor
69
70 The moved-from object behaves as if default constructed.
71 */
72 BOOST_BEAST_DECL
73 file_win32(file_win32&& other);
74
75 /** Assignment
76
77 The moved-from object behaves as if default constructed.
78 */
79 BOOST_BEAST_DECL
80 file_win32& operator=(file_win32&& other);
81
82 /// Returns the native handle associated with the file.
83 native_handle_type
84 native_handle()
85 {
86 return h_;
87 }
88
89 /** Set the native handle associated with the file.
90
91 If the file is open it is first closed.
92
93 @param h The native file handle to assign.
94 */
95 BOOST_BEAST_DECL
96 void
97 native_handle(native_handle_type h);
98
99 /// Returns `true` if the file is open
100 bool
101 is_open() const
102 {
103 return h_ != boost::winapi::INVALID_HANDLE_VALUE_;
104 }
105
106 /** Close the file if open
107
108 @param ec Set to the error, if any occurred.
109 */
110 BOOST_BEAST_DECL
111 void
112 close(error_code& ec);
113
114 /** Open a file at the given path with the specified mode
115
116 @param path The utf-8 encoded path to the file
117
118 @param mode The file mode to use
119
120 @param ec Set to the error, if any occurred
121 */
122 BOOST_BEAST_DECL
123 void
124 open(char const* path, file_mode mode, error_code& ec);
125
126 /** Return the size of the open file
127
128 @param ec Set to the error, if any occurred
129
130 @return The size in bytes
131 */
132 BOOST_BEAST_DECL
133 std::uint64_t
134 size(error_code& ec) const;
135
136 /** Return the current position in the open file
137
138 @param ec Set to the error, if any occurred
139
140 @return The offset in bytes from the beginning of the file
141 */
142 BOOST_BEAST_DECL
143 std::uint64_t
144 pos(error_code& ec);
145
146 /** Adjust the current position in the open file
147
148 @param offset The offset in bytes from the beginning of the file
149
150 @param ec Set to the error, if any occurred
151 */
152 BOOST_BEAST_DECL
153 void
154 seek(std::uint64_t offset, error_code& ec);
155
156 /** Read from the open file
157
158 @param buffer The buffer for storing the result of the read
159
160 @param n The number of bytes to read
161
162 @param ec Set to the error, if any occurred
163 */
164 BOOST_BEAST_DECL
165 std::size_t
166 read(void* buffer, std::size_t n, error_code& ec);
167
168 /** Write to the open file
169
170 @param buffer The buffer holding the data to write
171
172 @param n The number of bytes to write
173
174 @param ec Set to the error, if any occurred
175 */
176 BOOST_BEAST_DECL
177 std::size_t
178 write(void const* buffer, std::size_t n, error_code& ec);
179};
180
181} // beast
182} // boost
183
184#ifdef BOOST_BEAST_HEADER_ONLY
185#include <boost/beast/core/impl/file_win32.ipp>
186#endif
187
188#endif
189
190#endif
191

source code of boost/libs/beast/include/boost/beast/core/file_win32.hpp