00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00034
#ifndef _EXT_STDIO_FILEBUF
00035
#define _EXT_STDIO_FILEBUF
00036
00037
#pragma GCC system_header
00038
#include <fstream>
00039
00040
namespace __gnu_cxx
00041 {
00051
template<
typename _CharT,
typename _Traits = std::
char_traits<_CharT> >
00052 class stdio_filebuf :
public std::basic_filebuf<_CharT, _Traits>
00053 {
00054
public:
00055
00056
typedef _CharT char_type;
00057
typedef _Traits traits_type;
00058
typedef typename traits_type::int_type int_type;
00059
typedef typename traits_type::pos_type pos_type;
00060
typedef typename traits_type::off_type off_type;
00061
00062
protected:
00063
00064 char_type _M_unbuf[4];
00065
00066
public:
00077
stdio_filebuf(
int __fd, std::ios_base::openmode __mode,
bool __del,
00078 int_type __size);
00079
00090
stdio_filebuf(std::__c_file* __f, std::ios_base::openmode __mode,
00091 int_type __size = static_cast<int_type>(BUFSIZ));
00092
00097
virtual
00098
~stdio_filebuf();
00099
00108
int
00109 fd()
00110 {
return _M_file.fd(); }
00111 };
00112
00113
template<
typename _CharT,
typename _Traits>
00114 stdio_filebuf<_CharT, _Traits>::~stdio_filebuf()
00115 { }
00116
00117
template<
typename _CharT,
typename _Traits>
00118
stdio_filebuf<_CharT, _Traits>::
00119 stdio_filebuf(
int __fd, std::ios_base::openmode __mode,
bool __del,
00120 int_type __size)
00121 {
00122 _M_file.sys_open(__fd, __mode, __del);
00123
if (this->is_open())
00124 {
00125 _M_mode = __mode;
00126
if (__size > 0 && __size < 4)
00127 {
00128
00129 _M_buf = _M_unbuf;
00130 _M_buf_size = __size;
00131 _M_buf_size_opt = 0;
00132 }
00133
else
00134 {
00135 _M_buf_size_opt = __size;
00136 _M_allocate_internal_buffer();
00137 }
00138 _M_set_indeterminate();
00139 }
00140 }
00141
00142
template<
typename _CharT,
typename _Traits>
00143
stdio_filebuf<_CharT, _Traits>::
00144 stdio_filebuf(std::__c_file* __f, std::ios_base::openmode __mode,
00145 int_type __size)
00146 {
00147 _M_file.sys_open(__f, __mode);
00148
if (this->is_open())
00149 {
00150 _M_mode = __mode;
00151
if (__size > 0 && __size < 4)
00152 {
00153
00154 _M_buf = _M_unbuf;
00155 _M_buf_size = __size;
00156 _M_buf_size_opt = 0;
00157 }
00158
else
00159 {
00160 _M_buf_size_opt = __size;
00161 _M_allocate_internal_buffer();
00162 }
00163 _M_set_indeterminate();
00164 }
00165 }
00166 }
00167
00168
#endif