windows-nt/Source/XPSP1/NT/base/crts/crtw32/stdcpp64/wiostrea.cpp
2020-09-26 16:20:57 +08:00

63 lines
1.4 KiB
C++

// wiostream -- initialize standard wide streams
#include <locale>
#include <fstream>
#include <iostream>
#include <new>
_STD_BEGIN
// OBJECT DECLARATIONS
int _Winit::_Init_cnt = -1;
static wfilebuf wfin(_Noinit);
static wfilebuf wfout(_Noinit);
static wfilebuf wferr(_Noinit);
_CRTIMP2 wistream wcin(_Noinit);
_CRTIMP2 wostream wcout(_Noinit);
_CRTIMP2 wostream wcerr(_Noinit);
_CRTIMP2 wostream wclog(_Noinit);
_CRTIMP2 _Winit::_Winit()
{ // initialize standard wide streams first time
bool doinit;
{_Lockit _Lk;
if (0 <= _Init_cnt)
++_Init_cnt, doinit = false;
else
_Init_cnt = 1, doinit = true; }
if (doinit)
{ // initialize standard wide streams
new (&wfin) wfilebuf(stdin);
new (&wfout) wfilebuf(stdout);
new (&wferr) wfilebuf(stderr);
new (&wcin) wistream(&wfin, true);
new (&wcout) wostream(&wfout, true);
wcin.tie(&wcout);
new (&wcerr) wostream(&wferr, true);
wcerr.tie(&wcout);
wcerr.setf(ios_base::unitbuf);
new (&wclog) wostream(&wferr, true);
wclog.tie(&wcout);
}
}
_CRTIMP2 _Winit::~_Winit()
{ // flush standard wide streams last time
bool doflush;
{_Lockit _Lk;
if (--_Init_cnt == 0)
doflush = true;
else
doflush = false; }
if (doflush)
{ // flush standard wide streams
wcout.flush();
wcerr.flush();
wclog.flush();
}
_STD_END
}
/*
* Copyright (c) 1994 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
*/