//+------------------------------------------------------------------- // // File: stream.hxx // // Contents: Stream class on a file. // // Classes: CStreamOnFile // // History: 08-08-95 Rickhi Created // //-------------------------------------------------------------------- #ifndef __STREAMONFILE_HXX__ #define __STREAMONFILE_HXX__ //+------------------------------------------------------------------- // // Class: CStreamOnFile // // Purpose: Stream wrapper for a flat file. // // History: 08-08-95 Rickhi Created // //-------------------------------------------------------------------- class CStreamOnFile : public IStream { public: CStreamOnFile(const WCHAR *pwszFileName, SCODE &sc, BOOL fRead); ~CStreamOnFile(void); STDMETHOD(QueryInterface)( REFIID iidInterface, void FAR* FAR* ppvObj); STDMETHOD_(ULONG,AddRef)(void); STDMETHOD_(ULONG,Release)(void); STDMETHOD(Read)( VOID HUGEP* pv, ULONG cb, ULONG FAR* pcbRead); STDMETHOD(Write)( VOID const HUGEP* pv, ULONG cb, ULONG FAR* pcbWritten); STDMETHOD(Seek)( LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER FAR* plibNewPosition); STDMETHOD(SetSize) (ULARGE_INTEGER cb); STDMETHOD(CopyTo)( IStream FAR* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER FAR* pcbRead, ULARGE_INTEGER FAR* pcbWritten); STDMETHOD(Commit)(DWORD grfCommitFlags); STDMETHOD(Revert)(void); STDMETHOD(LockRegion)( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); STDMETHOD(UnlockRegion)( ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType); STDMETHOD(Stat)( STATSTG FAR* pstatstg, DWORD statflag); STDMETHOD(Clone)(IStream FAR * FAR *ppstm); private: LONG _clRefs; // reference count HANDLE _hFile; // file handle BOOL _fRead; // read or write side LONG _lOffset; // current seek ptr LONG _cSize; // number of bytes written ULONG _cbData; // size of data BYTE *_pbData; // ptr to data }; #endif // _STREAMONFILE_HXX__