genericopenlibs/cppstdlib/stl/stlport/stl/_streambuf.c
changeset 22 ddc455616bd6
parent 0 e4d67989cc36
child 45 4b03adbd26ca
equal deleted inserted replaced
18:47c74d1534e1 22:ddc455616bd6
    34     _M_locale() {
    34     _M_locale() {
    35   //  _M_lock._M_initialize();
    35   //  _M_lock._M_initialize();
    36 }
    36 }
    37 #endif
    37 #endif
    38 
    38 
    39 template <class _CharT, class _Traits>
    39 
    40 basic_streambuf<_CharT, _Traits>::~basic_streambuf()
       
    41 {}
       
    42 
    40 
    43 template <class _CharT, class _Traits>
    41 template <class _CharT, class _Traits>
    44 locale
    42 locale
    45 basic_streambuf<_CharT, _Traits>::pubimbue(const locale& __loc) {
    43 basic_streambuf<_CharT, _Traits>::pubimbue(const locale& __loc) {
    46   this->imbue(__loc);
    44   this->imbue(__loc);
    47   locale __tmp = _M_locale;
    45   locale __tmp = _M_locale;
    48   _M_locale = __loc;
    46   _M_locale = __loc;
    49   return __tmp;
    47   return __tmp;
    50 }
    48 }
    51 
    49 
    52 template <class _CharT, class _Traits>
       
    53 streamsize
       
    54 basic_streambuf<_CharT, _Traits>::xsgetn(_CharT* __s, streamsize __n) {
       
    55   streamsize __result = 0;
       
    56   const int_type __eof = _Traits::eof();
       
    57 
    50 
    58   while (__result < __n) {
       
    59     if (_M_gnext < _M_gend) {
       
    60       size_t __chunk = (min) (__STATIC_CAST(size_t,_M_gend - _M_gnext),
       
    61                               __STATIC_CAST(size_t,__n - __result));
       
    62       _Traits::copy(__s, _M_gnext, __chunk);
       
    63       __result += __chunk;
       
    64       __s += __chunk;
       
    65       _M_gnext += __chunk;
       
    66     }
       
    67     else {
       
    68       int_type __c = this->sbumpc();
       
    69       if (!_Traits::eq_int_type(__c, __eof)) {
       
    70         *__s = _Traits::to_char_type(__c);
       
    71         ++__result;
       
    72         ++__s;
       
    73       }
       
    74       else
       
    75         break;
       
    76     }
       
    77   }
       
    78 
       
    79   return __result;
       
    80 }
       
    81 
       
    82 template <class _CharT, class _Traits>
       
    83 streamsize
       
    84 basic_streambuf<_CharT, _Traits>::xsputn(const _CharT* __s, streamsize __n)
       
    85 {
       
    86   streamsize __result = 0;
       
    87   const int_type __eof = _Traits::eof();
       
    88 
       
    89   while (__result < __n) {
       
    90     if (_M_pnext < _M_pend) {
       
    91       size_t __chunk = (min) (__STATIC_CAST(size_t,_M_pend - _M_pnext),
       
    92                            __STATIC_CAST(size_t,__n - __result));
       
    93       _Traits::copy(_M_pnext, __s, __chunk);
       
    94       __result += __chunk;
       
    95       __s += __chunk;
       
    96       _M_pnext += __chunk;
       
    97     }
       
    98 
       
    99     else if (!_Traits::eq_int_type(this->overflow(_Traits::to_int_type(*__s)),
       
   100                                    __eof)) {
       
   101       ++__result;
       
   102       ++__s;
       
   103     }
       
   104     else
       
   105       break;
       
   106   }
       
   107   return __result;
       
   108 }
       
   109 
       
   110 template <class _CharT, class _Traits>
       
   111 streamsize
       
   112 basic_streambuf<_CharT, _Traits>::_M_xsputnc(_CharT __c, streamsize __n)
       
   113 {
       
   114   streamsize __result = 0;
       
   115   const int_type __eof = _Traits::eof();
       
   116 
       
   117   while (__result < __n) {
       
   118     if (_M_pnext < _M_pend) {
       
   119       size_t __chunk = (min) (__STATIC_CAST(size_t,_M_pend - _M_pnext),
       
   120                            __STATIC_CAST(size_t,__n - __result));
       
   121       _Traits::assign(_M_pnext, __chunk, __c);
       
   122       __result += __chunk;
       
   123       _M_pnext += __chunk;
       
   124     }
       
   125 
       
   126     else if (!_Traits::eq_int_type(this->overflow(_Traits::to_int_type(__c)),
       
   127                                    __eof))
       
   128       ++__result;
       
   129     else
       
   130       break;
       
   131   }
       
   132   return __result;
       
   133 }
       
   134 
    51 
   135 template <class _CharT, class _Traits>
    52 template <class _CharT, class _Traits>
   136 _STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::int_type
    53 _STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::int_type
   137 basic_streambuf<_CharT, _Traits>::_M_snextc_aux()
    54 basic_streambuf<_CharT, _Traits>::_M_snextc_aux()
   138 {
    55 {
   143     _M_gnext = _M_gend;
    60     _M_gnext = _M_gend;
   144     return this->underflow();
    61     return this->underflow();
   145   }
    62   }
   146 }
    63 }
   147 
    64 
   148 template <class _CharT, class _Traits>
       
   149 _STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::int_type
       
   150 basic_streambuf<_CharT, _Traits>::pbackfail(int_type) {
       
   151  return _Traits::eof();
       
   152 }
       
   153 
    65 
   154 template <class _CharT, class _Traits>
       
   155 _STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::int_type
       
   156 basic_streambuf<_CharT, _Traits>::overflow(int_type) {
       
   157   return _Traits::eof();
       
   158 }
       
   159 
       
   160 template <class _CharT, class _Traits>
       
   161 _STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::int_type
       
   162 basic_streambuf<_CharT, _Traits>::uflow() {
       
   163     return ( _Traits::eq_int_type(this->underflow(),_Traits::eof()) ?
       
   164              _Traits::eof() :
       
   165              _Traits::to_int_type(*_M_gnext++));
       
   166 }
       
   167 
       
   168 template <class _CharT, class _Traits>
       
   169 _STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::int_type
       
   170 basic_streambuf<_CharT, _Traits>::underflow()
       
   171 { return _Traits::eof(); }
       
   172 
       
   173 template <class _CharT, class _Traits>
       
   174 streamsize
       
   175 basic_streambuf<_CharT, _Traits>::showmanyc()
       
   176 { return 0; }
       
   177 
       
   178 template <class _CharT, class _Traits>
       
   179 void
       
   180 basic_streambuf<_CharT, _Traits>::imbue(const locale&) {}
       
   181 
       
   182 template <class _CharT, class _Traits>
       
   183 int
       
   184 basic_streambuf<_CharT, _Traits>::sync() { return 0; }
       
   185 
       
   186 template <class _CharT, class _Traits>
       
   187 _STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::pos_type
       
   188 basic_streambuf<_CharT, _Traits>::seekpos(pos_type, ios_base::openmode)
       
   189 { return pos_type(-1); }
       
   190 
       
   191 template <class _CharT, class _Traits>
       
   192 _STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::pos_type
       
   193 basic_streambuf<_CharT, _Traits>::seekoff(off_type, ios_base::seekdir,
       
   194                                           ios_base::openmode)
       
   195 { return pos_type(-1); }
       
   196 
       
   197 template <class _CharT, class _Traits>
       
   198 basic_streambuf<_CharT, _Traits>*
       
   199 basic_streambuf<_CharT, _Traits>:: setbuf(char_type*, streamsize)
       
   200 { return this; }
       
   201 
    66 
   202 _STLP_END_NAMESPACE
    67 _STLP_END_NAMESPACE
   203 
    68 
   204 #endif
    69 #endif
   205 
    70