Extend Buffer结构图
说明:
(1) n:1byte,表示该ExtendBuffer的大小为2n byte。
(2) block:有效的存储数据的数据块。
(3) free block:该区域中没有存储任何数据的块
(4) block info:为各block的信息,固定长度4byte表示。格式为:usedflg/offset/size/key
usedflg:1bit, 表示该block是否被使用。
offset: 19bit,表示该block在extend buffer中的offset,即
offset = 该block的起始地址 - extend buffer的首地址。
size: 8bit,表示该block的字节数(是空间的大小,未必是所存数据的长度)。
Key: 4bit,表示该block中的数据所属的key值。
(5) free block info:为free block的信息,4byte表示。格式为:offset/size
offset: 2byte表示,offset = extend buffer的末尾地址 - free block的起始地址
size: 2byte,表示free block的字节数。
(6) block中存放的有效数据的长度在其它地方已有记录,在本题中无需考虑。
2. 要求
请用C++创建一个ExtendBuffer类如下:
class ExtendBuffer{
public:
ExtendBuffer(int size = 256);
int InsertBlock(int *pData, int pSize, int pKey);
/* 向ExtendBuffer中插入特定Key值,特定大小的数据。
该Key值的数据在ExtendBuffer中一定不存在。
待插入的数据由pData表示,其所占字节数由pSize表示。 */
int DeleteBlock (int pKey);
/* 从ExtendBuffer中删除特定Key值的数据。
该Key值的数据在ExtendBuffer中一定存在。
只需将该数据对应的block info中的usedflg置为false即可。 */
int UpdateBlock (int pKey, int * pData, int pSize);
/* 更新ExtendBuffer中特定Key值的数据。
该Key值的数据在ExtendBuffer中一定存在。
更新的数据及长度由pData和pSize表示。 */
}
这道题怎么做呢?????