summaryrefslogtreecommitdiff
path: root/boost/beast/core/file_win32.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/beast/core/file_win32.hpp')
-rw-r--r--boost/beast/core/file_win32.hpp177
1 files changed, 177 insertions, 0 deletions
diff --git a/boost/beast/core/file_win32.hpp b/boost/beast/core/file_win32.hpp
new file mode 100644
index 0000000000..3e9a18abaa
--- /dev/null
+++ b/boost/beast/core/file_win32.hpp
@@ -0,0 +1,177 @@
+//
+// Copyright (c) 2015-2016 Vinnie Falco (vinnie dot falco at gmail dot com)
+//
+// Distributed under the Boost Software License, Version 1.0. (See accompanying
+// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+//
+// Official repository: https://github.com/boostorg/beast
+//
+
+#ifndef BOOST_BEAST_CORE_FILE_WIN32_HPP
+#define BOOST_BEAST_CORE_FILE_WIN32_HPP
+
+#include <boost/config.hpp>
+
+#if ! defined(BOOST_BEAST_USE_WIN32_FILE)
+# ifdef BOOST_MSVC
+# define BOOST_BEAST_USE_WIN32_FILE 1
+# else
+# define BOOST_BEAST_USE_WIN32_FILE 0
+# endif
+#endif
+
+#if BOOST_BEAST_USE_WIN32_FILE
+
+#include <boost/beast/core/error.hpp>
+#include <boost/beast/core/file_base.hpp>
+#include <boost/winapi/basic_types.hpp>
+#include <boost/winapi/handles.hpp>
+#include <cstdio>
+#include <cstdint>
+
+namespace boost {
+namespace beast {
+
+/** An implementation of File for Win32.
+
+ This class implements a @b File using Win32 native interfaces.
+*/
+class file_win32
+{
+ boost::winapi::HANDLE_ h_ =
+ boost::winapi::INVALID_HANDLE_VALUE_;
+
+public:
+ /** The type of the underlying file handle.
+
+ This is platform-specific.
+ */
+#if BOOST_BEAST_DOXYGEN
+ using native_handle_type = HANDLE;
+#else
+ using native_handle_type = boost::winapi::HANDLE_;
+#endif
+
+ /** Destructor
+
+ If the file is open it is first closed.
+ */
+ ~file_win32();
+
+ /** Constructor
+
+ There is no open file initially.
+ */
+ file_win32() = default;
+
+ /** Constructor
+
+ The moved-from object behaves as if default constructed.
+ */
+ file_win32(file_win32&& other);
+
+ /** Assignment
+
+ The moved-from object behaves as if default constructed.
+ */
+ file_win32& operator=(file_win32&& other);
+
+ /// Returns the native handle associated with the file.
+ native_handle_type
+ native_handle()
+ {
+ return h_;
+ }
+
+ /** Set the native handle associated with the file.
+
+ If the file is open it is first closed.
+
+ @param h The native file handle to assign.
+ */
+ void
+ native_handle(native_handle_type h);
+
+ /// Returns `true` if the file is open
+ bool
+ is_open() const
+ {
+ return h_ != boost::winapi::INVALID_HANDLE_VALUE_;
+ }
+
+ /** Close the file if open
+
+ @param ec Set to the error, if any occurred.
+ */
+ void
+ close(error_code& ec);
+
+ /** Open a file at the given path with the specified mode
+
+ @param path The utf-8 encoded path to the file
+
+ @param mode The file mode to use
+
+ @param ec Set to the error, if any occurred
+ */
+ void
+ open(char const* path, file_mode mode, error_code& ec);
+
+ /** Return the size of the open file
+
+ @param ec Set to the error, if any occurred
+
+ @return The size in bytes
+ */
+ std::uint64_t
+ size(error_code& ec) const;
+
+ /** Return the current position in the open file
+
+ @param ec Set to the error, if any occurred
+
+ @return The offset in bytes from the beginning of the file
+ */
+ std::uint64_t
+ pos(error_code& ec);
+
+ /** Adjust the current position in the open file
+
+ @param offset The offset in bytes from the beginning of the file
+
+ @param ec Set to the error, if any occurred
+ */
+ void
+ seek(std::uint64_t offset, error_code& ec);
+
+ /** Read from the open file
+
+ @param buffer The buffer for storing the result of the read
+
+ @param n The number of bytes to read
+
+ @param ec Set to the error, if any occurred
+ */
+ std::size_t
+ read(void* buffer, std::size_t n, error_code& ec);
+
+ /** Write to the open file
+
+ @param buffer The buffer holding the data to write
+
+ @param n The number of bytes to write
+
+ @param ec Set to the error, if any occurred
+ */
+ std::size_t
+ write(void const* buffer, std::size_t n, error_code& ec);
+};
+
+} // beast
+} // boost
+
+#include <boost/beast/core/impl/file_win32.ipp>
+
+#endif
+
+#endif