19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc. 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ISTREAM 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_ISTREAM 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// this block is included by _ostream.h, we include it here to lower #include level 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_HAS_WCHAR_T) && !defined (_STLP_INTERNAL_CWCHAR) 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_cwchar.h> 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_IOS_H 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_ios.h> // For basic_ios<>. Includes <iosfwd>. 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_OSTREAM_H 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_ostream.h> // Needed as a base class of basic_iostream. 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ISTREAMBUF_ITERATOR_H 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_istreambuf_iterator.h> 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stl/_ctraits_fns.h> // Helper functions that allow char traits 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // to be used as function objects. 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPORT) 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Isentry; 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _No_Skip_WS {}; // Dummy class used by sentry. 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _M_init_skip(basic_istream<_CharT, _Traits>& __istr); 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _M_init_noskip(basic_istream<_CharT, _Traits>& __istr); 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class basic_istream, a class that performs formatted input through 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// a stream buffer. 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// The second template parameter, _Traits, defaults to char_traits<_CharT>. 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// The default is declared in header <iosfwd>, and it isn't declared here 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// because C++ language rules do not allow it to be declared twice. 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass basic_istream : virtual public basic_ios<_CharT, _Traits> { 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_istream<_CharT, _Traits> _Self; 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MSVC) && (_STLP_MSVC >= 1300 && _STLP_MSVC <= 1310) 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //explicitely defined as private to avoid warnings: 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_istream(_Self const&); 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator = (_Self const&); 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Types 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _CharT char_type; 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::int_type int_type; 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::pos_type pos_type; 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::off_type off_type; 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Traits traits_type; 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_ios<_CharT, _Traits> _Basic_ios; 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_ios<_CharT, _Traits>& (_STLP_CALL *__ios_fn)(basic_ios<_CharT, _Traits>&); 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef ios_base& (_STLP_CALL *__ios_base_fn)(ios_base&); 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Self& (_STLP_CALL *__istream_fn)(_Self&); 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Constructor and destructor. 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit basic_istream(basic_streambuf<_CharT, _Traits>* __buf) : 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_ios<_CharT, _Traits>(), _M_gcount(0) { 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->init(__buf); 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~basic_istream() {}; 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Nested sentry class. 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Hooks for manipulators. The arguments are 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // function pointers. 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (__istream_fn __f) { return __f(*this); } 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (__ios_fn __f) { __f(*this); return *this; } 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (__ios_base_fn __f) { __f(*this); return *this; } 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Formatted input of numbers. 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (short& __val); 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (int& __val); 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (unsigned short& __val); 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (unsigned int& __val); 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (long& __val); 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (unsigned long& __val); 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_LONG_LONG 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (_STLP_LONG_LONG& __val); 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (unsigned _STLP_LONG_LONG& __val); 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (float& __val); 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (double& __val); 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef _STLP_NO_LONG_DOUBLE 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (long double& __val); 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef _STLP_NO_BOOL 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (bool& __val); 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>> (void*& __val); 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Copying characters into a streambuf. 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator>>(basic_streambuf<_CharT, _Traits>*); 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Unformatted input. 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block streamsize gcount() const { return _M_gcount; } 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int_type peek(); 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // get() for single characters 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int_type get(); 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& get(char_type& __c); 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // get() for character arrays. 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& get(char_type* __s, streamsize __n, char_type __delim); 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& get(char_type* __s, streamsize __n) 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return get(__s, __n, this->widen('\n')); } 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // get() for streambufs 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& get(basic_streambuf<_CharT, _Traits>& __buf, 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char_type __delim); 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& get(basic_streambuf<_CharT, _Traits>& __buf) 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return get(__buf, this->widen('\n')); } 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // getline() 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& getline(char_type* __s, streamsize __n, char_type delim); 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& getline(char_type* __s, streamsize __n) 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return getline(__s, __n, this->widen('\n')); } 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // read(), readsome(), ignore() 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& ignore(); 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& ignore(streamsize __n); 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& ignore(streamsize __n, int_type __delim); 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& read(char_type* __s, streamsize __n); 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block streamsize readsome(char_type* __s, streamsize __n); 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // putback 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& putback(char_type __c); 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& unget(); 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Positioning and buffer control. 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block int sync(); 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pos_type tellg(); 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& seekg(pos_type __pos); 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& seekg(off_type, ios_base::seekdir); 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Helper functions for non-member extractors. 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_formatted_get(_CharT& __c); 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_formatted_get(_CharT* __s); 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_skip_whitespace(bool __set_failbit); 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: // Number of characters extracted by the 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block streamsize _M_gcount; // most recent unformatted input function. 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPORT) 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // If we are using DLL specs, we have not to use inner classes 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // end class declaration here 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Isentry<_CharT, _Traits> sentry; 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define sentry _Isentry 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Isentry { 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Isentry<_CharT, _Traits> _Self; 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block class sentry { 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef sentry _Self; 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block private: 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const bool _M_ok; 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // basic_streambuf<_CharT, _Traits>* _M_buf; 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block public: 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Traits traits_type; 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit sentry(basic_istream<_CharT, _Traits>& __istr, 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __noskipws = false) : 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_ok((__noskipws || !(__istr.flags() & ios_base::skipws)) ? _M_init_noskip(__istr) : _M_init_skip(__istr) ) 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block /* , _M_buf(__istr.rdbuf()) */ 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {} 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Calling this constructor is the same as calling the previous one with 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // __noskipws = true, except that it doesn't require a runtime test. 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block sentry(basic_istream<_CharT, _Traits>& __istr, _No_Skip_WS) : /* _M_buf(__istr.rdbuf()), */ 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_ok(_M_init_noskip(__istr)) {} 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~sentry() {} 2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block operator bool() const { return _M_ok; } 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block private: // Disable assignment and copy constructor. 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //Implementation is here only to avoid warning with some compilers. 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block sentry(const _Self&) : _M_ok(false) {} 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(const _Self&) { return *this; } 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block }; 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_USE_TEMPLATE_EXPORT) 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# undef sentry 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // close basic_istream class definition here 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_USE_TEMPLATE_EXPORT) 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS _Isentry<char, char_traits<char> >; 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_istream<char, char_traits<char> >; 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if ! defined (_STLP_NO_WCHAR_T) 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS _Isentry<wchar_t, char_traits<wchar_t> >; 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_istream<wchar_t, char_traits<wchar_t> >; 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif /* _STLP_USE_TEMPLATE_EXPORT */ 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Non-member character and string extractor functions. 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_istream<_CharT, _Traits>& _STLP_CALL 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<_CharT, _Traits>& __in_str, _CharT& __c) { 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __in_str._M_formatted_get(__c); 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __in_str; 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Traits> 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_istream<char, _Traits>& _STLP_CALL 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<char, _Traits>& __in_str, unsigned char& __c) { 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __in_str._M_formatted_get(__REINTERPRET_CAST(char&,__c)); 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __in_str; 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Traits> 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_istream<char, _Traits>& _STLP_CALL 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<char, _Traits>& __in_str, signed char& __c) { 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __in_str._M_formatted_get(__REINTERPRET_CAST(char&,__c)); 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __in_str; 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_istream<_CharT, _Traits>& _STLP_CALL 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<_CharT, _Traits>& __in_str, _CharT* __s) { 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __in_str._M_formatted_get(__s); 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __in_str; 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Traits> 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_istream<char, _Traits>& _STLP_CALL 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<char, _Traits>& __in_str, unsigned char* __s) { 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __in_str._M_formatted_get(__REINTERPRET_CAST(char*,__s)); 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __in_str; 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Traits> 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline basic_istream<char, _Traits>& _STLP_CALL 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>>(basic_istream<char, _Traits>& __in_str, signed char* __s) { 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __in_str._M_formatted_get(__REINTERPRET_CAST(char*,__s)); 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __in_str; 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// istream manipulator. 2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_istream<_CharT, _Traits>& _STLP_CALL 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockws(basic_istream<_CharT, _Traits>& __istr) { 2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!__istr.eof()) { 2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename basic_istream<_CharT, _Traits>::sentry _Sentry; 2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Sentry __sentry(__istr, _No_Skip_WS()); // Don't skip whitespace. 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__sentry) 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __istr._M_skip_whitespace(false); 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __istr; 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Helper functions for istream<>::sentry constructor. 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _M_init_skip(basic_istream<_CharT, _Traits>& __istr) { 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__istr.good()) { 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__istr.tie()) 2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __istr.tie()->flush(); 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __istr._M_skip_whitespace(true); 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!__istr.good()) { 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __istr.setstate(ios_base::failbit); 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return false; 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } else 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return true; 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _M_init_noskip(basic_istream<_CharT, _Traits>& __istr) { 3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__istr.good()) { 3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__istr.tie()) 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __istr.tie()->flush(); 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!__istr.rdbuf()) 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __istr.setstate(ios_base::badbit); 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __istr.setstate(ios_base::failbit); 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __istr.good(); 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//---------------------------------------------------------------------- 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class iostream. 3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass basic_iostream 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : public basic_istream<_CharT, _Traits>, 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block public basic_ostream<_CharT, _Traits> 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ 3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_ios<_CharT, _Traits> _Basic_ios; 3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit basic_iostream(basic_streambuf<_CharT, _Traits>* __buf); 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block virtual ~basic_iostream(); 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_USE_TEMPLATE_EXPORT) 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_iostream<char, char_traits<char> >; 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if ! defined (_STLP_NO_WCHAR_T) 3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_iostream<wchar_t, char_traits<wchar_t> >; 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif /* _STLP_USE_TEMPLATE_EXPORT */ 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_streambuf<_CharT, _Traits>* _STLP_CALL _M_get_istreambuf(basic_istream<_CharT, _Traits>& __istr) 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __istr.rdbuf(); } 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION) && !defined (_STLP_LINK_TIME_INSTANTIATION) 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_istream.c> 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_INTERNAL_ISTREAM */ 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 360