|
|
|
|
/********************************************************************
|
|
|
|
|
Created Date: 2009-11-05
|
|
|
|
|
Author: wuding
|
|
|
|
|
Version: 2.0
|
|
|
|
|
Last Version Date: 2010-06-13
|
|
|
|
|
Modified History:
|
|
|
|
|
version Date Author Description
|
|
|
|
|
2009-11-05 wuding version 1.0 加入堆内存,为了缓解内存碎片问题
|
|
|
|
|
2010-06-13 wuding version 2.0 修正几个LoadFromFile引起的bug,重写IncreaseSize,SetBlobContent等方法,优化内存分配。
|
|
|
|
|
2012-12-13 wuding version 3.0 调整接口名称以适应image
|
|
|
|
|
|
|
|
|
|
********************************************************************/
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#ifndef __MEMORY_BUFFER_H
|
|
|
|
|
#define __MEMORY_BUFFER_H
|
|
|
|
|
|
|
|
|
|
#pragma warning(disable: 4786)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BlobBuffer
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
enum { BLOB_BUFFER_BLOCK_SIZE = 8 * 1204 };
|
|
|
|
|
private:
|
|
|
|
|
unsigned char *m_BlobPtr; //实际数据指针
|
|
|
|
|
unsigned long m_lBlobLen; //实际数据总大小
|
|
|
|
|
unsigned long m_lBufferLen; //缓冲区总大小
|
|
|
|
|
unsigned long m_ReadLen; //读取位置
|
|
|
|
|
unsigned char m_BlobBuffer[BLOB_BUFFER_BLOCK_SIZE];
|
|
|
|
|
|
|
|
|
|
void Reset();
|
|
|
|
|
public:
|
|
|
|
|
BlobBuffer();
|
|
|
|
|
~BlobBuffer();
|
|
|
|
|
void Clear();
|
|
|
|
|
void ClearContent();
|
|
|
|
|
void ResetRead();
|
|
|
|
|
/*
|
|
|
|
|
将缓冲区再扩大nIncreaseSize,bCopyOldData==false表示,分配新的空间后,旧的数据不要拷贝到新空间上
|
|
|
|
|
bAllocBufLen true表示设置缓冲内容长度,false表示函数调完后不影响原有GetBlobLength
|
|
|
|
|
*/
|
|
|
|
|
void IncreaseBufferSize(unsigned long nIncreaseSize, bool bCopyOldData = true);
|
|
|
|
|
void AllocBuffer(unsigned long nBufSize);
|
|
|
|
|
unsigned long GetBlobLength() const;
|
|
|
|
|
unsigned long GetBlobBufferLength();
|
|
|
|
|
const unsigned char *GetBlobPtr();
|
|
|
|
|
unsigned char *GetBlobRealPtr();
|
|
|
|
|
void SetBlobContent(const unsigned char *BlobPtr, unsigned long nBlobLen);
|
|
|
|
|
void AppendBlobContent(const unsigned char *BlobPtr, unsigned long nBlobLen);
|
|
|
|
|
void AppendBlobContentChar(const unsigned char BlobChar);
|
|
|
|
|
bool LoadBlobFromFile(const char *sFileName);
|
|
|
|
|
bool SaveBlobToFile(const char *sFileName);
|
|
|
|
|
bool LoadBlobFromFile(const wchar_t *sFileName);
|
|
|
|
|
bool SaveBlobToFile(const wchar_t *sFileName);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|