#if 0 #if !defined(_FUSION_INC_FUSIONBLOB_H_INCLUDED_) #define _FUSION_INC_FUSIONBLOB_H_INCLUDED_ #pragma once template class CFusionGenericBLOB : public BLOB { public: CFusionGenericBLOB() : m_cbBuffer(nInlineBytes) { pBlobData = m_rgbInlineBuffer; cbSize = 0; } ~CFusionGenericBLOB() { if (pBlobData != m_rgbInlineBuffer) { CSxsPreserveLastError ple; delete []pBlobData; ple.Restore(); } } HRESULT Assign(const BLOB &rblob) { return this->Assign(rblob.pBlobData, rblob.cbSize); } HRESULT Assign(const BYTE *prgbIn, SIZE_T cbIn) { if (cbIn > m_cbBuffer) { BYTE *prgbNew = NEW(BYTE[cbIn]); if (prgbNew == NULL) return E_OUTOFMEMORY; if (pBlobData != m_rgbInlineBuffer) delete []pBlobData; pBlobData = prgbNew; m_cbBuffer = cbIn; } memcpy(pBlobData, prgbIn, cbIn); cbSize = cbIn; return NOERROR; } HRESULT Append(const BLOB &rblob) { return this->Assign(rblob.pBlobData, rblob.cbSize); } HRESULT Append(const BYTE *prgbIn, SIZE_T cbIn) { SIZE_T cbTotal = cbSize + cbIn; if (cbTotal > m_cbBuffer) { BYTE *prgbNew = NEW(BYTE[cbTotal]); if (prgbNew == NULL) return E_OUTOFMEMORY; if (pBlobData != m_rgbInlineBuffer) delete []pBlobData; pBlobData = prgbNew; m_cbBuffer = cbTotal; } memcpy(pBlobData, prgbIn, cbIn); cbSize = cbIn; return NOERROR; } HRESULT Clear() { if (pBlobData != m_rgbInlineBuffer) { delete []pBlobData; pBlobData = m_rgbInlineBuffer; m_cbBuffer = nInlineBytes; } cbSize = 0; return NOERROR; } protected: BYTE m_rgbInlineBuffer[nInlineBytes]; ULONG m_cbBuffer; }; typedef CFusionGenericBLOB<256> CFusionBLOB; #endif #endif