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 _STDIO_FILEBUF_H
00035 #define _STDIO_FILEBUF_H 1
00036
00037 #pragma GCC system_header
00038
00039 #include <fstream>
00040
00041 namespace __gnu_cxx
00042 {
00052 template<typename _CharT, typename _Traits = std::char_traits<_CharT> >
00053 class stdio_filebuf : public std::basic_filebuf<_CharT, _Traits>
00054 {
00055 public:
00056
00057 typedef _CharT char_type;
00058 typedef _Traits traits_type;
00059 typedef typename traits_type::int_type int_type;
00060 typedef typename traits_type::pos_type pos_type;
00061 typedef typename traits_type::off_type off_type;
00062 typedef std::size_t size_t;
00063
00064 public:
00068 stdio_filebuf() : std::basic_filebuf<_CharT, _Traits>() {}
00069
00079 stdio_filebuf(int __fd, std::ios_base::openmode __mode,
00080 size_t __size = static_cast<size_t>(BUFSIZ));
00081
00092 stdio_filebuf(std::__c_file* __f, std::ios_base::openmode __mode,
00093 size_t __size = static_cast<size_t>(BUFSIZ));
00094
00099 virtual
00100 ~stdio_filebuf();
00101
00110 int
00111 fd() { return this->_M_file.fd(); }
00112
00120 std::__c_file*
00121 file() { return this->_M_file.file(); }
00122 };
00123
00124 template<typename _CharT, typename _Traits>
00125 stdio_filebuf<_CharT, _Traits>::~stdio_filebuf()
00126 { }
00127
00128 template<typename _CharT, typename _Traits>
00129 stdio_filebuf<_CharT, _Traits>::
00130 stdio_filebuf(int __fd, std::ios_base::openmode __mode, size_t __size)
00131 {
00132 this->_M_file.sys_open(__fd, __mode);
00133 if (this->is_open())
00134 {
00135 this->_M_mode = __mode;
00136 this->_M_buf_size = __size;
00137 this->_M_allocate_internal_buffer();
00138 this->_M_reading = false;
00139 this->_M_writing = false;
00140 this->_M_set_buffer(-1);
00141 }
00142 }
00143
00144 template<typename _CharT, typename _Traits>
00145 stdio_filebuf<_CharT, _Traits>::
00146 stdio_filebuf(std::__c_file* __f, std::ios_base::openmode __mode,
00147 size_t __size)
00148 {
00149 this->_M_file.sys_open(__f, __mode);
00150 if (this->is_open())
00151 {
00152 this->_M_mode = __mode;
00153 this->_M_buf_size = __size;
00154 this->_M_allocate_internal_buffer();
00155 this->_M_reading = false;
00156 this->_M_writing = false;
00157 this->_M_set_buffer(-1);
00158 }
00159 }
00160 }
00161
00162 #endif