epoc32/include/tools/stlport/stl/_streambuf.c
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 /*
     2  * Copyright (c) 1999
     3  * Silicon Graphics Computer Systems, Inc.
     4  *
     5  * Copyright (c) 1999
     6  * Boris Fomitchev
     7  *
     8  * This material is provided "as is", with absolutely no warranty expressed
     9  * or implied. Any use is at your own risk.
    10  *
    11  * Permission to use or copy this software for any purpose is hereby granted
    12  * without fee, provided the above notices are retained on all copies.
    13  * Permission to modify the code and to distribute modified code is granted,
    14  * provided the above notices are retained, and a notice that the code was
    15  * modified is included with the above copyright notice.
    16  *
    17  */
    18 #ifndef _STLP_STREAMBUF_C
    19 #define _STLP_STREAMBUF_C
    20 
    21 #ifndef _STLP_INTERNAL_STREAMBUF
    22 #  include <stl/_streambuf.h>
    23 #endif
    24 
    25 _STLP_BEGIN_NAMESPACE
    26 //----------------------------------------------------------------------
    27 // Non-inline basic_streambuf<> member functions.
    28 
    29 #if !defined (_STLP_MSVC) || (_STLP_MSVC >= 1300) || !defined (_STLP_USE_STATIC_LIB)
    30 template <class _CharT, class _Traits>
    31 basic_streambuf<_CharT, _Traits>::basic_streambuf()
    32   : _M_gbegin(0), _M_gnext(0), _M_gend(0),
    33     _M_pbegin(0), _M_pnext(0), _M_pend(0),
    34     _M_locale() {
    35   //  _M_lock._M_initialize();
    36 }
    37 #endif
    38 
    39 template <class _CharT, class _Traits>
    40 basic_streambuf<_CharT, _Traits>::~basic_streambuf()
    41 {}
    42 
    43 template <class _CharT, class _Traits>
    44 locale
    45 basic_streambuf<_CharT, _Traits>::pubimbue(const locale& __loc) {
    46   this->imbue(__loc);
    47   locale __tmp = _M_locale;
    48   _M_locale = __loc;
    49   return __tmp;
    50 }
    51 
    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 
    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 
   135 template <class _CharT, class _Traits>
   136 _STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::int_type
   137 basic_streambuf<_CharT, _Traits>::_M_snextc_aux()
   138 {
   139   int_type __eof = _Traits::eof();
   140   if (_M_gend == _M_gnext)
   141     return _Traits::eq_int_type(this->uflow(), __eof) ? __eof : this->sgetc();
   142   else {
   143     _M_gnext = _M_gend;
   144     return this->underflow();
   145   }
   146 }
   147 
   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 
   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 
   202 _STLP_END_NAMESPACE
   203 
   204 #endif
   205 
   206 // Local Variables:
   207 // mode:C++
   208 // End: