00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #pragma once
00023
00024 [uuid("30AB78C7-5259-4594-AEFE-9C0FC2F08A5E")]
00025 interface IBitStream : public IUnknown
00026 {
00027 STDMETHOD_(UINT64, GetPos) () = 0;
00028 STDMETHOD_(UINT64, Seek) (UINT64 pos) = 0;
00029 STDMETHOD(ByteWrite) (const void* pData, int len) = 0;
00030 STDMETHOD(BitWrite) (UINT64 data, int len) = 0;
00031 STDMETHOD(BitFlush) () = 0;
00032 };
00033
00034 class CBitStream : public CUnknown, public IBitStream
00035 {
00036 CComPtr<IStream> m_pStream;
00037 bool m_fThrowError;
00038 UINT64 m_bitbuff;
00039 int m_bitlen;
00040
00041 public:
00042 CBitStream(IStream* pStream, bool m_fThrowError = false);
00043 virtual ~CBitStream();
00044
00045 DECLARE_IUNKNOWN;
00046 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void** ppv);
00047
00048
00049
00050 STDMETHODIMP_(UINT64) GetPos();
00051 STDMETHODIMP_(UINT64) Seek(UINT64 pos);
00052 STDMETHODIMP ByteWrite(const void* pData, int len);
00053 STDMETHODIMP BitWrite(UINT64 data, int len);
00054 STDMETHODIMP BitFlush();
00055 };