1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===-------------------------- ios.cpp -----------------------------------===// 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 107112dae6acac544a0271a85d95342c583441e2d1Dan Albert#include "__config" 11938c6a083bce2e362949600bab3d6885eff663e0Dan Albert 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "ios" 13f608ad69d7f05ea357afaeded64419c3b615ff15Dan Albert 14f608ad69d7f05ea357afaeded64419c3b615ff15Dan Albert#include <stdlib.h> 15f608ad69d7f05ea357afaeded64419c3b615ff15Dan Albert 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "__locale" 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "algorithm" 18f608ad69d7f05ea357afaeded64419c3b615ff15Dan Albert#include "config_elast.h" 19f608ad69d7f05ea357afaeded64419c3b615ff15Dan Albert#include "istream" 20f608ad69d7f05ea357afaeded64419c3b615ff15Dan Albert#include "limits" 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "memory" 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "new" 23f608ad69d7f05ea357afaeded64419c3b615ff15Dan Albert#include "streambuf" 24f608ad69d7f05ea357afaeded64419c3b615ff15Dan Albert#include "string" 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant_LIBCPP_BEGIN_NAMESPACE_STD 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate class basic_ios<char>; 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate class basic_ios<wchar_t>; 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate class basic_streambuf<char>; 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate class basic_streambuf<wchar_t>; 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate class basic_istream<char>; 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate class basic_istream<wchar_t>; 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate class basic_ostream<char>; 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate class basic_ostream<wchar_t>; 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate class basic_iostream<char>; 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantclass _LIBCPP_HIDDEN __iostream_category 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public __do_message 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 461e15fd1856a34a4bc0f7c1d649d2e22df9033326Howard Hinnant virtual const char* name() const _NOEXCEPT; 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string message(int ev) const; 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst char* 511e15fd1856a34a4bc0f7c1d649d2e22df9033326Howard Hinnant__iostream_category::name() const _NOEXCEPT 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return "iostream"; 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstring 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant__iostream_category::message(int ev) const 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 59adff4895b2746f30b271bc219713e7ded5ae9677Howard Hinnant if (ev != static_cast<int>(io_errc::stream) 607112dae6acac544a0271a85d95342c583441e2d1Dan Albert#ifdef _LIBCPP_ELAST 617112dae6acac544a0271a85d95342c583441e2d1Dan Albert && ev <= _LIBCPP_ELAST 627112dae6acac544a0271a85d95342c583441e2d1Dan Albert#endif // _LIBCPP_ELAST 63adff4895b2746f30b271bc219713e7ded5ae9677Howard Hinnant ) 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __do_message::message(ev); 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return string("unspecified iostream_category error"); 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst error_category& 6961a8422ffa89b7a1788dc9f51407b950ea3b8d0cMarshall Clowiostream_category() _NOEXCEPT 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static __iostream_category s; 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return s; 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// ios_base::failure 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::failure::failure(const string& msg, const error_code& ec) 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : system_error(ec, msg) 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::failure::failure(const char* msg, const error_code& ec) 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : system_error(ec, msg) 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::failure::~failure() throw() 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// ios_base locale 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::boolalpha; 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::dec; 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::fixed; 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::hex; 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::internal; 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::left; 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::oct; 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::right; 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::scientific; 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::showbase; 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::showpoint; 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::showpos; 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::skipws; 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::unitbuf; 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::uppercase; 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::adjustfield; 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::basefield; 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::fmtflags ios_base::floatfield; 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::iostate ios_base::badbit; 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::iostate ios_base::eofbit; 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::iostate ios_base::failbit; 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::iostate ios_base::goodbit; 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::openmode ios_base::app; 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::openmode ios_base::ate; 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::openmode ios_base::binary; 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::openmode ios_base::in; 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::openmode ios_base::out; 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst ios_base::openmode ios_base::trunc; 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::__call_callbacks(event ev) 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (size_t i = __event_size_; i;) 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant --i; 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __fn_[i](ev, *this, __index_[i]); 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// locale 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlocale 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::imbue(const locale& newloc) 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static_assert(sizeof(locale) == sizeof(__loc_), ""); 1404c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger locale& loc_storage = *reinterpret_cast<locale*>(&__loc_); 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale oldloc = loc_storage; 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant loc_storage = newloc; 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __call_callbacks(imbue_event); 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return oldloc; 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlocale 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::getloc() const 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1504c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger const locale& loc_storage = *reinterpret_cast<const locale*>(&__loc_); 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return loc_storage; 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// xalloc 1557112dae6acac544a0271a85d95342c583441e2d1Dan Albert#if __has_feature(cxx_atomic) && !defined(_LIBCPP_HAS_NO_THREADS) 156206ce1faaf35284f829bbfcdd28421098509e17eMarshall Clowatomic<int> ios_base::__xindex_ = ATOMIC_VAR_INIT(0); 157206ce1faaf35284f829bbfcdd28421098509e17eMarshall Clow#else 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint ios_base::__xindex_ = 0; 159206ce1faaf35284f829bbfcdd28421098509e17eMarshall Clow#endif 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1617112dae6acac544a0271a85d95342c583441e2d1Dan Alberttemplate <typename _Tp> 1627112dae6acac544a0271a85d95342c583441e2d1Dan Albertstatic size_t __ios_new_cap(size_t __req_size, size_t __current_cap) 1637112dae6acac544a0271a85d95342c583441e2d1Dan Albert{ // Precondition: __req_size > __current_cap 1647112dae6acac544a0271a85d95342c583441e2d1Dan Albert const size_t mx = std::numeric_limits<size_t>::max() / sizeof(_Tp); 1657112dae6acac544a0271a85d95342c583441e2d1Dan Albert if (__req_size < mx/2) 1667112dae6acac544a0271a85d95342c583441e2d1Dan Albert return _VSTD::max(2 * __current_cap, __req_size); 1677112dae6acac544a0271a85d95342c583441e2d1Dan Albert else 1687112dae6acac544a0271a85d95342c583441e2d1Dan Albert return mx; 1697112dae6acac544a0271a85d95342c583441e2d1Dan Albert} 1707112dae6acac544a0271a85d95342c583441e2d1Dan Albert 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::xalloc() 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __xindex_++; 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlong& 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::iword(int index) 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant size_t req_size = static_cast<size_t>(index)+1; 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (req_size > __iarray_cap_) 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1837112dae6acac544a0271a85d95342c583441e2d1Dan Albert size_t newcap = __ios_new_cap<long>(req_size, __iarray_cap_); 1847112dae6acac544a0271a85d95342c583441e2d1Dan Albert long* iarray = static_cast<long*>(realloc(__iarray_, newcap * sizeof(long))); 185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (iarray == 0) 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant setstate(badbit); 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static long error; 189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant error = 0; 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return error; 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __iarray_ = iarray; 1937112dae6acac544a0271a85d95342c583441e2d1Dan Albert for (long* p = __iarray_ + __iarray_size_; p < __iarray_ + newcap; ++p) 194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *p = 0; 1957112dae6acac544a0271a85d95342c583441e2d1Dan Albert __iarray_cap_ = newcap; 196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __iarray_size_ = max<size_t>(__iarray_size_, req_size); 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __iarray_[index]; 199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid*& 202bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::pword(int index) 203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant size_t req_size = static_cast<size_t>(index)+1; 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (req_size > __parray_cap_) 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 2077112dae6acac544a0271a85d95342c583441e2d1Dan Albert size_t newcap = __ios_new_cap<void *>(req_size, __iarray_cap_); 2087112dae6acac544a0271a85d95342c583441e2d1Dan Albert void** parray = static_cast<void**>(realloc(__parray_, newcap * sizeof(void *))); 209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (parray == 0) 210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant setstate(badbit); 212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static void* error; 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant error = 0; 214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return error; 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __parray_ = parray; 2177112dae6acac544a0271a85d95342c583441e2d1Dan Albert for (void** p = __parray_ + __parray_size_; p < __parray_ + newcap; ++p) 218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *p = 0; 2197112dae6acac544a0271a85d95342c583441e2d1Dan Albert __parray_cap_ = newcap; 220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __parray_size_ = max<size_t>(__parray_size_, req_size); 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __parray_[index]; 223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// register_callback 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::register_callback(event_callback fn, int index) 229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant size_t req_size = __event_size_ + 1; 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (req_size > __event_cap_) 232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 2337112dae6acac544a0271a85d95342c583441e2d1Dan Albert size_t newcap = __ios_new_cap<event_callback>(req_size, __event_cap_); 2347112dae6acac544a0271a85d95342c583441e2d1Dan Albert event_callback* fns = static_cast<event_callback*>(realloc(__fn_, newcap * sizeof(event_callback))); 235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (fns == 0) 236bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant setstate(badbit); 237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __fn_ = fns; 2387112dae6acac544a0271a85d95342c583441e2d1Dan Albert int* indxs = static_cast<int *>(realloc(__index_, newcap * sizeof(int))); 239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (indxs == 0) 240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant setstate(badbit); 241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __index_ = indxs; 2427112dae6acac544a0271a85d95342c583441e2d1Dan Albert __event_cap_ = newcap; 243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __fn_[__event_size_] = fn; 245bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __index_[__event_size_] = index; 246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ++__event_size_; 247bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::~ios_base() 250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 251bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __call_callbacks(erase_event); 2524c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger locale& loc_storage = *reinterpret_cast<locale*>(&__loc_); 253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant loc_storage.~locale(); 254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant free(__fn_); 255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant free(__index_); 256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant free(__iarray_); 257bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant free(__parray_); 258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 259bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// iostate 261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 262bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::clear(iostate state) 264bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 265bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__rdbuf_) 266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __rdstate_ = state; 267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant else 268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __rdstate_ = state | badbit; 269d444470d6cd1cad554139c4ba7f3c4f3fe921a5dHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (((state | (__rdbuf_ ? goodbit : badbit)) & __exceptions_) != 0) 271bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant throw failure("ios_base::clear"); 27216e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// init 276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::init(void* sb) 279bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __rdbuf_ = sb; 281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __rdstate_ = __rdbuf_ ? goodbit : badbit; 282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __exceptions_ = goodbit; 283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __fmtflags_ = skipws | dec; 284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __width_ = 0; 285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __precision_ = 6; 286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __fn_ = 0; 287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __index_ = 0; 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __event_size_ = 0; 289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __event_cap_ = 0; 290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __iarray_ = 0; 291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __iarray_size_ = 0; 292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __iarray_cap_ = 0; 293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __parray_ = 0; 294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __parray_size_ = 0; 295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __parray_cap_ = 0; 296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ::new(&__loc_) locale; 297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::copyfmt(const ios_base& rhs) 301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // If we can't acquire the needed resources, throw bad_alloc (can't set badbit) 30390dc8dd841b975fccfa4a278b9b44065d3644839Dan Albert // Don't alter *this until all needed resources are acquired 304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unique_ptr<event_callback, void (*)(void*)> new_callbacks(0, free); 305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unique_ptr<int, void (*)(void*)> new_ints(0, free); 306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unique_ptr<long, void (*)(void*)> new_longs(0, free); 307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant unique_ptr<void*, void (*)(void*)> new_pointers(0, free); 308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__event_cap_ < rhs.__event_size_) 309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 3104c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger size_t newesize = sizeof(event_callback) * rhs.__event_size_; 3114c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger new_callbacks.reset(static_cast<event_callback*>(malloc(newesize))); 312d444470d6cd1cad554139c4ba7f3c4f3fe921a5dHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (!new_callbacks) 314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant throw bad_alloc(); 31516e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 3164c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger 3174c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger size_t newisize = sizeof(int) * rhs.__event_size_; 3184c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger new_ints.reset(static_cast<int *>(malloc(newisize))); 319d444470d6cd1cad554139c4ba7f3c4f3fe921a5dHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (!new_ints) 321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant throw bad_alloc(); 32216e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__iarray_cap_ < rhs.__iarray_size_) 325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 3264c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger size_t newsize = sizeof(long) * rhs.__iarray_size_; 3274c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger new_longs.reset(static_cast<long*>(malloc(newsize))); 328d444470d6cd1cad554139c4ba7f3c4f3fe921a5dHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 329bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (!new_longs) 330bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant throw bad_alloc(); 33116e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 332bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 333bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__parray_cap_ < rhs.__parray_size_) 334bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 3354c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger size_t newsize = sizeof(void*) * rhs.__parray_size_; 3364c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger new_pointers.reset(static_cast<void**>(malloc(newsize))); 337d444470d6cd1cad554139c4ba7f3c4f3fe921a5dHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 338bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (!new_pointers) 339bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant throw bad_alloc(); 34016e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 341bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 342bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // Got everything we need. Copy everything but __rdstate_, __rdbuf_ and __exceptions_ 343bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __fmtflags_ = rhs.__fmtflags_; 344bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __precision_ = rhs.__precision_; 345bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __width_ = rhs.__width_; 3464c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger locale& lhs_loc = *reinterpret_cast<locale*>(&__loc_); 3474c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger const locale& rhs_loc = *reinterpret_cast<const locale*>(&rhs.__loc_); 348bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant lhs_loc = rhs_loc; 349bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__event_cap_ < rhs.__event_size_) 350bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 351bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant free(__fn_); 352bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __fn_ = new_callbacks.release(); 353bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant free(__index_); 354bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __index_ = new_ints.release(); 355bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __event_cap_ = rhs.__event_size_; 356bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 357bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (__event_size_ = 0; __event_size_ < rhs.__event_size_; ++__event_size_) 358bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 359bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __fn_[__event_size_] = rhs.__fn_[__event_size_]; 360bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __index_[__event_size_] = rhs.__index_[__event_size_]; 361bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 362bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__iarray_cap_ < rhs.__iarray_size_) 363bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 364bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant free(__iarray_); 365bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __iarray_ = new_longs.release(); 366bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __iarray_cap_ = rhs.__iarray_size_; 367bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 368bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (__iarray_size_ = 0; __iarray_size_ < rhs.__iarray_size_; ++__iarray_size_) 369bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __iarray_[__iarray_size_] = rhs.__iarray_[__iarray_size_]; 370bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__parray_cap_ < rhs.__parray_size_) 371bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 372bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant free(__parray_); 373bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __parray_ = new_pointers.release(); 374bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __parray_cap_ = rhs.__parray_size_; 375bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 376bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (__parray_size_ = 0; __parray_size_ < rhs.__parray_size_; ++__parray_size_) 377bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __parray_[__parray_size_] = rhs.__parray_[__parray_size_]; 378bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 379bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 380bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 381bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::move(ios_base& rhs) 382bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 383bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // *this is uninitialized 384bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __fmtflags_ = rhs.__fmtflags_; 385bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __precision_ = rhs.__precision_; 386bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __width_ = rhs.__width_; 387bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __rdstate_ = rhs.__rdstate_; 388bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __exceptions_ = rhs.__exceptions_; 389bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __rdbuf_ = 0; 3904c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger locale& rhs_loc = *reinterpret_cast<locale*>(&rhs.__loc_); 391bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ::new(&__loc_) locale(rhs_loc); 392bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __fn_ = rhs.__fn_; 393bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant rhs.__fn_ = 0; 394bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __index_ = rhs.__index_; 395bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant rhs.__index_ = 0; 396bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __event_size_ = rhs.__event_size_; 397bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant rhs.__event_size_ = 0; 398bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __event_cap_ = rhs.__event_cap_; 399bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant rhs.__event_cap_ = 0; 400bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __iarray_ = rhs.__iarray_; 401bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant rhs.__iarray_ = 0; 402bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __iarray_size_ = rhs.__iarray_size_; 403bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant rhs.__iarray_size_ = 0; 404bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __iarray_cap_ = rhs.__iarray_cap_; 405bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant rhs.__iarray_cap_ = 0; 406bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __parray_ = rhs.__parray_; 407bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant rhs.__parray_ = 0; 408bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __parray_size_ = rhs.__parray_size_; 409bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant rhs.__parray_size_ = 0; 410bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __parray_cap_ = rhs.__parray_cap_; 411bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant rhs.__parray_cap_ = 0; 412bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 413bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 414bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 415f57bd564fd16203c8969aaa29631f3e1bbaa993fHoward Hinnantios_base::swap(ios_base& rhs) _NOEXCEPT 416bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 4170949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__fmtflags_, rhs.__fmtflags_); 4180949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__precision_, rhs.__precision_); 4190949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__width_, rhs.__width_); 4200949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__rdstate_, rhs.__rdstate_); 4210949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__exceptions_, rhs.__exceptions_); 4224c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger locale& lhs_loc = *reinterpret_cast<locale*>(&__loc_); 4234c6acb5ecd7fab26583353261fd52a9f7ba2f1e0Joerg Sonnenberger locale& rhs_loc = *reinterpret_cast<locale*>(&rhs.__loc_); 4240949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(lhs_loc, rhs_loc); 4250949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__fn_, rhs.__fn_); 4260949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__index_, rhs.__index_); 4270949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__event_size_, rhs.__event_size_); 4280949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__event_cap_, rhs.__event_cap_); 4290949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__iarray_, rhs.__iarray_); 4300949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__iarray_size_, rhs.__iarray_size_); 4310949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__iarray_cap_, rhs.__iarray_cap_); 4320949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__parray_, rhs.__parray_); 4330949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__parray_size_, rhs.__parray_size_); 4340949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant _VSTD::swap(__parray_cap_, rhs.__parray_cap_); 435bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 436bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 437bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 438bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::__set_badbit_and_consider_rethrow() 439bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 440bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __rdstate_ |= badbit; 441d444470d6cd1cad554139c4ba7f3c4f3fe921a5dHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 442bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__exceptions_ & badbit) 443bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant throw; 44416e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 445bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 446bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 447bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantvoid 448bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::__set_failbit_and_consider_rethrow() 449bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 450bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __rdstate_ |= failbit; 451d444470d6cd1cad554139c4ba7f3c4f3fe921a5dHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 452bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__exceptions_ & failbit) 453bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant throw; 45416e6e1d72fd6a10fc165eba4ca4ed2fa7c45df78Howard Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 455bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 456bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 457bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 458bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::sync_with_stdio(bool sync) 459bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 460bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static bool previous_state = true; 461bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool r = previous_state; 462bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant previous_state = sync; 463bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return r; 464bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 465bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 466bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant_LIBCPP_END_NAMESPACE_STD 467