StreamUtils.h
上传用户:bingyunhe
上传日期:2013-07-06
资源大小:723k
文件大小:2k
源码类别:

词法分析

开发平台:

Visual C++

  1. //
  2. // StreamUtils.h
  3. // 流的一些实用类
  4. // Author : zhanlc
  5. // Date : 2003/9/10
  6. #ifndef __StreamUtils_H__
  7. #define __StreamUtils_H__
  8. /**
  9. * 流配接器
  10. */
  11. template <class TStream>
  12. class TStreamAdapter
  13. {
  14. protected :
  15. /**
  16. * 具体的流
  17. */
  18. TStream* m_pStream;
  19. public :
  20. /**
  21. * 构造函数
  22. */
  23. TStreamAdapter(TStream* strm ) : m_pStream(strm)
  24. {
  25. };
  26. /**
  27. * 输出函数
  28. */
  29. template <class T>
  30. TStreamAdapter& operator<<( const T& t )
  31. {
  32. ASSERT( m_pStream );
  33. m_pStream->Write( &t, sizeof(T) );
  34. return *this;
  35. };
  36. //template <>
  37. TStreamAdapter& operator<<( const CString& str )
  38. {
  39. SaveComplex(str);
  40. return *this;
  41. }
  42. //template <>
  43. TStreamAdapter& operator<<( const TCHAR*& str )
  44. {
  45. SaveComplex( str );
  46. return *this;
  47. }
  48. /**
  49. * 输入函数
  50. */
  51. template <class T>
  52. TStreamAdapter& operator>>( T& t)
  53. {
  54. ASSERT( m_pStream );
  55. m_pStream->Read( &t, sizeof(T) );
  56. return *this;
  57. };
  58. //template <>
  59. TStreamAdapter& operator>>( CString& str )
  60. {
  61. ASSERT( m_pStream );
  62. LoadComplex(str);
  63. return *this;
  64. }
  65. public :
  66. /**
  67. * 保存简单类型
  68. */
  69. template <class T>
  70. void SaveSimple( T t )
  71. {
  72. m_pStream->Write( &t, sizeof(T) );
  73. }
  74. /**
  75. * 输出字符串
  76. */
  77. void SaveComplex( const TCHAR* szContent )
  78. {
  79. ASSERT( m_pStream );
  80. // write the length
  81. int nLen = _tcslen(szContent);
  82. operator<<(nLen);
  83. // write the content
  84. m_pStream->Write( szContent, nLen );
  85. }
  86. /**
  87. * 输出字符串
  88. */
  89. void SaveComplex( const CString& szContent )
  90. {
  91. SaveComplex( (const TCHAR*)szContent );//operator<<( (const TCHAR*)szContent );
  92. }
  93. /**
  94. * 输入简单类型
  95. */
  96. template <class T>
  97. void LoadSimple( T& t)
  98. {
  99. m_pStream->Read( &t, sizeof(T) );
  100. }
  101. /**
  102. * 输入字符串
  103. */
  104. void LoadComplex( CString& str )
  105. {
  106. ASSERT( m_pStream );
  107. int nLen;
  108. operator>>(nLen);
  109. ASSERT( nLen >= 0 );
  110. if ( nLen == 0 )
  111. return ;
  112. // 读入字符
  113. TCHAR strBuf[256];
  114. TCHAR* pBuf = strBuf;
  115. if ( nLen > sizeof(strBuf)/sizeof(TCHAR) - 1 )
  116. pBuf = new TCHAR[nLen+1];
  117. pBuf[nLen] = TCHAR('');
  118. m_pStream->Read( pBuf, nLen );
  119. // assign 
  120. str = pBuf;
  121. if ( nLen > sizeof(strBuf)/sizeof(TCHAR) - 1 )
  122. delete [] pBuf;
  123. }
  124. };
  125. #endif