123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164 |
- #ifndef BOOST_BEAST_CORE_FILE_BASE_HPP
- #define BOOST_BEAST_CORE_FILE_BASE_HPP
- #include <boost/beast/core/detail/config.hpp>
- #include <boost/beast/core/error.hpp>
- #include <boost/type_traits/make_void.hpp>
- #include <cstdint>
- #include <type_traits>
- namespace boost {
- namespace beast {
- enum class file_mode
- {
-
- read,
-
- scan,
-
- write,
-
- write_new,
-
- write_existing,
-
- append,
-
- append_existing
- };
- #if BOOST_BEAST_DOXYGEN
- template<class T>
- struct is_file : std::integral_constant<bool, ...>{};
- #else
- template<class T, class = void>
- struct is_file : std::false_type {};
- template<class T>
- struct is_file<T, boost::void_t<decltype(
- std::declval<bool&>() = std::declval<T const&>().is_open(),
- std::declval<T&>().close(std::declval<error_code&>()),
- std::declval<T&>().open(
- std::declval<char const*>(),
- std::declval<file_mode>(),
- std::declval<error_code&>()),
- std::declval<std::uint64_t&>() = std::declval<T&>().size(
- std::declval<error_code&>()),
- std::declval<std::uint64_t&>() = std::declval<T&>().pos(
- std::declval<error_code&>()),
- std::declval<T&>().seek(
- std::declval<std::uint64_t>(),
- std::declval<error_code&>()),
- std::declval<std::size_t&>() = std::declval<T&>().read(
- std::declval<void*>(),
- std::declval<std::size_t>(),
- std::declval<error_code&>()),
- std::declval<std::size_t&>() = std::declval<T&>().write(
- std::declval<void const*>(),
- std::declval<std::size_t>(),
- std::declval<error_code&>())
- )>> : std::integral_constant<bool,
- std::is_default_constructible<T>::value &&
- std::is_destructible<T>::value
- > {};
- #endif
- }
- }
- #endif
|