Chris@16: // boost/filesystem/fstream.hpp ------------------------------------------------------// Chris@16: Chris@16: // Copyright Beman Dawes 2002 Chris@16: Chris@16: // Distributed under the Boost Software License, Version 1.0. Chris@16: // See http://www.boost.org/LICENSE_1_0.txt Chris@16: Chris@16: // Library home page: http://www.boost.org/libs/filesystem Chris@16: Chris@16: //--------------------------------------------------------------------------------------// Chris@16: Chris@16: #ifndef BOOST_FILESYSTEM3_FSTREAM_HPP Chris@16: #define BOOST_FILESYSTEM3_FSTREAM_HPP Chris@16: Chris@16: #include Chris@16: Chris@16: # if defined( BOOST_NO_STD_WSTRING ) Chris@16: # error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support Chris@16: # endif Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: #include // must be the last #include Chris@16: Chris@16: // on Windows, except for standard libaries known to have wchar_t overloads for Chris@16: // file stream I/O, use path::string() to get a narrow character c_str() Chris@16: #if defined(BOOST_WINDOWS_API) \ Chris@16: && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 405 || defined(_STLPORT_VERSION)) Chris@16: // !Dinkumware || early Dinkumware || STLPort masquerading as Dinkumware Chris@16: # define BOOST_FILESYSTEM_C_STR string().c_str() // use narrow, since wide not available Chris@16: #else // use the native c_str, which will be narrow on POSIX, wide on Windows Chris@16: # define BOOST_FILESYSTEM_C_STR c_str() Chris@16: #endif Chris@16: Chris@16: namespace boost Chris@16: { Chris@16: namespace filesystem Chris@16: { Chris@16: Chris@16: //--------------------------------------------------------------------------------------// Chris@16: // basic_filebuf // Chris@16: //--------------------------------------------------------------------------------------// Chris@16: Chris@16: template < class charT, class traits = std::char_traits > Chris@16: class basic_filebuf : public std::basic_filebuf Chris@16: { Chris@16: private: // disallow copying Chris@16: basic_filebuf(const basic_filebuf&); Chris@16: const basic_filebuf& operator=(const basic_filebuf&); Chris@16: Chris@16: public: Chris@16: basic_filebuf() {} Chris@16: virtual ~basic_filebuf() {} Chris@16: Chris@16: basic_filebuf* Chris@16: open(const path& p, std::ios_base::openmode mode) Chris@16: { Chris@16: return std::basic_filebuf::open(p.BOOST_FILESYSTEM_C_STR, mode) Chris@16: ? this : 0; Chris@16: } Chris@16: }; Chris@16: Chris@16: //--------------------------------------------------------------------------------------// Chris@16: // basic_ifstream // Chris@16: //--------------------------------------------------------------------------------------// Chris@16: Chris@16: template < class charT, class traits = std::char_traits > Chris@16: class basic_ifstream : public std::basic_ifstream Chris@16: { Chris@16: private: // disallow copying Chris@16: basic_ifstream(const basic_ifstream&); Chris@16: const basic_ifstream& operator=(const basic_ifstream&); Chris@16: Chris@16: public: Chris@16: basic_ifstream() {} Chris@16: Chris@16: // use two signatures, rather than one signature with default second Chris@16: // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416) Chris@16: Chris@16: explicit basic_ifstream(const path& p) Chris@16: : std::basic_ifstream(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in) {} Chris@16: Chris@16: basic_ifstream(const path& p, std::ios_base::openmode mode) Chris@16: : std::basic_ifstream(p.BOOST_FILESYSTEM_C_STR, mode) {} Chris@16: Chris@16: void open(const path& p) Chris@16: { std::basic_ifstream::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in); } Chris@16: Chris@16: void open(const path& p, std::ios_base::openmode mode) Chris@16: { std::basic_ifstream::open(p.BOOST_FILESYSTEM_C_STR, mode); } Chris@16: Chris@16: virtual ~basic_ifstream() {} Chris@16: }; Chris@16: Chris@16: //--------------------------------------------------------------------------------------// Chris@16: // basic_ofstream // Chris@16: //--------------------------------------------------------------------------------------// Chris@16: Chris@16: template < class charT, class traits = std::char_traits > Chris@16: class basic_ofstream : public std::basic_ofstream Chris@16: { Chris@16: private: // disallow copying Chris@16: basic_ofstream(const basic_ofstream&); Chris@16: const basic_ofstream& operator=(const basic_ofstream&); Chris@16: Chris@16: public: Chris@16: basic_ofstream() {} Chris@16: Chris@16: // use two signatures, rather than one signature with default second Chris@16: // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416) Chris@16: Chris@16: explicit basic_ofstream(const path& p) Chris@16: : std::basic_ofstream(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out) {} Chris@16: Chris@16: basic_ofstream(const path& p, std::ios_base::openmode mode) Chris@16: : std::basic_ofstream(p.BOOST_FILESYSTEM_C_STR, mode) {} Chris@16: Chris@16: void open(const path& p) Chris@16: { std::basic_ofstream::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out); } Chris@16: Chris@16: void open(const path& p, std::ios_base::openmode mode) Chris@16: { std::basic_ofstream::open(p.BOOST_FILESYSTEM_C_STR, mode); } Chris@16: Chris@16: virtual ~basic_ofstream() {} Chris@16: }; Chris@16: Chris@16: //--------------------------------------------------------------------------------------// Chris@16: // basic_fstream // Chris@16: //--------------------------------------------------------------------------------------// Chris@16: Chris@16: template < class charT, class traits = std::char_traits > Chris@16: class basic_fstream : public std::basic_fstream Chris@16: { Chris@16: private: // disallow copying Chris@16: basic_fstream(const basic_fstream&); Chris@16: const basic_fstream & operator=(const basic_fstream&); Chris@16: Chris@16: public: Chris@16: basic_fstream() {} Chris@16: Chris@16: // use two signatures, rather than one signature with default second Chris@16: // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416) Chris@16: Chris@16: explicit basic_fstream(const path& p) Chris@16: : std::basic_fstream(p.BOOST_FILESYSTEM_C_STR, Chris@16: std::ios_base::in | std::ios_base::out) {} Chris@16: Chris@16: basic_fstream(const path& p, std::ios_base::openmode mode) Chris@16: : std::basic_fstream(p.BOOST_FILESYSTEM_C_STR, mode) {} Chris@16: Chris@16: void open(const path& p) Chris@16: { std::basic_fstream::open(p.BOOST_FILESYSTEM_C_STR, Chris@16: std::ios_base::in | std::ios_base::out); } Chris@16: Chris@16: void open(const path& p, std::ios_base::openmode mode) Chris@16: { std::basic_fstream::open(p.BOOST_FILESYSTEM_C_STR, mode); } Chris@16: Chris@16: virtual ~basic_fstream() {} Chris@16: Chris@16: }; Chris@16: Chris@16: //--------------------------------------------------------------------------------------// Chris@16: // typedefs // Chris@16: //--------------------------------------------------------------------------------------// Chris@16: Chris@16: typedef basic_filebuf filebuf; Chris@16: typedef basic_ifstream ifstream; Chris@16: typedef basic_ofstream ofstream; Chris@16: typedef basic_fstream fstream; Chris@16: Chris@16: typedef basic_filebuf wfilebuf; Chris@16: typedef basic_ifstream wifstream; Chris@16: typedef basic_ofstream wofstream; Chris@16: typedef basic_fstream wfstream; Chris@16: Chris@16: } // namespace filesystem Chris@16: } // namespace boost Chris@16: Chris@16: #include // pops abi_prefix.hpp pragmas Chris@16: #endif // BOOST_FILESYSTEM3_FSTREAM_HPP