Home | History | Annotate | Download | only in Common
      1 // Common/StdOutStream.cpp
      2 
      3 #include "StdAfx.h"
      4 
      5 #include <tchar.h>
      6 
      7 #include "IntToString.h"
      8 #include "StdOutStream.h"
      9 #include "StringConvert.h"
     10 #include "UTFConvert.h"
     11 
     12 static const char kNewLineChar =  '\n';
     13 
     14 static const char *kFileOpenMode = "wt";
     15 
     16 extern int g_CodePage;
     17 
     18 CStdOutStream g_StdOut(stdout);
     19 CStdOutStream g_StdErr(stderr);
     20 
     21 bool CStdOutStream::Open(const char *fileName) throw()
     22 {
     23   Close();
     24   _stream = fopen(fileName, kFileOpenMode);
     25   _streamIsOpen = (_stream != 0);
     26   return _streamIsOpen;
     27 }
     28 
     29 bool CStdOutStream::Close() throw()
     30 {
     31   if (!_streamIsOpen)
     32     return true;
     33   if (fclose(_stream) != 0)
     34     return false;
     35   _stream = 0;
     36   _streamIsOpen = false;
     37   return true;
     38 }
     39 
     40 bool CStdOutStream::Flush() throw()
     41 {
     42   return (fflush(_stream) == 0);
     43 }
     44 
     45 CStdOutStream & endl(CStdOutStream & outStream) throw()
     46 {
     47   return outStream << kNewLineChar;
     48 }
     49 
     50 CStdOutStream & CStdOutStream::operator<<(const wchar_t *s)
     51 {
     52   int codePage = g_CodePage;
     53   if (codePage == -1)
     54     codePage = CP_OEMCP;
     55   AString dest;
     56   if (codePage == CP_UTF8)
     57     ConvertUnicodeToUTF8(s, dest);
     58   else
     59     UnicodeStringToMultiByte2(dest, s, (UINT)codePage);
     60   return operator<<((const char *)dest);
     61 }
     62 
     63 void StdOut_Convert_UString_to_AString(const UString &s, AString &temp)
     64 {
     65   int codePage = g_CodePage;
     66   if (codePage == -1)
     67     codePage = CP_OEMCP;
     68   if (codePage == CP_UTF8)
     69     ConvertUnicodeToUTF8(s, temp);
     70   else
     71     UnicodeStringToMultiByte2(temp, s, (UINT)codePage);
     72 }
     73 
     74 void CStdOutStream::PrintUString(const UString &s, AString &temp)
     75 {
     76   StdOut_Convert_UString_to_AString(s, temp);
     77   *this << (const char *)temp;
     78 }
     79 
     80 CStdOutStream & CStdOutStream::operator<<(Int32 number) throw()
     81 {
     82   char s[32];
     83   ConvertInt64ToString(number, s);
     84   return operator<<(s);
     85 }
     86 
     87 CStdOutStream & CStdOutStream::operator<<(Int64 number) throw()
     88 {
     89   char s[32];
     90   ConvertInt64ToString(number, s);
     91   return operator<<(s);
     92 }
     93 
     94 CStdOutStream & CStdOutStream::operator<<(UInt32 number) throw()
     95 {
     96   char s[16];
     97   ConvertUInt32ToString(number, s);
     98   return operator<<(s);
     99 }
    100 
    101 CStdOutStream & CStdOutStream::operator<<(UInt64 number) throw()
    102 {
    103   char s[32];
    104   ConvertUInt64ToString(number, s);
    105   return operator<<(s);
    106 }
    107