1 // Common/StdOutStream.cpp 2 3 #include "StdAfx.h" 4 5 #include <tchar.h> 6 7 #include "StdOutStream.h" 8 #include "Common/IntToString.h" 9 #include "Common/StringConvert.h" 10 11 static const char kNewLineChar = '\n'; 12 13 static const char *kFileOpenMode = "wt"; 14 15 CStdOutStream g_StdOut(stdout); 16 CStdOutStream g_StdErr(stderr); 17 Open(const char * fileName)18bool CStdOutStream::Open(const char *fileName) 19 { 20 Close(); 21 _stream = fopen(fileName, kFileOpenMode); 22 _streamIsOpen = (_stream != 0); 23 return _streamIsOpen; 24 } 25 Close()26bool CStdOutStream::Close() 27 { 28 if(!_streamIsOpen) 29 return true; 30 _streamIsOpen = (fclose(_stream) != 0); 31 return !_streamIsOpen; 32 } 33 Flush()34bool CStdOutStream::Flush() 35 { 36 if(!_streamIsOpen) 37 return false; 38 return (fflush(_stream) == 0); 39 } 40 ~CStdOutStream()41CStdOutStream::~CStdOutStream () 42 { 43 Close(); 44 } 45 operator <<(CStdOutStream & (* aFunction)(CStdOutStream &))46CStdOutStream & CStdOutStream::operator<<(CStdOutStream & (*aFunction)(CStdOutStream &)) 47 { 48 (*aFunction)(*this); 49 return *this; 50 } 51 endl(CStdOutStream & outStream)52CStdOutStream & endl(CStdOutStream & outStream) 53 { 54 return outStream << kNewLineChar; 55 } 56 operator <<(const char * string)57CStdOutStream & CStdOutStream::operator<<(const char *string) 58 { 59 fputs(string, _stream); 60 return *this; 61 } 62 operator <<(const wchar_t * string)63CStdOutStream & CStdOutStream::operator<<(const wchar_t *string) 64 { 65 *this << (const char *)UnicodeStringToMultiByte(string, CP_OEMCP); 66 return *this; 67 } 68 operator <<(char c)69CStdOutStream & CStdOutStream::operator<<(char c) 70 { 71 fputc(c, _stream); 72 return *this; 73 } 74 operator <<(int number)75CStdOutStream & CStdOutStream::operator<<(int number) 76 { 77 char textString[32]; 78 ConvertInt64ToString(number, textString); 79 return operator<<(textString); 80 } 81 operator <<(UInt64 number)82CStdOutStream & CStdOutStream::operator<<(UInt64 number) 83 { 84 char textString[32]; 85 ConvertUInt64ToString(number, textString); 86 return operator<<(textString); 87 } 88