home *** CD-ROM | disk | FTP | other *** search
- /*
- - X P S O F . H
- -
- * Purpose:
- * Wraps the StreamOnFile object to add buffering of the stream.
- * The wrappered version uses an in-memory buffer, or cache, to
- * reduce the number of actual Reads and Writes to the underlying
- * stream. The goal is, obviously, to improve performance.
- *
- * Copyright 1992-1995, Microsoft Corporation. All Rights Reserved.
- */
-
-
- #define XPSOF_BUFF_MAX ((ULONG) 1024)
-
- #define XPSOF_READ ((ULONG) 0x00000001)
- #define XPSOF_WRITE ((ULONG) 0x00000002)
- #define XPSOF_READWRITE ((ULONG) 0x00000003)
-
- /* Creates the wrapped SOF object */
-
- STDMETHODIMP HrWrapStreamOnFile(
- LPALLOCATEBUFFER lpAllocBuffer,
- LPFREEBUFFER lpFreeBuffer,
- ULONG ulFlags,
- LPSTREAM lpStream,
- LPSTREAM * lppWrappedStream);
-
-
- /* IStream Interface */
-
- #define MAPI_ISTREAM_METHODS(IPURE) \
- MAPIMETHOD(Read) \
- (THIS_ VOID HUGEP * lpv, \
- ULONG cb, \
- ULONG FAR * lpcbRead) IPURE; \
- MAPIMETHOD(Write) \
- (THIS_ VOID const HUGEP * lpv, \
- ULONG cb, \
- ULONG FAR * lpcbWritten) IPURE; \
- MAPIMETHOD(Seek) \
- (THIS_ LARGE_INTEGER libMove, \
- DWORD dwOrigin, \
- ULARGE_INTEGER FAR * lplibNewPosition) IPURE; \
- MAPIMETHOD(SetSize) \
- (THIS_ ULARGE_INTEGER libNewSize) IPURE; \
- MAPIMETHOD(CopyTo) \
- (THIS_ IStream FAR * lpstm, \
- ULARGE_INTEGER cb, \
- ULARGE_INTEGER FAR * lpcbRead, \
- ULARGE_INTEGER FAR * lpcbWritten) IPURE; \
- MAPIMETHOD(Commit) \
- (THIS_ DWORD dwCommitFlags) IPURE; \
- MAPIMETHOD(Revert) \
- (THIS) IPURE; \
- MAPIMETHOD(LockRegion) \
- (THIS_ ULARGE_INTEGER libOffset, \
- ULARGE_INTEGER cb, \
- DWORD dwLockType) IPURE; \
- MAPIMETHOD(UnlockRegion) \
- (THIS_ ULARGE_INTEGER ulibOffset, \
- ULARGE_INTEGER cb, \
- DWORD dwLockType) IPURE; \
- MAPIMETHOD(Stat) \
- (THIS_ STATSTG FAR * lpstatstg, \
- DWORD dwStatFlag) IPURE; \
- MAPIMETHOD(Clone) \
- (THIS_ IStream FAR * FAR * lppstm) IPURE; \
-
-
- /* Interface declaration */
-
- #undef INTERFACE
- #define INTERFACE struct _XPSOF
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, XPSOF_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_ISTREAM_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, XPSOF_)
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_ISTREAM_METHODS(IMPL)
- #undef MAPIMETHOD_
- #define MAPIMETHOD_(type, method) STDMETHOD_(type, method)
-
- DECLARE_MAPI_INTERFACE(XPSOF_)
- {
- MAPI_IUNKNOWN_METHODS(IMPL)
- MAPI_ISTREAM_METHODS(IMPL)
- };
-
- typedef struct _XPSOF
- {
- XPSOF_Vtbl * lpVtbl;
- LONG lcInit;
- ULONG ulFlags;
- LPSTREAM lpstrm;
- LPVOID lpvBuff;
- ULONG libBuff;
- ULONG cbBuffMac;
- BOOL fDirty;
- LPFREEBUFFER FreeBuffer;
-
- } XPSOF, FAR * LPXPSOF;
-