SpArchive.h
上传用户:zhanglf88
上传日期:2013-11-19
资源大小:6036k
文件大小:3k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. /*
  2. Cross Platform Core Code.
  3. Copyright(R) 2001-2002 Balang Software.
  4. All rights reserved.
  5. Using:
  6. class CSPArchive;
  7. like CArchive
  8. */
  9. #if !defined( __SP_ARCHIVE_H__)
  10. #define __SP_ARCHIVE_H__
  11. class STKLIB_API CSPArchive
  12. {
  13. public:
  14. // Flag values
  15. enum Mode { store = 0, load = 1, bNoFlushOnDelete = 2, bNoByteSwap = 4 };
  16. CSPArchive(CSPFile* pFile, UINT nMode, int nBufSize = 4096, void* lpBuf = NULL);
  17. ~CSPArchive();
  18. // Attributes
  19. BOOL IsLoading() const;
  20. BOOL IsStoring() const;
  21. BOOL IsByteSwapping() const;
  22. BOOL IsBufferEmpty() const;
  23. CSPFile* GetFile() const;
  24. // Operations
  25. UINT Read(void* lpBuf, UINT nMax);
  26. void Write(const void* lpBuf, UINT nMax);
  27. void Flush();
  28. void Close();
  29. void Abort();   // close and shutdown without exceptions
  30. // reading and writing strings
  31. void WriteString(LPCTSTR lpsz);
  32. LPTSTR ReadString(LPTSTR lpsz, UINT nMax);
  33. BOOL ReadString(CSPString& rString);
  34. public:
  35. // insertion operations
  36. CSPArchive& operator<<(BYTE by);
  37. CSPArchive& operator<<(WORD w);
  38. CSPArchive& operator<<(LONG l);
  39. CSPArchive& operator<<(DWORD dw);
  40. CSPArchive& operator<<(float f);
  41. CSPArchive& operator<<(double d);
  42. CSPArchive& operator<<(int i);
  43. CSPArchive& operator<<(short w);
  44. CSPArchive& operator<<(char ch);
  45. CSPArchive& operator<<(unsigned u);
  46. // extraction operations
  47. CSPArchive& operator>>(BYTE& by);
  48. CSPArchive& operator>>(WORD& w);
  49. CSPArchive& operator>>(DWORD& dw);
  50. CSPArchive& operator>>(LONG& l);
  51. CSPArchive& operator>>(float& f);
  52. CSPArchive& operator>>(double& d);
  53. CSPArchive& operator>>(int& i);
  54. CSPArchive& operator>>(short& w);
  55. CSPArchive& operator>>(char& ch);
  56. CSPArchive& operator>>(unsigned& u);
  57. CSPArchive& operator<<(const CSPTime& tm);
  58. CSPArchive& operator>>(CSPTime& tm);
  59. friend CSPArchive& operator<<(CSPArchive& ar, CSPString& string);
  60. friend CSPArchive& operator>>(CSPArchive& ar, CSPString& string);
  61. // Implementation
  62. public:
  63. BOOL m_bForceFlat;  // for COleClientItem implementation (default TRUE)
  64. BOOL m_bDirectBuffer;   // TRUE if m_pFile supports direct buffering
  65. void FillBuffer(UINT nBytesNeeded);
  66. void CheckCount();  // throw exception if m_nMapCount is too large
  67. // special functions for reading and writing (16-bit compatible) counts
  68. DWORD ReadCount();
  69. void WriteCount(DWORD dwCount);
  70. protected:
  71. // archive objects cannot be copied or assigned
  72. CSPArchive(const CSPArchive& arSrc);
  73. void operator=(const CSPArchive& arSrc);
  74. BOOL m_nMode;
  75. BOOL m_bUserBuf;
  76. int m_nBufSize;
  77. CSPFile* m_pFile;
  78. BYTE* m_lpBufCur;
  79. BYTE* m_lpBufMax;
  80. BYTE* m_lpBufStart;
  81. };
  82. #ifdef _SP_ENABLE_INLINES
  83. #define _SPARCHIVE_INLINE inline
  84. #include "SpArchive.inl"
  85. #undef _SPARCHIVE_INLINE
  86. #endif
  87. #endif //__SP_ARCHIVE_H__