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