iostream.cpp revision cbdd0896d3629a17d11be4078347e085b26099f5
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===------------------------ iostream.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
10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "__std_stream"
11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include "string"
121378397721435d2737ab494908918bfe88882789Howard Hinnant#include "new"
13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant_LIBCPP_BEGIN_NAMESPACE_STD
15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
16cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (__stdinbuf<char> ) static char __cin [sizeof(__stdinbuf <char>)];
17cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (__stdoutbuf<char>) static char __cout[sizeof(__stdoutbuf<char>)];
18cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (__stdoutbuf<char>) static char __cerr[sizeof(__stdoutbuf<char>)];
19cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (__stdinbuf<wchar_t> ) static char __wcin [sizeof(__stdinbuf <wchar_t>)];
20cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (__stdoutbuf<wchar_t>) static char __wcout[sizeof(__stdoutbuf<wchar_t>)];
21cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (__stdoutbuf<wchar_t>) static char __wcerr[sizeof(__stdoutbuf<wchar_t>)];
221378397721435d2737ab494908918bfe88882789Howard Hinnant
23cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (istream) char cin [sizeof(istream)];
24cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (ostream) char cout[sizeof(ostream)];
25cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (ostream) char cerr[sizeof(ostream)];
26cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (ostream) char clog[sizeof(ostream)];
27cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (wistream) char wcin [sizeof(wistream)];
28cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (wostream) char wcout[sizeof(wostream)];
29cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (wostream) char wcerr[sizeof(wostream)];
30cbdd0896d3629a17d11be4078347e085b26099f5Howard Hinnant_ALIGNAS_TYPE (wostream) char wclog[sizeof(wostream)];
31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::Init __start_std_streams;
33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::Init::Init()
35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
361378397721435d2737ab494908918bfe88882789Howard Hinnant    istream* cin_ptr  = ::new(cin)  istream(::new(__cin)  __stdinbuf <char>(stdin) );
371378397721435d2737ab494908918bfe88882789Howard Hinnant    ostream* cout_ptr = ::new(cout) ostream(::new(__cout) __stdoutbuf<char>(stdout));
381378397721435d2737ab494908918bfe88882789Howard Hinnant    ostream* cerr_ptr = ::new(cerr) ostream(::new(__cerr) __stdoutbuf<char>(stderr));
391378397721435d2737ab494908918bfe88882789Howard Hinnant                        ::new(clog) ostream(cerr_ptr->rdbuf());
401378397721435d2737ab494908918bfe88882789Howard Hinnant    cin_ptr->tie(cout_ptr);
411378397721435d2737ab494908918bfe88882789Howard Hinnant    _VSTD::unitbuf(*cerr_ptr);
421378397721435d2737ab494908918bfe88882789Howard Hinnant    cerr_ptr->tie(cout_ptr);
43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
441378397721435d2737ab494908918bfe88882789Howard Hinnant    wistream* wcin_ptr  = ::new(wcin)  wistream(::new(__wcin)  __stdinbuf <wchar_t>(stdin) );
451378397721435d2737ab494908918bfe88882789Howard Hinnant    wostream* wcout_ptr = ::new(wcout) wostream(::new(__wcout) __stdoutbuf<wchar_t>(stdout));
461378397721435d2737ab494908918bfe88882789Howard Hinnant    wostream* wcerr_ptr = ::new(wcerr) wostream(::new(__wcerr) __stdoutbuf<wchar_t>(stderr));
471378397721435d2737ab494908918bfe88882789Howard Hinnant                          ::new(wclog) wostream(wcerr_ptr->rdbuf());
481378397721435d2737ab494908918bfe88882789Howard Hinnant    wcin_ptr->tie(wcout_ptr);
491378397721435d2737ab494908918bfe88882789Howard Hinnant    _VSTD::unitbuf(*wcerr_ptr);
501378397721435d2737ab494908918bfe88882789Howard Hinnant    wcerr_ptr->tie(wcout_ptr);
51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantios_base::Init::~Init()
54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{
551378397721435d2737ab494908918bfe88882789Howard Hinnant    ostream* cout_ptr = (ostream*)cout;
561378397721435d2737ab494908918bfe88882789Howard Hinnant    ostream* clog_ptr = (ostream*)clog;
571378397721435d2737ab494908918bfe88882789Howard Hinnant    cout_ptr->flush();
581378397721435d2737ab494908918bfe88882789Howard Hinnant    clog_ptr->flush();
59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
601378397721435d2737ab494908918bfe88882789Howard Hinnant    wostream* wcout_ptr = (wostream*)wcout;
611378397721435d2737ab494908918bfe88882789Howard Hinnant    wostream* wclog_ptr = (wostream*)wclog;
621378397721435d2737ab494908918bfe88882789Howard Hinnant    wcout_ptr->flush();
631378397721435d2737ab494908918bfe88882789Howard Hinnant    wclog_ptr->flush();
64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}
65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant
66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant_LIBCPP_END_NAMESPACE_STD
67