#ifndef MemoryStream_H
#define MemoryStream_H
#include <objidl.h>
#include <WebCore/COMPtr.h>
#include <WebCore/SharedBuffer.h>
#include <WTF/RefPtr.h>
class MemoryStream : public IStream
{
public:
static COMPtr<MemoryStream> createInstance(RefPtr<WebCore::SharedBuffer>&&);
protected:
MemoryStream(RefPtr<WebCore::SharedBuffer>&&);
~MemoryStream();
public:
virtual HRESULT STDMETHODCALLTYPE QueryInterface(_In_ REFIID riid, _COM_Outptr_ void** ppvObject);
virtual ULONG STDMETHODCALLTYPE AddRef();
virtual ULONG STDMETHODCALLTYPE Release();
virtual HRESULT STDMETHODCALLTYPE Read(
void* pv,
ULONG cb,
ULONG* pcbRead);
virtual HRESULT STDMETHODCALLTYPE Write(
const void* pv,
ULONG cb,
ULONG* pcbWritten);
virtual HRESULT STDMETHODCALLTYPE Seek(
LARGE_INTEGER dlibMove,
DWORD dwOrigin,
ULARGE_INTEGER* plibNewPosition);
virtual HRESULT STDMETHODCALLTYPE SetSize(ULARGE_INTEGER libNewSize);
virtual HRESULT STDMETHODCALLTYPE CopyTo(
IStream* pstm,
ULARGE_INTEGER cb,
ULARGE_INTEGER* pcbRead,
ULARGE_INTEGER* pcbWritten);
virtual HRESULT STDMETHODCALLTYPE Commit(DWORD grfCommitFlags);
virtual HRESULT STDMETHODCALLTYPE Revert();
virtual HRESULT STDMETHODCALLTYPE LockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
virtual HRESULT STDMETHODCALLTYPE UnlockRegion(ULARGE_INTEGER libOffset, ULARGE_INTEGER cb, DWORD dwLockType);
virtual HRESULT STDMETHODCALLTYPE Stat(_Out_ STATSTG*, DWORD grfStatFlag);
virtual HRESULT STDMETHODCALLTYPE Clone(_COM_Outptr_ IStream** ppstm);
protected:
RefPtr<WebCore::SharedBuffer> m_buffer;
size_t m_pos { 0 };
ULONG m_refCount { 0 };
};
#endif