Chris@16
|
1 // boost/filesystem/fstream.hpp ------------------------------------------------------//
|
Chris@16
|
2
|
Chris@16
|
3 // Copyright Beman Dawes 2002
|
Chris@16
|
4
|
Chris@16
|
5 // Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
6 // See http://www.boost.org/LICENSE_1_0.txt
|
Chris@16
|
7
|
Chris@16
|
8 // Library home page: http://www.boost.org/libs/filesystem
|
Chris@16
|
9
|
Chris@16
|
10 //--------------------------------------------------------------------------------------//
|
Chris@16
|
11
|
Chris@16
|
12 #ifndef BOOST_FILESYSTEM3_FSTREAM_HPP
|
Chris@16
|
13 #define BOOST_FILESYSTEM3_FSTREAM_HPP
|
Chris@16
|
14
|
Chris@16
|
15 #include <boost/config.hpp>
|
Chris@16
|
16
|
Chris@16
|
17 # if defined( BOOST_NO_STD_WSTRING )
|
Chris@16
|
18 # error Configuration not supported: Boost.Filesystem V3 and later requires std::wstring support
|
Chris@16
|
19 # endif
|
Chris@16
|
20
|
Chris@16
|
21 #include <boost/filesystem/path.hpp>
|
Chris@16
|
22 #include <iosfwd>
|
Chris@16
|
23 #include <fstream>
|
Chris@16
|
24
|
Chris@16
|
25 #include <boost/config/abi_prefix.hpp> // must be the last #include
|
Chris@16
|
26
|
Chris@16
|
27 // on Windows, except for standard libaries known to have wchar_t overloads for
|
Chris@16
|
28 // file stream I/O, use path::string() to get a narrow character c_str()
|
Chris@16
|
29 #if defined(BOOST_WINDOWS_API) \
|
Chris@16
|
30 && (!defined(_CPPLIB_VER) || _CPPLIB_VER < 405 || defined(_STLPORT_VERSION))
|
Chris@16
|
31 // !Dinkumware || early Dinkumware || STLPort masquerading as Dinkumware
|
Chris@16
|
32 # define BOOST_FILESYSTEM_C_STR string().c_str() // use narrow, since wide not available
|
Chris@16
|
33 #else // use the native c_str, which will be narrow on POSIX, wide on Windows
|
Chris@16
|
34 # define BOOST_FILESYSTEM_C_STR c_str()
|
Chris@16
|
35 #endif
|
Chris@16
|
36
|
Chris@16
|
37 namespace boost
|
Chris@16
|
38 {
|
Chris@16
|
39 namespace filesystem
|
Chris@16
|
40 {
|
Chris@16
|
41
|
Chris@16
|
42 //--------------------------------------------------------------------------------------//
|
Chris@16
|
43 // basic_filebuf //
|
Chris@16
|
44 //--------------------------------------------------------------------------------------//
|
Chris@16
|
45
|
Chris@16
|
46 template < class charT, class traits = std::char_traits<charT> >
|
Chris@16
|
47 class basic_filebuf : public std::basic_filebuf<charT,traits>
|
Chris@16
|
48 {
|
Chris@16
|
49 private: // disallow copying
|
Chris@16
|
50 basic_filebuf(const basic_filebuf&);
|
Chris@16
|
51 const basic_filebuf& operator=(const basic_filebuf&);
|
Chris@16
|
52
|
Chris@16
|
53 public:
|
Chris@16
|
54 basic_filebuf() {}
|
Chris@16
|
55 virtual ~basic_filebuf() {}
|
Chris@16
|
56
|
Chris@16
|
57 basic_filebuf<charT,traits>*
|
Chris@16
|
58 open(const path& p, std::ios_base::openmode mode)
|
Chris@16
|
59 {
|
Chris@16
|
60 return std::basic_filebuf<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, mode)
|
Chris@16
|
61 ? this : 0;
|
Chris@16
|
62 }
|
Chris@16
|
63 };
|
Chris@16
|
64
|
Chris@16
|
65 //--------------------------------------------------------------------------------------//
|
Chris@16
|
66 // basic_ifstream //
|
Chris@16
|
67 //--------------------------------------------------------------------------------------//
|
Chris@16
|
68
|
Chris@16
|
69 template < class charT, class traits = std::char_traits<charT> >
|
Chris@16
|
70 class basic_ifstream : public std::basic_ifstream<charT,traits>
|
Chris@16
|
71 {
|
Chris@16
|
72 private: // disallow copying
|
Chris@16
|
73 basic_ifstream(const basic_ifstream&);
|
Chris@16
|
74 const basic_ifstream& operator=(const basic_ifstream&);
|
Chris@16
|
75
|
Chris@16
|
76 public:
|
Chris@16
|
77 basic_ifstream() {}
|
Chris@16
|
78
|
Chris@16
|
79 // use two signatures, rather than one signature with default second
|
Chris@16
|
80 // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416)
|
Chris@16
|
81
|
Chris@16
|
82 explicit basic_ifstream(const path& p)
|
Chris@16
|
83 : std::basic_ifstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in) {}
|
Chris@16
|
84
|
Chris@16
|
85 basic_ifstream(const path& p, std::ios_base::openmode mode)
|
Chris@16
|
86 : std::basic_ifstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, mode) {}
|
Chris@16
|
87
|
Chris@16
|
88 void open(const path& p)
|
Chris@16
|
89 { std::basic_ifstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::in); }
|
Chris@16
|
90
|
Chris@16
|
91 void open(const path& p, std::ios_base::openmode mode)
|
Chris@16
|
92 { std::basic_ifstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, mode); }
|
Chris@16
|
93
|
Chris@16
|
94 virtual ~basic_ifstream() {}
|
Chris@16
|
95 };
|
Chris@16
|
96
|
Chris@16
|
97 //--------------------------------------------------------------------------------------//
|
Chris@16
|
98 // basic_ofstream //
|
Chris@16
|
99 //--------------------------------------------------------------------------------------//
|
Chris@16
|
100
|
Chris@16
|
101 template < class charT, class traits = std::char_traits<charT> >
|
Chris@16
|
102 class basic_ofstream : public std::basic_ofstream<charT,traits>
|
Chris@16
|
103 {
|
Chris@16
|
104 private: // disallow copying
|
Chris@16
|
105 basic_ofstream(const basic_ofstream&);
|
Chris@16
|
106 const basic_ofstream& operator=(const basic_ofstream&);
|
Chris@16
|
107
|
Chris@16
|
108 public:
|
Chris@16
|
109 basic_ofstream() {}
|
Chris@16
|
110
|
Chris@16
|
111 // use two signatures, rather than one signature with default second
|
Chris@16
|
112 // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416)
|
Chris@16
|
113
|
Chris@16
|
114 explicit basic_ofstream(const path& p)
|
Chris@16
|
115 : std::basic_ofstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out) {}
|
Chris@16
|
116
|
Chris@16
|
117 basic_ofstream(const path& p, std::ios_base::openmode mode)
|
Chris@16
|
118 : std::basic_ofstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, mode) {}
|
Chris@16
|
119
|
Chris@16
|
120 void open(const path& p)
|
Chris@16
|
121 { std::basic_ofstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, std::ios_base::out); }
|
Chris@16
|
122
|
Chris@16
|
123 void open(const path& p, std::ios_base::openmode mode)
|
Chris@16
|
124 { std::basic_ofstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, mode); }
|
Chris@16
|
125
|
Chris@16
|
126 virtual ~basic_ofstream() {}
|
Chris@16
|
127 };
|
Chris@16
|
128
|
Chris@16
|
129 //--------------------------------------------------------------------------------------//
|
Chris@16
|
130 // basic_fstream //
|
Chris@16
|
131 //--------------------------------------------------------------------------------------//
|
Chris@16
|
132
|
Chris@16
|
133 template < class charT, class traits = std::char_traits<charT> >
|
Chris@16
|
134 class basic_fstream : public std::basic_fstream<charT,traits>
|
Chris@16
|
135 {
|
Chris@16
|
136 private: // disallow copying
|
Chris@16
|
137 basic_fstream(const basic_fstream&);
|
Chris@16
|
138 const basic_fstream & operator=(const basic_fstream&);
|
Chris@16
|
139
|
Chris@16
|
140 public:
|
Chris@16
|
141 basic_fstream() {}
|
Chris@16
|
142
|
Chris@16
|
143 // use two signatures, rather than one signature with default second
|
Chris@16
|
144 // argument, to workaround VC++ 7.1 bug (ID VSWhidbey 38416)
|
Chris@16
|
145
|
Chris@16
|
146 explicit basic_fstream(const path& p)
|
Chris@16
|
147 : std::basic_fstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR,
|
Chris@16
|
148 std::ios_base::in | std::ios_base::out) {}
|
Chris@16
|
149
|
Chris@16
|
150 basic_fstream(const path& p, std::ios_base::openmode mode)
|
Chris@16
|
151 : std::basic_fstream<charT,traits>(p.BOOST_FILESYSTEM_C_STR, mode) {}
|
Chris@16
|
152
|
Chris@16
|
153 void open(const path& p)
|
Chris@16
|
154 { std::basic_fstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR,
|
Chris@16
|
155 std::ios_base::in | std::ios_base::out); }
|
Chris@16
|
156
|
Chris@16
|
157 void open(const path& p, std::ios_base::openmode mode)
|
Chris@16
|
158 { std::basic_fstream<charT,traits>::open(p.BOOST_FILESYSTEM_C_STR, mode); }
|
Chris@16
|
159
|
Chris@16
|
160 virtual ~basic_fstream() {}
|
Chris@16
|
161
|
Chris@16
|
162 };
|
Chris@16
|
163
|
Chris@16
|
164 //--------------------------------------------------------------------------------------//
|
Chris@16
|
165 // typedefs //
|
Chris@16
|
166 //--------------------------------------------------------------------------------------//
|
Chris@16
|
167
|
Chris@16
|
168 typedef basic_filebuf<char> filebuf;
|
Chris@16
|
169 typedef basic_ifstream<char> ifstream;
|
Chris@16
|
170 typedef basic_ofstream<char> ofstream;
|
Chris@16
|
171 typedef basic_fstream<char> fstream;
|
Chris@16
|
172
|
Chris@16
|
173 typedef basic_filebuf<wchar_t> wfilebuf;
|
Chris@16
|
174 typedef basic_ifstream<wchar_t> wifstream;
|
Chris@16
|
175 typedef basic_ofstream<wchar_t> wofstream;
|
Chris@16
|
176 typedef basic_fstream<wchar_t> wfstream;
|
Chris@16
|
177
|
Chris@16
|
178 } // namespace filesystem
|
Chris@16
|
179 } // namespace boost
|
Chris@16
|
180
|
Chris@16
|
181 #include <boost/config/abi_suffix.hpp> // pops abi_prefix.hpp pragmas
|
Chris@16
|
182 #endif // BOOST_FILESYSTEM3_FSTREAM_HPP
|