home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / dbmsg / mapi / remote.xp / xpstream.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-11  |  5.0 KB  |  135 lines

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. //  File Name 
  4. //      XPSTREAM.H
  5. //
  6. //  Description
  7. //      Interface declaraction file for CCachedStream.
  8. //
  9. //  Author
  10. //      Irving De la Cruz
  11. //
  12. //  Note: This file is the C++ version of the buffered IStream wrapper
  13. //        developed originally for the C-based MSPEER transport in
  14. //        the MAPI SDK samples.
  15. //
  16. //  Revision: 1.7
  17. //
  18. // Written for Microsoft Windows Developer Support
  19. // Copyright (c) 1995-1996 Microsoft Corporation. All rights reserved.
  20. //
  21. #ifndef _XPSTREAM_H
  22. #define _XPSTREAM_H
  23.  
  24. #define STRICT
  25. #include <WINDOWS.H>
  26. #include <MAPIWIN.H>
  27. #include <MAPISPI.H>
  28. #include <MAPIUTIL.H>
  29.  
  30. #define XPSOF_BUFF_MAX      4096
  31. #define XPSOF_READ          0x00000001
  32. #define XPSOF_WRITE         0x00000002
  33. #define XPSOF_READWRITE     (XPSOF_WRITE | XPSOF_READ)
  34.  
  35. class CCachedStream : public IStream
  36. {
  37. public:
  38. ///////////////////////////////////////////////////////////////////////////////
  39. // IUnknown virtual member functions
  40. //
  41.     inline STDMETHODIMP QueryInterface
  42.                     (REFIID                     riid,
  43.                      LPVOID *                   ppvObj)
  44.                     { *ppvObj = NULL;
  45.                       if (riid == IID_IStream || riid == IID_IUnknown)
  46.                       {
  47.                           *ppvObj = (LPVOID)this;
  48.                           // Increase usage count of this object
  49.                           AddRef();
  50.                           return S_OK;
  51.                       }
  52.                       return E_NOINTERFACE;
  53.                     };
  54.     inline STDMETHODIMP_(ULONG) AddRef
  55.                     () { ++m_cRef; return m_cRef; };
  56.     inline STDMETHODIMP_(ULONG) Release
  57.                     () { ULONG ulCount = --m_cRef;
  58.                          if (!ulCount) { delete this; }
  59.                          return ulCount;};
  60. ///////////////////////////////////////////////////////////////////////////////
  61. // IStream virtual member functions
  62. //
  63.     STDMETHODIMP Read
  64.                     (void *                     pv,
  65.                      ULONG                      cb,
  66.                      ULONG *                    pcbRead);
  67.     STDMETHODIMP Write
  68.                     (const void *               pv,
  69.                      ULONG                      cb,
  70.                      ULONG *                    pcbWritten);
  71.     STDMETHODIMP Seek
  72.                     (LARGE_INTEGER              dlibMove,
  73.                      DWORD                      dwOrigin,
  74.                      ULARGE_INTEGER *           plibNewPosition);
  75.     STDMETHODIMP CopyTo
  76.                     (IStream *                  pstm,
  77.                      ULARGE_INTEGER cb,
  78.                      ULARGE_INTEGER *           pcbRead,
  79.                      ULARGE_INTEGER *           pcbWritten);
  80.     STDMETHODIMP Commit
  81.                     (DWORD                      grfCommitFlags);
  82.     inline STDMETHODIMP SetSize
  83.                     (ULARGE_INTEGER             libNewSize)
  84.                      { return m_pImpStream->SetSize (libNewSize); };
  85.     inline STDMETHODIMP Revert
  86.                     ()
  87.                      { return m_pImpStream->Revert(); };
  88.     inline STDMETHODIMP LockRegion
  89.                     (ULARGE_INTEGER             libOffset,
  90.                      ULARGE_INTEGER             cb,
  91.                      DWORD                      dwLockType)
  92.                      { return m_pImpStream->LockRegion (libOffset, cb, dwLockType); };
  93.     inline STDMETHODIMP UnlockRegion
  94.                     (ULARGE_INTEGER             libOffset,
  95.                      ULARGE_INTEGER             cb,
  96.                      DWORD                      dwLockType)
  97.                      { return m_pImpStream->UnlockRegion (libOffset, cb, dwLockType); };
  98.     inline STDMETHODIMP Stat
  99.                     (STATSTG *                  pstatstg,
  100.                      DWORD                      grfStatFlag)
  101.                      { return m_pImpStream->Stat (pstatstg, grfStatFlag); };
  102.     inline STDMETHODIMP Clone
  103.                     (IStream **                 ppstm)
  104.                      { return m_pImpStream->Clone (ppstm); };
  105.  
  106. ///////////////////////////////////////////////////////////////////////////////
  107. // Other member functions specific to this class
  108. //
  109. private:
  110.     HRESULT WINAPI RewindStream
  111.                     (ULONG                      ib);
  112.     
  113. ///////////////////////////////////////////////////////////////////////////////
  114. // Constructors and destructors
  115. public :
  116.     CCachedStream   (LPSTREAM                   pImpStream,
  117.                      DWORD                      ulFlags);
  118.     ~CCachedStream  ();
  119.  
  120. ///////////////////////////////////////////////////////////////////////////////
  121. // Data members
  122. public :
  123.     ULONG               m_cRef;
  124.     BOOL                m_fDirty;
  125.     LPSTREAM            m_pImpStream;
  126.     ULONG               m_ulFlags;
  127.     LPVOID              m_pvCache;
  128.     ULONG               m_libBuff;
  129.     ULONG               m_cbBuffMac;
  130. };
  131.  
  132. #endif // _XPSTREAM_H
  133.  
  134. // End of file for XPSTREAM.H
  135.