84 lines
2 KiB
C
84 lines
2 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 2000 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
CMemoryStream.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Minimal implementation of IStream over an array of bytes.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Jay Krell (a-JayK) May 2000
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
#pragma once
|
||
|
#include "objidl.h"
|
||
|
#include "fusiontrace.h"
|
||
|
|
||
|
class CMemoryStream : public IStream
|
||
|
{
|
||
|
public:
|
||
|
CMemoryStream();
|
||
|
BOOL Initialize(const BYTE*, const BYTE*);
|
||
|
virtual ~CMemoryStream();
|
||
|
|
||
|
// IUnknown methods:
|
||
|
ULONG __stdcall AddRef();
|
||
|
ULONG __stdcall Release();
|
||
|
HRESULT __stdcall QueryInterface(REFIID riid, LPVOID *ppvObj);
|
||
|
|
||
|
// ISequentialStream methods:
|
||
|
HRESULT __stdcall Read(void *pv, ULONG cb, ULONG *pcbRead);
|
||
|
HRESULT __stdcall Write(void const *pv, ULONG cb, ULONG *pcbWritten);
|
||
|
|
||
|
// IStream methods:
|
||
|
HRESULT __stdcall Seek(LARGE_INTEGER dlibMove, DWORD dwOrigin, ULARGE_INTEGER *plibNewPosition);
|
||
|
HRESULT __stdcall SetSize(ULARGE_INTEGER libNewSize);
|
||
|
HRESULT __stdcall CopyTo(IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten);
|
||
|
HRESULT __stdcall Commit(DWORD grfCommitFlags);
|
||
|
HRESULT __stdcall Revert();
|
||
|
HRESULT __stdcall LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
|
||
|
HRESULT __stdcall UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
|
||
|
HRESULT __stdcall Stat(STATSTG *pstatstg, DWORD grfStatFlag);
|
||
|
HRESULT __stdcall Clone(IStream **ppIStream);
|
||
|
|
||
|
protected:
|
||
|
LONG m_cRef;
|
||
|
const BYTE *m_pbCurrent;
|
||
|
const BYTE *m_pbBegin;
|
||
|
const BYTE *m_pbEnd;
|
||
|
|
||
|
private: // intentionally not implemented
|
||
|
CMemoryStream(const CMemoryStream &r);
|
||
|
CMemoryStream &operator =(const CMemoryStream &r);
|
||
|
};
|
||
|
|
||
|
inline CMemoryStream::CMemoryStream(
|
||
|
)
|
||
|
:
|
||
|
m_cRef(0),
|
||
|
m_pbCurrent(NULL),
|
||
|
m_pbBegin(NULL),
|
||
|
m_pbEnd(NULL)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
inline BOOL
|
||
|
CMemoryStream::Initialize(
|
||
|
const BYTE *pbBegin,
|
||
|
const BYTE *pbEnd
|
||
|
)
|
||
|
{
|
||
|
m_pbBegin = pbBegin;
|
||
|
m_pbEnd = pbEnd;
|
||
|
m_pbCurrent = pbBegin;
|
||
|
|
||
|
return TRUE;
|
||
|
}
|