BVB Source Codes

mars Show file_descriptor.hpp Source code

Return Download mars: download file_descriptor.hpp Source code - Download mars Source code - Type:.hpp
  1. // (C) Copyright 2008 CodeRage, LLC (turkanis at coderage dot com)
  2. // (C) Copyright 2003-2007 Jonathan Turkanis
  3. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt.)
  5.  
  6. // See http://www.boost.org/libs/iostreams for documentation.
  7.  
  8. // Inspired by fdstream.hpp, (C) Copyright Nicolai M. Josuttis 2001,
  9. // available at http://www.josuttis.com/cppcode/fdstream.html.
  10.  
  11. #ifndef BOOST_IOSTREAMS_FILE_DESCRIPTOR_HPP_INCLUDED
  12. #define BOOST_IOSTREAMS_FILE_DESCRIPTOR_HPP_INCLUDED
  13.  
  14. #if defined(_MSC_VER) && (_MSC_VER >= 1020)
  15. # pragma once
  16. #endif
  17.  
  18. #include <string>
  19. #include <boost/cstdint.hpp>               // intmax_t.
  20. #include <boost/iostreams/categories.hpp>  // tags.
  21. #include <boost/iostreams/detail/config/auto_link.hpp>
  22. #include <boost/iostreams/detail/config/dyn_link.hpp>
  23. #include <boost/iostreams/detail/config/windows_posix.hpp>
  24. #include <boost/iostreams/detail/file_handle.hpp>
  25. #include <boost/iostreams/detail/ios.hpp>  // openmode, seekdir, int types.
  26. #include <boost/iostreams/detail/path.hpp>
  27. #include <boost/iostreams/positioning.hpp>
  28. #include <boost/shared_ptr.hpp>
  29.  
  30. // Must come last.
  31. #include <boost/config/abi_prefix.hpp>
  32.  
  33. namespace mars_boost {} namespace boost = mars_boost; namespace mars_boost { namespace iostreams {
  34.  
  35. // Forward declarations
  36. class file_descriptor_source;
  37. class file_descriptor_sink;
  38. namespace detail { struct file_descriptor_impl; }
  39.  
  40. enum file_descriptor_flags
  41. {
  42.     never_close_handle = 0,
  43.     close_handle = 3
  44. };
  45.  
  46. class BOOST_IOSTREAMS_DECL file_descriptor {
  47. public:
  48.     friend class file_descriptor_source;
  49.     friend class file_descriptor_sink;
  50.     typedef detail::file_handle  handle_type;
  51.     typedef char                 char_type;
  52.     struct category
  53.         : seekable_device_tag,
  54.           closable_tag
  55.         { };
  56.  
  57.     // Default constructor
  58.     file_descriptor();
  59.  
  60.     // Constructors taking file desciptors
  61.     file_descriptor(handle_type fd, file_descriptor_flags);
  62. #ifdef BOOST_IOSTREAMS_WINDOWS
  63.     file_descriptor(int fd, file_descriptor_flags);
  64. #endif
  65.  
  66. #if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
  67.     // Constructors taking file desciptors
  68.     explicit file_descriptor(handle_type fd, bool close_on_exit = false);
  69. #ifdef BOOST_IOSTREAMS_WINDOWS
  70.     explicit file_descriptor(int fd, bool close_on_exit = false);
  71. #endif
  72. #endif
  73.  
  74.     // Constructor taking a std:: string
  75.     explicit file_descriptor( const std::string& path,
  76.                               BOOST_IOS::openmode mode =
  77.                                   BOOST_IOS::in | BOOST_IOS::out );
  78.  
  79.     // Constructor taking a C-style string
  80.     explicit file_descriptor( const char* path,
  81.                               BOOST_IOS::openmode mode =
  82.                                   BOOST_IOS::in | BOOST_IOS::out );
  83.  
  84.     // Constructor taking a Boost.Filesystem path
  85.     template<typename Path>
  86.     explicit file_descriptor( const Path& path,
  87.                               BOOST_IOS::openmode mode =
  88.                                   BOOST_IOS::in | BOOST_IOS::out )
  89.     {
  90.         init();
  91.         open(detail::path(path), mode);
  92.     }
  93.  
  94.     // Copy constructor
  95.     file_descriptor(const file_descriptor& other);
  96.  
  97.     // open overloads taking file descriptors
  98.     void open(handle_type fd, file_descriptor_flags);
  99. #ifdef BOOST_IOSTREAMS_WINDOWS
  100.     void open(int fd, file_descriptor_flags);
  101. #endif
  102.  
  103. #if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
  104.     // open overloads taking file descriptors
  105.     void open(handle_type fd, bool close_on_exit = false);
  106. #ifdef BOOST_IOSTREAMS_WINDOWS
  107.     void open(int fd, bool close_on_exit = false);
  108. #endif
  109. #endif
  110.  
  111.     // open overload taking a std::string
  112.     void open( const std::string& path,
  113.                BOOST_IOS::openmode mode =
  114.                    BOOST_IOS::in | BOOST_IOS::out );
  115.  
  116.     // open overload taking C-style string
  117.     void open( const char* path,
  118.                BOOST_IOS::openmode mode =
  119.                    BOOST_IOS::in | BOOST_IOS::out );
  120.  
  121.     // open overload taking a Boost.Filesystem path
  122.     template<typename Path>
  123.     void open( const Path& path,
  124.                BOOST_IOS::openmode mode =
  125.                    BOOST_IOS::in | BOOST_IOS::out )
  126.     { open(detail::path(path), mode); }
  127.  
  128.     bool is_open() const;
  129.     void close();
  130.     std::streamsize read(char_type* s, std::streamsize n);
  131.     std::streamsize write(const char_type* s, std::streamsize n);
  132.     std::streampos seek(stream_offset off, BOOST_IOS::seekdir way);
  133.     handle_type handle() const;
  134. private:
  135.     void init();
  136.  
  137.     // open overload taking a detail::path
  138.     void open( const detail::path& path,
  139.                BOOST_IOS::openmode,
  140.                BOOST_IOS::openmode = BOOST_IOS::openmode(0) );
  141.  
  142.     typedef detail::file_descriptor_impl impl_type;
  143.     shared_ptr<impl_type> pimpl_;
  144. };
  145.  
  146. class BOOST_IOSTREAMS_DECL file_descriptor_source : private file_descriptor {
  147. public:
  148. #ifdef BOOST_IOSTREAMS_WINDOWS
  149.     typedef void*  handle_type;  // A.k.a HANDLE
  150. #else
  151.     typedef int    handle_type;
  152. #endif
  153.     typedef char   char_type;
  154.     struct category
  155.       : input_seekable,
  156.         device_tag,
  157.         closable_tag
  158.       { };
  159.     using file_descriptor::is_open;
  160.     using file_descriptor::close;
  161.     using file_descriptor::read;
  162.     using file_descriptor::seek;
  163.     using file_descriptor::handle;
  164.  
  165.     // Default constructor
  166.     file_descriptor_source() { }
  167.  
  168.     // Constructors taking file desciptors
  169.     explicit file_descriptor_source(handle_type fd, file_descriptor_flags);
  170. #ifdef BOOST_IOSTREAMS_WINDOWS
  171.     explicit file_descriptor_source(int fd, file_descriptor_flags);
  172. #endif
  173.  
  174. #if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
  175.     // Constructors taking file desciptors
  176.     explicit file_descriptor_source(handle_type fd, bool close_on_exit = false);
  177. #ifdef BOOST_IOSTREAMS_WINDOWS
  178.     explicit file_descriptor_source(int fd, bool close_on_exit = false);
  179. #endif
  180. #endif
  181.  
  182.     // Constructor taking a std:: string
  183.     explicit file_descriptor_source( const std::string& path,
  184.                                      BOOST_IOS::openmode mode = BOOST_IOS::in );
  185.  
  186.     // Constructor taking a C-style string
  187.     explicit file_descriptor_source( const char* path,
  188.                                      BOOST_IOS::openmode mode = BOOST_IOS::in );
  189.  
  190.     // Constructor taking a Boost.Filesystem path
  191.     template<typename Path>
  192.     explicit file_descriptor_source( const Path& path,
  193.                                      BOOST_IOS::openmode mode = BOOST_IOS::in )
  194.     { open(detail::path(path), mode); }
  195.  
  196.     // Copy constructor
  197.     file_descriptor_source(const file_descriptor_source& other);
  198.  
  199.     // Constructors taking file desciptors
  200.     void open(handle_type fd, file_descriptor_flags);
  201. #ifdef BOOST_IOSTREAMS_WINDOWS
  202.     void open(int fd, file_descriptor_flags);
  203. #endif
  204.  
  205. #if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
  206.     // open overloads taking file descriptors
  207.     void open(handle_type fd, bool close_on_exit = false);
  208. #ifdef BOOST_IOSTREAMS_WINDOWS
  209.     void open(int fd, bool close_on_exit = false);
  210. #endif
  211. #endif
  212.  
  213.     // open overload taking a std::string
  214.     void open(const std::string& path, BOOST_IOS::openmode mode = BOOST_IOS::in);
  215.  
  216.     // open overload taking C-style string
  217.     void open(const char* path, BOOST_IOS::openmode mode = BOOST_IOS::in);
  218.  
  219.     // open overload taking a Boost.Filesystem path
  220.     template<typename Path>
  221.     void open(const Path& path, BOOST_IOS::openmode mode = BOOST_IOS::in);
  222. private:
  223.  
  224.     // open overload taking a detail::path
  225.     void open(const detail::path& path, BOOST_IOS::openmode);
  226. };
  227.  
  228. class BOOST_IOSTREAMS_DECL file_descriptor_sink : private file_descriptor {
  229. public:
  230. #ifdef BOOST_IOSTREAMS_WINDOWS
  231.     typedef void*  handle_type;  // A.k.a HANDLE
  232. #else
  233.     typedef int    handle_type;
  234. #endif
  235.     typedef char   char_type;
  236.     struct category
  237.       : output_seekable,
  238.         device_tag,
  239.         closable_tag
  240.       { };
  241.     using file_descriptor::is_open;
  242.     using file_descriptor::close;
  243.     using file_descriptor::write;
  244.     using file_descriptor::seek;
  245.     using file_descriptor::handle;
  246.  
  247.     // Default constructor
  248.     file_descriptor_sink() { }
  249.  
  250.     // Constructors taking file desciptors
  251.     file_descriptor_sink(handle_type fd, file_descriptor_flags);
  252. #ifdef BOOST_IOSTREAMS_WINDOWS
  253.     file_descriptor_sink(int fd, file_descriptor_flags);
  254. #endif
  255.  
  256. #if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
  257.     // Constructors taking file desciptors
  258.     explicit file_descriptor_sink(handle_type fd, bool close_on_exit = false);
  259. #ifdef BOOST_IOSTREAMS_WINDOWS
  260.     explicit file_descriptor_sink(int fd, bool close_on_exit = false);
  261. #endif
  262. #endif
  263.  
  264.     // Constructor taking a std:: string
  265.     explicit file_descriptor_sink( const std::string& path,
  266.                                    BOOST_IOS::openmode mode = BOOST_IOS::out );
  267.  
  268.     // Constructor taking a C-style string
  269.     explicit file_descriptor_sink( const char* path,
  270.                                    BOOST_IOS::openmode mode = BOOST_IOS::out );
  271.  
  272.     // Constructor taking a Boost.Filesystem path
  273.     template<typename Path>
  274.     explicit file_descriptor_sink( const Path& path,
  275.                                    BOOST_IOS::openmode mode = BOOST_IOS::out )
  276.     { open(detail::path(path), mode); }
  277.  
  278.     // Copy constructor
  279.     file_descriptor_sink(const file_descriptor_sink& other);
  280.  
  281.     // open overloads taking file descriptors
  282.     void open(handle_type fd, file_descriptor_flags);
  283. #ifdef BOOST_IOSTREAMS_WINDOWS
  284.     void open(int fd, file_descriptor_flags);
  285. #endif
  286.  
  287. #if defined(BOOST_IOSTREAMS_USE_DEPRECATED)
  288.     // open overloads taking file descriptors
  289.     void open(handle_type fd, bool close_on_exit = false);
  290. #ifdef BOOST_IOSTREAMS_WINDOWS
  291.     void open(int fd, bool close_on_exit = false);
  292. #endif
  293. #endif
  294.  
  295.     // open overload taking a std::string
  296.     void open( const std::string& path,
  297.                BOOST_IOS::openmode mode = BOOST_IOS::out );
  298.  
  299.     // open overload taking C-style string
  300.     void open( const char* path,
  301.                BOOST_IOS::openmode mode = BOOST_IOS::out );
  302.  
  303.     // open overload taking a Boost.Filesystem path
  304.     template<typename Path>
  305.     void open( const Path& path,
  306.                BOOST_IOS::openmode mode = BOOST_IOS::out )
  307.     { open(detail::path(path), mode); }
  308. private:
  309.  
  310.     // open overload taking a detail::path
  311.     void open(const detail::path& path, BOOST_IOS::openmode);
  312. };
  313.  
  314. } } // End namespaces iostreams, boost.
  315.  
  316. #include <boost/config/abi_suffix.hpp> // pops abi_suffix.hpp pragmas
  317.  
  318. #endif // #ifndef BOOST_IOSTREAMS_FILE_DESCRIPTOR_HPP_INCLUDED
  319.  
downloadfile_descriptor.hpp Source code - Download mars Source code
Related Source Codes/Software:
Hero - Elegant transition library for iOS & tvOS 2017-06-09
deep-photo-styletransfer - Code and data for paper "Deep Photo Style Transfer... 2017-06-09
mastodon - A GNU Social-compatible microblogging server ... 2017-06-09
plyr - A simple HTML5, YouTube and Vimeo player ... 2017-06-08
prepack - Prepack is a partial evaluator for JavaScript. Pre... 2017-06-08
Public-APIs - 2017-06-09
lottie-ios - An iOS library to natively render After Effects ve... 2017-06-09
Awesome-Hacking - A collection of various awesome lists for hackers,... 2017-06-09
algorithms - Minimal examples of data structures and algorithms... 2017-06-10
lectures - Oxford Deep NLP 2017 course 2017-06-10
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top