StdOutStream.cpp 1.7 KB

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