2 * Portions Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
5 * Silicon Graphics Computer Systems, Inc.
10 * This material is provided "as is", with absolutely no warranty expressed
11 * or implied. Any use is at your own risk.
13 * Permission to use or copy this software for any purpose is hereby granted
14 * without fee, provided the above notices are retained on all copies.
15 * Permission to modify the code and to distribute modified code is granted,
16 * provided the above notices are retained, and a notice that the code was
17 * modified is included with the above copyright notice.
23 #ifndef _STLP_INTERNAL_IOS_H
24 # include <stl/_ios.h>
27 #ifndef _STLP_INTERNAL_STREAMBUF
28 # include <stl/_streambuf.h>
31 #ifndef _STLP_INTERNAL_NUMPUNCT_H
32 # include <stl/_numpunct.h>
37 // basic_ios<>'s non-inline member functions
39 // Public constructor, taking a streambuf.
40 template <class _CharT, class _Traits>
41 basic_ios<_CharT, _Traits>
42 ::basic_ios(basic_streambuf<_CharT, _Traits>* __streambuf)
44 _M_fill(_STLP_NULL_CHAR_INIT(_CharT)), _M_streambuf(0), _M_tied_ostream(0) {
45 basic_ios<_CharT, _Traits>::init(__streambuf);
48 template <class _CharT, class _Traits>
49 basic_streambuf<_CharT, _Traits>*
50 basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __buf) {
51 basic_streambuf<_CharT, _Traits>* __tmp = _M_streambuf;
57 template <class _CharT, class _Traits>
58 basic_ios<_CharT, _Traits>&
59 basic_ios<_CharT, _Traits>::copyfmt(const basic_ios<_CharT, _Traits>& __x) {
60 _M_invoke_callbacks(erase_event);
61 _M_copy_state(__x); // Inherited from ios_base.
62 _M_fill = __x._M_fill;
63 _M_tied_ostream = __x._M_tied_ostream;
64 _M_invoke_callbacks(copyfmt_event);
65 this->_M_set_exception_mask(__x.exceptions());
68 #if defined(__SYMBIAN32__WSD__) || defined (__SYMBIAN32__NO_STATIC_IMPORTS__)
69 #define id GetFacetLocaleId()
72 template <class _CharT, class _Traits>
73 locale basic_ios<_CharT, _Traits>::imbue(const locale& __loc) {
74 locale __tmp = ios_base::imbue(__loc);
77 _M_streambuf->pubimbue(__loc);
80 this->_M_cached_ctype = __loc._M_get_facet(ctype<char_type>::id);
81 this->_M_cached_numpunct = __loc._M_get_facet(numpunct<char_type>::id);
82 this->_M_cached_grouping = ((numpunct<char_type>*)_M_cached_numpunct)->grouping();
85 __tmp = ios_base::imbue(__tmp);
86 _M_handle_exception(ios_base::failbit);
90 #if defined(__SYMBIAN32__WSD__) || defined (__SYMBIAN32__NO_STATIC_IMPORTS__)
95 // Protected constructor and initialization functions. The default
96 // constructor creates an uninitialized basic_ios, and init() initializes
97 // all of the members to the values in Table 89 of the C++ standard.
99 template <class _CharT, class _Traits>
100 basic_ios<_CharT, _Traits>::basic_ios()
102 _M_fill(_STLP_NULL_CHAR_INIT(_CharT)), _M_streambuf(0), _M_tied_ostream(0)
105 template <class _CharT, class _Traits>
107 basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb)
110 this->imbue(locale());
112 this->_M_set_exception_mask(ios_base::goodbit);
114 this->_M_clear_nothrow(__sb != 0 ? ios_base::goodbit : ios_base::badbit);
116 The ternary expression above, throws an undefined reference link error (for goodbit and badbit)
117 when compiled with GCCE 4.3.2. Replacing ternary statement with an if-else block fixes this.
120 this->_M_clear_nothrow(ios_base::goodbit);
122 this->_M_clear_nothrow(ios_base::badbit);
124 ios_base::flags(ios_base::skipws | ios_base::dec);
126 ios_base::precision(6);
127 this->fill(widen(' '));
128 // We don't need to worry about any of the three arrays: they are
129 // initialized correctly in ios_base's constructor.
132 // This is never called except from within a catch clause.
133 template <class _CharT, class _Traits>
134 void basic_ios<_CharT, _Traits>::_M_handle_exception(ios_base::iostate __flag)
136 this->_M_setstate_nothrow(__flag);
137 if (this->_M_get_exception_mask() & __flag)
143 #endif /* _STLP_IOS_C */