epoc32/include/stdapis/stlportv5/stl/_streambuf.c
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
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.
williamr@2
     1
/*
williamr@2
     2
 * Copyright (c) 1999
williamr@2
     3
 * Silicon Graphics Computer Systems, Inc.
williamr@2
     4
 *
williamr@4
     5
 * Copyright (c) 1999
williamr@2
     6
 * Boris Fomitchev
williamr@2
     7
 *
williamr@2
     8
 * This material is provided "as is", with absolutely no warranty expressed
williamr@2
     9
 * or implied. Any use is at your own risk.
williamr@2
    10
 *
williamr@4
    11
 * Permission to use or copy this software for any purpose is hereby granted
williamr@2
    12
 * without fee, provided the above notices are retained on all copies.
williamr@2
    13
 * Permission to modify the code and to distribute modified code is granted,
williamr@2
    14
 * provided the above notices are retained, and a notice that the code was
williamr@2
    15
 * modified is included with the above copyright notice.
williamr@2
    16
 *
williamr@4
    17
 */
williamr@2
    18
#ifndef _STLP_STREAMBUF_C
williamr@2
    19
#define _STLP_STREAMBUF_C
williamr@2
    20
williamr@2
    21
#ifndef _STLP_INTERNAL_STREAMBUF
williamr@4
    22
#  include <stl/_streambuf.h>
williamr@2
    23
#endif
williamr@2
    24
williamr@2
    25
_STLP_BEGIN_NAMESPACE
williamr@2
    26
//----------------------------------------------------------------------
williamr@2
    27
// Non-inline basic_streambuf<> member functions.
williamr@2
    28
williamr@4
    29
#if !defined (_STLP_MSVC) || (_STLP_MSVC >= 1300) || !defined (_STLP_USE_STATIC_LIB)
williamr@2
    30
template <class _CharT, class _Traits>
williamr@4
    31
basic_streambuf<_CharT, _Traits>::basic_streambuf()
williamr@2
    32
  : _M_gbegin(0), _M_gnext(0), _M_gend(0),
williamr@2
    33
    _M_pbegin(0), _M_pnext(0), _M_pend(0),
williamr@4
    34
    _M_locale() {
williamr@2
    35
  //  _M_lock._M_initialize();
williamr@2
    36
}
williamr@4
    37
#endif
williamr@2
    38
williamr@2
    39
template <class _CharT, class _Traits>
williamr@4
    40
basic_streambuf<_CharT, _Traits>::~basic_streambuf()
williamr@2
    41
{}
williamr@2
    42
williamr@2
    43
template <class _CharT, class _Traits>
williamr@4
    44
locale
williamr@2
    45
basic_streambuf<_CharT, _Traits>::pubimbue(const locale& __loc) {
williamr@2
    46
  this->imbue(__loc);
williamr@2
    47
  locale __tmp = _M_locale;
williamr@2
    48
  _M_locale = __loc;
williamr@2
    49
  return __tmp;
williamr@2
    50
}
williamr@2
    51
williamr@2
    52
template <class _CharT, class _Traits>
williamr@4
    53
streamsize
williamr@4
    54
basic_streambuf<_CharT, _Traits>::xsgetn(_CharT* __s, streamsize __n) {
williamr@2
    55
  streamsize __result = 0;
williamr@2
    56
  const int_type __eof = _Traits::eof();
williamr@2
    57
williamr@2
    58
  while (__result < __n) {
williamr@2
    59
    if (_M_gnext < _M_gend) {
williamr@2
    60
      size_t __chunk = (min) (__STATIC_CAST(size_t,_M_gend - _M_gnext),
williamr@4
    61
                              __STATIC_CAST(size_t,__n - __result));
williamr@2
    62
      _Traits::copy(__s, _M_gnext, __chunk);
williamr@2
    63
      __result += __chunk;
williamr@2
    64
      __s += __chunk;
williamr@2
    65
      _M_gnext += __chunk;
williamr@2
    66
    }
williamr@2
    67
    else {
williamr@2
    68
      int_type __c = this->sbumpc();
williamr@2
    69
      if (!_Traits::eq_int_type(__c, __eof)) {
williamr@4
    70
        *__s = _Traits::to_char_type(__c);
williamr@2
    71
        ++__result;
williamr@4
    72
        ++__s;
williamr@2
    73
      }
williamr@2
    74
      else
williamr@4
    75
        break;
williamr@2
    76
    }
williamr@2
    77
  }
williamr@4
    78
williamr@2
    79
  return __result;
williamr@2
    80
}
williamr@2
    81
williamr@2
    82
template <class _CharT, class _Traits>
williamr@4
    83
streamsize
williamr@2
    84
basic_streambuf<_CharT, _Traits>::xsputn(const _CharT* __s, streamsize __n)
williamr@2
    85
{
williamr@2
    86
  streamsize __result = 0;
williamr@2
    87
  const int_type __eof = _Traits::eof();
williamr@2
    88
williamr@2
    89
  while (__result < __n) {
williamr@2
    90
    if (_M_pnext < _M_pend) {
williamr@2
    91
      size_t __chunk = (min) (__STATIC_CAST(size_t,_M_pend - _M_pnext),
williamr@2
    92
                           __STATIC_CAST(size_t,__n - __result));
williamr@2
    93
      _Traits::copy(_M_pnext, __s, __chunk);
williamr@2
    94
      __result += __chunk;
williamr@2
    95
      __s += __chunk;
williamr@2
    96
      _M_pnext += __chunk;
williamr@2
    97
    }
williamr@2
    98
williamr@2
    99
    else if (!_Traits::eq_int_type(this->overflow(_Traits::to_int_type(*__s)),
williamr@2
   100
                                   __eof)) {
williamr@2
   101
      ++__result;
williamr@2
   102
      ++__s;
williamr@2
   103
    }
williamr@2
   104
    else
williamr@2
   105
      break;
williamr@2
   106
  }
williamr@2
   107
  return __result;
williamr@2
   108
}
williamr@2
   109
williamr@2
   110
template <class _CharT, class _Traits>
williamr@4
   111
streamsize
williamr@2
   112
basic_streambuf<_CharT, _Traits>::_M_xsputnc(_CharT __c, streamsize __n)
williamr@2
   113
{
williamr@2
   114
  streamsize __result = 0;
williamr@2
   115
  const int_type __eof = _Traits::eof();
williamr@2
   116
williamr@2
   117
  while (__result < __n) {
williamr@2
   118
    if (_M_pnext < _M_pend) {
williamr@2
   119
      size_t __chunk = (min) (__STATIC_CAST(size_t,_M_pend - _M_pnext),
williamr@2
   120
                           __STATIC_CAST(size_t,__n - __result));
williamr@2
   121
      _Traits::assign(_M_pnext, __chunk, __c);
williamr@2
   122
      __result += __chunk;
williamr@2
   123
      _M_pnext += __chunk;
williamr@2
   124
    }
williamr@2
   125
williamr@2
   126
    else if (!_Traits::eq_int_type(this->overflow(_Traits::to_int_type(__c)),
williamr@2
   127
                                   __eof))
williamr@2
   128
      ++__result;
williamr@2
   129
    else
williamr@2
   130
      break;
williamr@2
   131
  }
williamr@2
   132
  return __result;
williamr@2
   133
}
williamr@2
   134
williamr@2
   135
template <class _CharT, class _Traits>
williamr@4
   136
_STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::int_type
williamr@4
   137
basic_streambuf<_CharT, _Traits>::_M_snextc_aux()
williamr@2
   138
{
williamr@2
   139
  int_type __eof = _Traits::eof();
williamr@2
   140
  if (_M_gend == _M_gnext)
williamr@2
   141
    return _Traits::eq_int_type(this->uflow(), __eof) ? __eof : this->sgetc();
williamr@2
   142
  else {
williamr@2
   143
    _M_gnext = _M_gend;
williamr@2
   144
    return this->underflow();
williamr@2
   145
  }
williamr@2
   146
}
williamr@2
   147
williamr@2
   148
template <class _CharT, class _Traits>
williamr@4
   149
_STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::int_type
williamr@4
   150
basic_streambuf<_CharT, _Traits>::pbackfail(int_type) {
williamr@4
   151
 return _Traits::eof();
williamr@2
   152
}
williamr@2
   153
williamr@2
   154
template <class _CharT, class _Traits>
williamr@4
   155
_STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::int_type
williamr@4
   156
basic_streambuf<_CharT, _Traits>::overflow(int_type) {
williamr@4
   157
  return _Traits::eof();
williamr@2
   158
}
williamr@2
   159
williamr@2
   160
template <class _CharT, class _Traits>
williamr@4
   161
_STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::int_type
williamr@2
   162
basic_streambuf<_CharT, _Traits>::uflow() {
williamr@2
   163
    return ( _Traits::eq_int_type(this->underflow(),_Traits::eof()) ?
williamr@2
   164
             _Traits::eof() :
williamr@2
   165
             _Traits::to_int_type(*_M_gnext++));
williamr@2
   166
}
williamr@2
   167
williamr@2
   168
template <class _CharT, class _Traits>
williamr@4
   169
_STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::int_type
williamr@2
   170
basic_streambuf<_CharT, _Traits>::underflow()
williamr@2
   171
{ return _Traits::eof(); }
williamr@2
   172
williamr@2
   173
template <class _CharT, class _Traits>
williamr@4
   174
streamsize
williamr@2
   175
basic_streambuf<_CharT, _Traits>::showmanyc()
williamr@2
   176
{ return 0; }
williamr@2
   177
williamr@2
   178
template <class _CharT, class _Traits>
williamr@4
   179
void
williamr@2
   180
basic_streambuf<_CharT, _Traits>::imbue(const locale&) {}
williamr@2
   181
williamr@2
   182
template <class _CharT, class _Traits>
williamr@4
   183
int
williamr@2
   184
basic_streambuf<_CharT, _Traits>::sync() { return 0; }
williamr@2
   185
williamr@2
   186
template <class _CharT, class _Traits>
williamr@4
   187
_STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::pos_type
williamr@2
   188
basic_streambuf<_CharT, _Traits>::seekpos(pos_type, ios_base::openmode)
williamr@2
   189
{ return pos_type(-1); }
williamr@2
   190
williamr@2
   191
template <class _CharT, class _Traits>
williamr@4
   192
_STLP_TYPENAME_ON_RETURN_TYPE basic_streambuf<_CharT, _Traits>::pos_type
williamr@2
   193
basic_streambuf<_CharT, _Traits>::seekoff(off_type, ios_base::seekdir,
williamr@4
   194
                                          ios_base::openmode)
williamr@2
   195
{ return pos_type(-1); }
williamr@2
   196
williamr@2
   197
template <class _CharT, class _Traits>
williamr@4
   198
basic_streambuf<_CharT, _Traits>*
williamr@2
   199
basic_streambuf<_CharT, _Traits>:: setbuf(char_type*, streamsize)
williamr@2
   200
{ return this; }
williamr@2
   201
williamr@2
   202
_STLP_END_NAMESPACE
williamr@2
   203
williamr@4
   204
#endif
williamr@2
   205
williamr@4
   206
// Local Variables:
williamr@4
   207
// mode:C++
williamr@4
   208
// End: