c_cpp 这是数据块系统的原型,以动态二进制格式存储数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 这是数据块系统的原型,以动态二进制格式存储数据相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
#include <stdlib.h>
// example of dynamic datablock objects
#define DataBlock_NEW(size) malloc(sizeof(struct DataBlock) + (sizeof(unsigned char) * size));
#define DataBlock_SIZE(sobj) (sobj->cap + sizeof(struct DataBlock))
#define DataBlock_SPACE(dblock) (dblock->cap - dblock->len)
#define DataBlock_FITS(dblock, sizeN) ((dblock->cap - dblock->len) > sizeN)
#define DataBlock_ADDSPC 5
// Nullifies both ends of a data block
#define DataBlock_NULLIFY(dblock) do { \
dblock->next = NULL; \
dblock->prev = NULL; \
} while (0)
#define DataBlock_EXPAND(dblock, amount) do { \
dblock = realloc(dblock, dblock->cap + amount + DataBlock_ADDSPC); \
dblock->cap += amount + DataBlock_ADDSPC; \
} while (0)
struct DataBlock
{
struct DataBlock* next;
struct DataBlock* prev;
size_t cap;
size_t len;
unsigned char data[0];
};
struct DataBlock* DataBlock_new(size_t size)
{
struct DataBlock* newblock = DataBlock_NEW(size);
newblock->len = 0;
newblock->cap = size;
DataBlock_NULLIFY(newblock);
return newblock;
}
int main(int argc, char const *argv[])
{
struct DataBlock* test = DataBlock_new(10);
struct DataBlock* foo = DataBlock_new(10);
struct DataBlock* poo = DataBlock_new(20);
test->next = foo;
test->prev = poo;
test->data[0] = 4;
test->data[1] = 3;
test->data[2] = 44;
test->data[3] = 21;
printf("[Block]:test next=%p, prev=%p, len=%lu, cap=%lu;;;\n", test->next, test->prev, test->len, test->cap);
DataBlock_EXPAND(test, 40);
printf("[Block]:test next=%p, prev=%p, len=%lu, cap=%lu;;;\n", test->next, test->prev, test->len, test->cap);
return 0;
}
以上是关于c_cpp 这是数据块系统的原型,以动态二进制格式存储数据的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 反应式编程系统的原型
c_cpp c中自我评估型系统的原型。
c_cpp C中不可变数据框架的原型
Swift 动态原型行高
c_cpp 使用原始套接字发送和接收带有ICMP协议的OUTPUT的数据包的小程序是六进制格式的数据包。可以打印为%c来查看数据。 IP heade
第八章 linux磁盘与文件系统管理g