first commit
This commit is contained in:
625
extern/stdcxx/4.2.1/include/istream
vendored
Normal file
625
extern/stdcxx/4.2.1/include/istream
vendored
Normal file
@@ -0,0 +1,625 @@
|
||||
// -*- C++ -*-
|
||||
/***************************************************************************
|
||||
*
|
||||
* istream - Declarations for the Standard Library istreams
|
||||
*
|
||||
* $Id: istream 638384 2008-03-18 14:27:54Z faridz $
|
||||
*
|
||||
***************************************************************************
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed
|
||||
* with this work for additional information regarding copyright
|
||||
* ownership. The ASF licenses this file to you under the Apache
|
||||
* License, Version 2.0 (the "License"); you may not use this file
|
||||
* except in compliance with the License. You may obtain a copy of
|
||||
* the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
* implied. See the License for the specific language governing
|
||||
* permissions and limitations under the License.
|
||||
*
|
||||
* Copyright 1994-2006 Rogue Wave Software.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
#ifndef _RWSTD_ISTREAM_INCLUDED
|
||||
#define _RWSTD_ISTREAM_INCLUDED
|
||||
|
||||
#if __GNUG__ >= 3
|
||||
# pragma GCC system_header
|
||||
#endif // gcc >= 3
|
||||
|
||||
#ifndef _RWSTD_NO_REDUNDANT_DEFINITIONS
|
||||
# include <ostream>
|
||||
#endif // _RWSTD_NO_REDUNDANT_DEFINITIONS
|
||||
|
||||
#include <loc/_num_get.h>
|
||||
#include <loc/_num_put.h>
|
||||
|
||||
#include <rw/_basic_ios.h>
|
||||
#include <rw/_mutex.h>
|
||||
#include <rw/_traits.h>
|
||||
|
||||
#include <rw/_defs.h>
|
||||
|
||||
|
||||
_RWSTD_NAMESPACE (__rw) {
|
||||
|
||||
_EXPORT
|
||||
template <class _CharT, class _Traits, class _NativeType>
|
||||
_STD::basic_istream<_CharT, _Traits>&
|
||||
__rw_extract (_STD::basic_istream<_CharT, _Traits>&, _NativeType&);
|
||||
|
||||
|
||||
#ifdef _RWSTD_NO_EXT_NUM_GET
|
||||
|
||||
template <class _CharT, class _Traits>
|
||||
inline _STD::basic_istream<_CharT, _Traits>&
|
||||
__rw_extract (_STD::basic_istream<_CharT, _Traits> &__strm,
|
||||
short &__val)
|
||||
{
|
||||
long __tmp = __val;
|
||||
__rw_extract (__strm, __tmp);
|
||||
|
||||
_STD::ios_base::iostate __err = _STD::ios_base::goodbit;
|
||||
__val = __rw_check_overflow_short (__tmp, __strm.flags (), __err);
|
||||
|
||||
if (_STD::ios_base::goodbit != __err)
|
||||
__strm.setstate (__err);
|
||||
|
||||
return __strm;
|
||||
}
|
||||
|
||||
template <class _CharT, class _Traits>
|
||||
inline _STD::basic_istream<_CharT, _Traits>&
|
||||
__rw_extract (_STD::basic_istream<_CharT, _Traits> &__strm,
|
||||
int &__val)
|
||||
{
|
||||
long __tmp = __val;
|
||||
__rw_extract (__strm, __tmp);
|
||||
|
||||
_STD::ios_base::iostate __err = _STD::ios_base::goodbit;
|
||||
__val = __rw_check_overflow_int (__tmp, __strm.flags (), __err);
|
||||
|
||||
if (_STD::ios_base::goodbit != __err)
|
||||
__strm.setstate (__err);
|
||||
|
||||
return __strm;
|
||||
}
|
||||
|
||||
#endif // _RWSTD_NO_EXT_NUM_GET
|
||||
|
||||
} // namespace __rw
|
||||
|
||||
|
||||
_RWSTD_NAMESPACE (std) {
|
||||
|
||||
#ifndef _RWSTD_IOSFWD_INCLUDED
|
||||
|
||||
_EXPORT
|
||||
template <class _CharT, class _Traits = char_traits<_CharT> >
|
||||
class basic_istream;
|
||||
|
||||
_EXPORT
|
||||
template <class _CharT, class _Traits = char_traits<_CharT> >
|
||||
class basic_iostream;
|
||||
|
||||
typedef basic_istream<char> istream;
|
||||
typedef basic_iostream<char> iostream;
|
||||
|
||||
# ifndef _RWSTD_NO_WCHAR_T
|
||||
|
||||
typedef basic_istream<wchar_t> wistream;
|
||||
typedef basic_iostream<wchar_t> wiostream;
|
||||
|
||||
# endif // _RWSTD_NO_WCHAR_T
|
||||
#endif // _RWSTD_IOSFWD_INCLUDED
|
||||
|
||||
|
||||
_EXPORT
|
||||
template <class _CharT, class _Traits>
|
||||
class basic_istream: virtual public basic_ios<_CharT, _Traits>
|
||||
{
|
||||
public:
|
||||
|
||||
typedef _CharT char_type;
|
||||
typedef _Traits traits_type;
|
||||
typedef _TYPENAME traits_type::int_type int_type;
|
||||
typedef _TYPENAME traits_type::pos_type pos_type;
|
||||
typedef _TYPENAME traits_type::off_type off_type;
|
||||
|
||||
// 27.6.1.1.1, p1
|
||||
_EXPLICIT basic_istream (basic_streambuf<char_type, traits_type> *__sb)
|
||||
: _C_gcount (0) {
|
||||
this->init (__sb);
|
||||
}
|
||||
|
||||
// called from sentry's ctor to prepare stream before input
|
||||
basic_istream&
|
||||
_C_ipfx (bool, ios_base::iostate = ios_base::eofbit | ios_base::failbit);
|
||||
|
||||
#ifdef _RWSTD_NO_NESTED_CLASS_ACCESS
|
||||
|
||||
// allow access to ios_base::_C_bufmutex() if the resolution
|
||||
// of cwg issue 45 is not yet implemented
|
||||
struct sentry;
|
||||
friend struct sentry;
|
||||
|
||||
#endif // _RWSTD_NO_NESTED_CLASS_ACCESS
|
||||
|
||||
// 27.6.1.1.2
|
||||
struct sentry: _RW::__rw_guard {
|
||||
|
||||
// 27.6.1.1.2, p2 - assumes 0 != __strm.rdbuf ()
|
||||
_EXPLICIT sentry (basic_istream &__strm, bool __noskipws = false)
|
||||
: _RW::__rw_guard (__strm._C_bufmutex ()),
|
||||
_C_ok (__strm._C_ipfx (__noskipws).good ()) { /* no-op */ }
|
||||
|
||||
// 27.6.1.1.2, p8
|
||||
operator bool () const {
|
||||
return _C_ok;
|
||||
}
|
||||
|
||||
private:
|
||||
bool _C_ok;
|
||||
|
||||
sentry (const sentry&); // (normally) not defined
|
||||
void operator= (const sentry&); // (normally) not defined
|
||||
};
|
||||
|
||||
// 27.6.1.2.3, p1, lwg issue 60
|
||||
basic_istream& operator>> (basic_istream& (*__pf)(basic_istream&)) {
|
||||
return (*__pf)(*this);
|
||||
}
|
||||
|
||||
// 27.6.1.2.3, p2, lwg issue 60
|
||||
basic_istream& operator>>(basic_ios<char_type, traits_type>& (*__pf)
|
||||
(basic_ios<char_type, traits_type>&)) {
|
||||
return (*__pf)(*this), *this;
|
||||
}
|
||||
|
||||
// 27.6.1.2.3, p4, lwg issue 60
|
||||
basic_istream& operator>> (ios_base& (*__pf)(ios_base&)) {
|
||||
return (*__pf)(*this), *this;
|
||||
}
|
||||
|
||||
|
||||
// 27.6.1.2.2 - Arithmetic Extractors
|
||||
|
||||
#ifndef _RWSTD_NO_NATIVE_BOOL
|
||||
|
||||
basic_istream& operator>> (bool &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
#endif // _RWSTD_NO_NATIVE_BOOL
|
||||
|
||||
basic_istream& operator>>(short &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
basic_istream& operator>>(unsigned short &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
basic_istream& operator>>(int &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
basic_istream& operator>>(unsigned int &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
basic_istream& operator>>(long &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
basic_istream& operator>>(unsigned long &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
basic_istream& operator>>(float &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
basic_istream& operator>>(double &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
basic_istream& operator>>(long double &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
#ifdef _RWSTD_LONG_LONG
|
||||
|
||||
basic_istream& operator>>(_RWSTD_LONG_LONG &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
basic_istream& operator>>(unsigned _RWSTD_LONG_LONG &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
#endif // _RWSTD_LONG_LONG
|
||||
|
||||
basic_istream& operator>>(void* &__val) {
|
||||
return _RW::__rw_extract (*this, __val);
|
||||
}
|
||||
|
||||
// 27.6.1.2.3, p13
|
||||
basic_istream& operator>>(basic_streambuf<char_type, traits_type>*);
|
||||
|
||||
// 27.6.1.3 - Unformatted input functions
|
||||
|
||||
// 27.6.1.3, p3
|
||||
int_type get ();
|
||||
|
||||
// 27.6.1.3, p5
|
||||
basic_istream& get (char_type&);
|
||||
|
||||
// 27.6.1.3, p7: extract at most n - 1 chars, delim not extracted
|
||||
// always null-terminate, fail if no char extracted
|
||||
basic_istream& get (char_type*, streamsize, char_type);
|
||||
|
||||
// 27.6.1.3, p9: extract at most n - 1 chars
|
||||
// always null-terminate, fail if no char extracted
|
||||
basic_istream& get (char_type *__s, streamsize __n) {
|
||||
return get (__s, __n, this->widen ('\n'));
|
||||
}
|
||||
|
||||
// 27.6.1.3, p12: extract up to but not including delim or eof
|
||||
basic_istream&
|
||||
get (basic_streambuf<char_type, traits_type>& __sb, char_type __delim) {
|
||||
return _C_get (__sb, traits_type::to_int_type (__delim));
|
||||
}
|
||||
|
||||
// 27.6.1.3, p15
|
||||
basic_istream& get (basic_streambuf<char_type, traits_type>& __sb) {
|
||||
return get (__sb, this->widen ('\n'));
|
||||
}
|
||||
|
||||
// 27.6.1.3, p16: extract at most n - 1, delim extracted but not stored
|
||||
// fail if either 0 or n - 1 chars have been extracted
|
||||
basic_istream& getline (char_type*, streamsize, char_type);
|
||||
|
||||
// 27.6.1.3, p23
|
||||
basic_istream& getline (char_type *__s, streamsize __n) {
|
||||
return getline (__s, __n, this->widen ('\n'));
|
||||
}
|
||||
|
||||
// 27.6.1.3, p24: extract at most n including delim
|
||||
basic_istream& ignore (streamsize __n = 1,
|
||||
int_type __delim = traits_type::eof ()) {
|
||||
// using extension - passing null pointer to ignore input
|
||||
return read (0, __n, __delim, _C_eatdelim | _C_eatnull);
|
||||
}
|
||||
|
||||
// extension
|
||||
basic_istream& read (char_type*, streamsize, int_type, int);
|
||||
|
||||
// 27.6.1.3, p28: extract at most n, fail on eof
|
||||
basic_istream& read (char_type*, streamsize);
|
||||
|
||||
// 27.6.1.3, p30: extract at most min (rdbuf()->in_avail(), n))
|
||||
streamsize readsome (char_type*, streamsize);
|
||||
|
||||
// 27.6.1.3, p27
|
||||
int_type peek ();
|
||||
|
||||
// 27.6.1.3, p37
|
||||
pos_type tellg ();
|
||||
|
||||
// 27.6.1.3, p38
|
||||
basic_istream& seekg (pos_type);
|
||||
|
||||
// 27.6.1.3, p40
|
||||
basic_istream& seekg (off_type, ios_base::seekdir);
|
||||
|
||||
// 27.6.1.3, p36
|
||||
int sync ();
|
||||
|
||||
// 27.6.1.3, p32
|
||||
basic_istream& putback (char_type);
|
||||
|
||||
// 27.6.1.3, p34
|
||||
basic_istream& unget ();
|
||||
|
||||
// 27.6.1.3, p2
|
||||
streamsize gcount () const {
|
||||
return _C_gcount;
|
||||
}
|
||||
|
||||
// flags used by read() extension, _C_ipfx(), and _C_unsafe_get()
|
||||
enum {
|
||||
_C_nullterm = 0x01, // null-terminate input
|
||||
_C_wsterm = 0x02, // terminate input on whitespace
|
||||
_C_skipws = 0x04, // skip leading whitespace
|
||||
_C_eatdelim = 0x08, // extract delimiter
|
||||
_C_faileof = 0x10, // set ios_base::failbit on eof
|
||||
_C_failend = 0x20, // set ios_base::failbit on end of buffer
|
||||
_C_failnoi = 0x40, // set ios_base::failbit on no input
|
||||
_C_eatnull = 0x80 // extract null char
|
||||
};
|
||||
|
||||
// does not construct a sentry, does not affect gcount()
|
||||
// extracts character unless it is equal to __delim
|
||||
int_type _C_unsafe_get (streamsize* = 0,
|
||||
int_type = traits_type::eof (),
|
||||
int = 0);
|
||||
|
||||
private:
|
||||
|
||||
basic_istream& _C_get (basic_streambuf<char_type, traits_type>&, int_type);
|
||||
|
||||
streamsize _C_gcount; // number of chars extracted
|
||||
};
|
||||
|
||||
|
||||
|
||||
template<class _CharT, class _Traits>
|
||||
inline _TYPENAME basic_istream<_CharT, _Traits>::int_type
|
||||
basic_istream<_CharT, _Traits>::
|
||||
get ()
|
||||
{
|
||||
const sentry __ipfx (*this, true /* noskipws */);
|
||||
|
||||
if (__ipfx)
|
||||
return _C_unsafe_get (&_C_gcount, traits_type::eof (),
|
||||
_C_faileof | _C_eatnull);
|
||||
|
||||
return traits_type::eof ();
|
||||
}
|
||||
|
||||
|
||||
template<class _CharT, class _Traits>
|
||||
inline basic_istream<_CharT, _Traits>&
|
||||
basic_istream<_CharT, _Traits>::
|
||||
get (char_type &__ch)
|
||||
{
|
||||
const int_type __c = get ();
|
||||
|
||||
if (!traits_type::eq_int_type (__c, traits_type::eof ()))
|
||||
traits_type::assign (__ch, traits_type::to_char_type (__c));
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template<class _CharT, class _Traits>
|
||||
inline basic_istream<_CharT, _Traits>&
|
||||
basic_istream<_CharT, _Traits>::seekg (pos_type __pos)
|
||||
{
|
||||
_RWSTD_ASSERT (0 != this->rdbuf ());
|
||||
|
||||
if (!this->fail ()) {
|
||||
_RWSTD_MT_GUARD (this->_C_bufmutex ());
|
||||
|
||||
// 27.6.1.3, p 38 requires that pubseekpos be called with
|
||||
// a single argument; the implemented behavior follows
|
||||
// the proposed resolution of lwg issue 136
|
||||
if (-1 == this->rdbuf ()->pubseekpos (__pos, ios_base::in))
|
||||
this->setstate (ios_base::failbit); // lwg issue 129
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template<class _CharT, class _Traits>
|
||||
inline basic_istream<_CharT, _Traits>&
|
||||
basic_istream<_CharT, _Traits>::seekg (off_type __off, ios_base::seekdir __dir)
|
||||
{
|
||||
_RWSTD_ASSERT (0 != this->rdbuf ());
|
||||
|
||||
if (!this->fail ()) {
|
||||
_RWSTD_MT_GUARD (this->_C_bufmutex ());
|
||||
|
||||
// 27.6.1.3, p 40 requires that pubseekoff be called with
|
||||
// two arguments; the implemented behavior follows
|
||||
// the proposed resolution of lwg issue 136
|
||||
if (-1 == this->rdbuf ()->pubseekoff (__off, __dir, ios_base::in))
|
||||
this->setstate (ios_base::failbit); // lwg issue 129
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template<class _CharT, class _Traits>
|
||||
inline basic_istream<_CharT, _Traits>&
|
||||
basic_istream<_CharT, _Traits>::
|
||||
operator>>(basic_streambuf<char_type, traits_type> *__sb)
|
||||
{
|
||||
// lwg issue 60: this is not a formatted input member function
|
||||
if (__sb)
|
||||
return _C_get (*__sb, traits_type::eof ());
|
||||
|
||||
this->setstate (ios_base::failbit);
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template<class _CharT, class _Traits>
|
||||
inline _TYPENAME basic_istream<_CharT, _Traits>::int_type
|
||||
basic_istream<_CharT, _Traits>::peek ()
|
||||
{
|
||||
_RWSTD_ASSERT (0 != this->rdbuf ());
|
||||
|
||||
const sentry __ipfx (*this, true /* noskipws */);
|
||||
|
||||
int_type __c = traits_type::eof ();
|
||||
|
||||
if (__ipfx) {
|
||||
_TRY {
|
||||
__c = this->rdbuf ()->sgetc ();
|
||||
}
|
||||
_CATCH (...) {
|
||||
this->setstate (ios_base::badbit | _RW::__rw_rethrow);
|
||||
}
|
||||
}
|
||||
|
||||
if (traits_type::eq_int_type (__c, traits_type::eof ()))
|
||||
this->setstate (ios_base::eofbit);
|
||||
|
||||
return __c;
|
||||
}
|
||||
|
||||
|
||||
// 27.6.1.2.3, p10
|
||||
template <class _Traits>
|
||||
inline basic_istream<char, _Traits>&
|
||||
operator>> (basic_istream<char, _Traits> &__strm, unsigned char &__c)
|
||||
{
|
||||
return __strm >> _RWSTD_REINTERPRET_CAST (char&, __c);
|
||||
}
|
||||
|
||||
template <class _Traits>
|
||||
inline basic_istream<char, _Traits>&
|
||||
operator>> (basic_istream<char, _Traits> &__strm, signed char &__c)
|
||||
{
|
||||
return __strm >> _RWSTD_REINTERPRET_CAST (char&, __c);
|
||||
}
|
||||
|
||||
|
||||
// 27.6.1.2.3, p6
|
||||
template <class _Traits>
|
||||
inline basic_istream<char, _Traits>&
|
||||
operator>> (basic_istream<char, _Traits> &__strm, unsigned char *__s)
|
||||
{
|
||||
return __strm >> _RWSTD_REINTERPRET_CAST (char*, __s);
|
||||
}
|
||||
|
||||
|
||||
template <class _Traits>
|
||||
inline basic_istream<char, _Traits>&
|
||||
operator>> (basic_istream<char, _Traits> &__strm, signed char *__s)
|
||||
{
|
||||
return __strm >> _RWSTD_REINTERPRET_CAST (char*, __s);
|
||||
}
|
||||
|
||||
|
||||
// 27.6.1.2.3, p10
|
||||
template<class _CharT, class _Traits>
|
||||
inline basic_istream<_CharT, _Traits>&
|
||||
operator>> (basic_istream<_CharT, _Traits> &__strm, _CharT &__c)
|
||||
{
|
||||
// read the first non-space char, set failbit if none read
|
||||
__strm.read (&__c, 1, _Traits::eof (),
|
||||
__strm._C_skipws | __strm._C_failnoi | __strm._C_eatnull);
|
||||
return __strm;
|
||||
}
|
||||
|
||||
|
||||
// 27.6.1.2.3, p6
|
||||
template<class _CharT, class _Traits>
|
||||
inline basic_istream<_CharT, _Traits>&
|
||||
operator>> (basic_istream<_CharT, _Traits> &__strm, _CharT *__s)
|
||||
{
|
||||
_RWSTD_ASSERT (0 != __s);
|
||||
|
||||
// store at most this many chars including terminating null
|
||||
const streamsize __maxlen = __strm.width () ?
|
||||
__strm.width () : streamsize (_RWSTD_LONG_MAX - 1);
|
||||
|
||||
// read at most __maxlen non-space chars up to the first whitespace
|
||||
__strm.read (__s, __maxlen, _Traits::to_int_type (__strm.widen ('\n')),
|
||||
__strm._C_nullterm | __strm._C_wsterm
|
||||
| __strm._C_skipws | __strm._C_failnoi);
|
||||
|
||||
__strm.width (0);
|
||||
|
||||
return __strm;
|
||||
}
|
||||
|
||||
|
||||
// 27.6.1.4, p1
|
||||
template<class _CharT, class _Traits>
|
||||
inline basic_istream<_CharT, _Traits>&
|
||||
ws (basic_istream<_CharT, _Traits> &__strm)
|
||||
{
|
||||
// construct a sentry to flush tied stream (if any) and lock
|
||||
const _TYPENAME basic_istream<_CharT, _Traits>::sentry
|
||||
__ipfx (__strm, true /* noskipws */);
|
||||
|
||||
// if sentry is okay, skip whitespace and set eofbit
|
||||
// but not failbit if end-of-file is encountered
|
||||
if (__ipfx) {
|
||||
_TRY {
|
||||
__strm._C_ipfx (false, ios_base::eofbit);
|
||||
}
|
||||
_CATCH (...) {
|
||||
__strm.setstate (ios_base::badbit | _RW::__rw_rethrow);
|
||||
}
|
||||
}
|
||||
|
||||
return __strm;
|
||||
}
|
||||
|
||||
|
||||
// 27.6.1.5
|
||||
template<class _CharT, class _Traits /* = char_traits<_CharT> */>
|
||||
class basic_iostream
|
||||
: public basic_istream<_CharT, _Traits>,
|
||||
public basic_ostream<_CharT, _Traits>
|
||||
{
|
||||
public:
|
||||
|
||||
// prevent ambiguity between types defined in the bases
|
||||
typedef _CharT char_type;
|
||||
typedef _Traits traits_type;
|
||||
typedef _TYPENAME traits_type::int_type int_type;
|
||||
typedef _TYPENAME traits_type::pos_type pos_type;
|
||||
typedef _TYPENAME traits_type::off_type off_type;
|
||||
|
||||
_EXPLICIT basic_iostream (basic_streambuf<_CharT, _Traits> *__sb)
|
||||
: basic_istream<_CharT, _Traits>(__sb),
|
||||
basic_ostream<_CharT, _Traits>(__sb)
|
||||
{ /* 27.6.1.5.1, p1 */ }
|
||||
};
|
||||
|
||||
} // namespace std
|
||||
|
||||
|
||||
#if _RWSTD_DEFINE_TEMPLATE_FIRST (_BASIC_ISTREAM)
|
||||
// implementation file included here instead of at the end
|
||||
// of the header to work around a IBM VAC++ 7.0 bug #448
|
||||
# include <istream.cc>
|
||||
#endif // _RWSTD_DEFINE_TEMPLATE_FIRST (_BASIC_ISTREAM)
|
||||
|
||||
|
||||
_RWSTD_NAMESPACE (std) {
|
||||
|
||||
#if _RWSTD_INSTANTIATE (_BASIC_ISTREAM, _CHAR)
|
||||
|
||||
_RWSTD_INSTANTIATE_2 (class _RWSTD_TI_EXPORT
|
||||
basic_istream<char, char_traits<char> >);
|
||||
|
||||
#endif // _RWSTD_INSTANTIATE (_BASIC_ISTREAM, _CHAR)
|
||||
|
||||
#if _RWSTD_INSTANTIATE (_BASIC_ISTREAM, _WCHAR_T)
|
||||
|
||||
_RWSTD_INSTANTIATE_2 (class _RWSTD_TI_EXPORT
|
||||
basic_istream<wchar_t, char_traits<wchar_t> >);
|
||||
|
||||
#endif // _RWSTD_INSTANTIATE (_BASIC_ISTREAM, _WCHAR_T)
|
||||
|
||||
} // namespace std
|
||||
|
||||
|
||||
#if _RWSTD_DEFINE_TEMPLATE_LAST (_BASIC_ISTREAM)
|
||||
# include <istream.cc>
|
||||
#endif // _RWSTD_DEFINE_TEMPLATE_LAST (_BASIC_ISTREAM)
|
||||
|
||||
|
||||
#ifndef _RWSTD_STRING_EXTRACTORS_INCLUDED
|
||||
# define _RWSTD_INCLUDE_STRING_EXTRACTORS
|
||||
# include <rw/_stringio.h>
|
||||
#endif // _RWSTD_STRING_EXTRACTORS_INCLUDED
|
||||
|
||||
|
||||
#endif // _RWSTD_ISTREAM_INCLUDED
|
||||
Reference in New Issue
Block a user