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 / peer.xp / xpsof.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-11  |  4.6 KB  |  105 lines

  1. /*
  2.  -  X P S O F . H
  3.  -
  4.  *  Purpose:
  5.  *      Wraps the StreamOnFile object to add buffering of the stream.
  6.  *      The wrappered version uses an in-memory buffer, or cache, to 
  7.  *      reduce the number of actual Reads and Writes to the underlying 
  8.  *      stream.  The goal is, obviously, to improve performance.  
  9.  *
  10.  *  Copyright 1992-1995, Microsoft Corporation.  All Rights Reserved.
  11.  */
  12.  
  13.  
  14. #define XPSOF_BUFF_MAX      ((ULONG) 1024)
  15.  
  16. #define XPSOF_READ          ((ULONG) 0x00000001)
  17. #define XPSOF_WRITE         ((ULONG) 0x00000002)
  18. #define XPSOF_READWRITE     ((ULONG) 0x00000003)
  19.  
  20. /* Creates the wrapped SOF object */
  21.  
  22. STDMETHODIMP HrWrapStreamOnFile(
  23.     LPALLOCATEBUFFER    lpAllocBuffer,
  24.     LPFREEBUFFER        lpFreeBuffer,
  25.     ULONG               ulFlags,
  26.     LPSTREAM            lpStream,
  27.     LPSTREAM *          lppWrappedStream);
  28.  
  29.  
  30. /* IStream Interface */
  31.  
  32. #define MAPI_ISTREAM_METHODS(IPURE)                                     \
  33.     MAPIMETHOD(Read)                                                    \
  34.         (THIS_  VOID HUGEP *                lpv,                        \
  35.                 ULONG                       cb,                         \
  36.                 ULONG FAR *                 lpcbRead) IPURE;            \
  37.     MAPIMETHOD(Write)                                                   \
  38.         (THIS_  VOID const HUGEP *          lpv,                        \
  39.                 ULONG                       cb,                         \
  40.                 ULONG FAR *                 lpcbWritten) IPURE;         \
  41.     MAPIMETHOD(Seek)                                                    \
  42.         (THIS_  LARGE_INTEGER               libMove,                    \
  43.                 DWORD                       dwOrigin,                   \
  44.                 ULARGE_INTEGER FAR *        lplibNewPosition) IPURE;    \
  45.     MAPIMETHOD(SetSize)                                                 \
  46.         (THIS_  ULARGE_INTEGER              libNewSize) IPURE;          \
  47.     MAPIMETHOD(CopyTo)                                                  \
  48.         (THIS_  IStream FAR *               lpstm,                      \
  49.                 ULARGE_INTEGER              cb,                         \
  50.                 ULARGE_INTEGER FAR *        lpcbRead,                   \
  51.                 ULARGE_INTEGER FAR *        lpcbWritten) IPURE;         \
  52.     MAPIMETHOD(Commit)                                                  \
  53.         (THIS_  DWORD                       dwCommitFlags) IPURE;       \
  54.     MAPIMETHOD(Revert)                                                  \
  55.         (THIS)                              IPURE;                      \
  56.     MAPIMETHOD(LockRegion)                                              \
  57.         (THIS_  ULARGE_INTEGER              libOffset,                  \
  58.                 ULARGE_INTEGER              cb,                         \
  59.                 DWORD                       dwLockType) IPURE;          \
  60.     MAPIMETHOD(UnlockRegion)                                            \
  61.         (THIS_  ULARGE_INTEGER              ulibOffset,                 \
  62.                 ULARGE_INTEGER              cb,                         \
  63.                 DWORD                       dwLockType) IPURE;          \
  64.     MAPIMETHOD(Stat)                                                    \
  65.         (THIS_  STATSTG FAR *               lpstatstg,                  \
  66.                 DWORD                       dwStatFlag) IPURE;          \
  67.     MAPIMETHOD(Clone)                                                   \
  68.         (THIS_  IStream FAR * FAR *         lppstm) IPURE;              \
  69.  
  70.  
  71. /* Interface declaration */
  72.  
  73. #undef  INTERFACE
  74. #define INTERFACE struct _XPSOF
  75. #undef  MAPIMETHOD_
  76. #define MAPIMETHOD_(type, method)   MAPIMETHOD_DECLARE(type, method, XPSOF_)
  77.         MAPI_IUNKNOWN_METHODS(IMPL)
  78.         MAPI_ISTREAM_METHODS(IMPL)
  79. #undef  MAPIMETHOD_
  80. #define MAPIMETHOD_(type, method)   MAPIMETHOD_TYPEDEF(type, method, XPSOF_)
  81.         MAPI_IUNKNOWN_METHODS(IMPL)
  82.         MAPI_ISTREAM_METHODS(IMPL)
  83. #undef  MAPIMETHOD_
  84. #define MAPIMETHOD_(type, method)   STDMETHOD_(type, method)
  85.  
  86. DECLARE_MAPI_INTERFACE(XPSOF_)
  87. {
  88.     MAPI_IUNKNOWN_METHODS(IMPL)
  89.     MAPI_ISTREAM_METHODS(IMPL)
  90. };
  91.  
  92. typedef struct _XPSOF
  93. {
  94.     XPSOF_Vtbl *        lpVtbl;
  95.     LONG                lcInit;
  96.     ULONG               ulFlags;
  97.     LPSTREAM            lpstrm;
  98.     LPVOID              lpvBuff;
  99.     ULONG               libBuff;
  100.     ULONG               cbBuffMac;
  101.     BOOL                fDirty;
  102.     LPFREEBUFFER        FreeBuffer;
  103.  
  104. } XPSOF, FAR * LPXPSOF;
  105.