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