Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
纯C的可生长缓冲区_C_Open Source_Buffer - Fatal编程技术网

纯C的可生长缓冲区

纯C的可生长缓冲区,c,open-source,buffer,C,Open Source,Buffer,我需要一个开源的(最好是麻省理工学院许可的)轻量级的可扩展缓冲区,用纯C实现(最好也可以编译成C++) 我需要相当于以下内容的API(伪代码): void set_分配器(buffer*buf,分配器_Fn) void push_字节(buffer*buf,const char*bytes,size_t len) size\u t get\u长度(缓冲区*buf) void overwrite\u autogrow(缓冲区*buf,大小偏移,常量字符*字节,大小长度) const char*t

我需要一个开源的(最好是麻省理工学院许可的)轻量级的可扩展缓冲区,用纯C实现(最好也可以编译成C++)

我需要相当于以下内容的API(伪代码):

  • void set_分配器(buffer*buf,分配器_Fn)
  • void push_字节(buffer*buf,const char*bytes,size_t len)
  • size\u t get\u长度(缓冲区*buf)
  • void overwrite\u autogrow(缓冲区*buf,大小偏移,常量字符*字节,大小长度)
  • const char*to_字符串(buffer*buf)
执行工作应该是干净和独立的

overwrite\u autogrow
字节的
len
写入给定偏移量,同时根据需要增加缓冲区(正如
推送字节所做的那样)

设置分配器的功能是可选的,但最好具有

有人知道我想要什么吗

或者,至少,在实现我自己的实现时,有什么值得一看的实现吗?

不确定它是否实现了自动增长,因为我不知道你的意思。要手动设置容量吗?如果是,则g_数组设置大小

但是,许可证可能有问题,但您应该能够将其用作LGPL。我不知道这是否适合麻省理工学院。

VPOOL(BSD许可证)

Vpool是一个自动调整大小的缓冲区 (动态数组)。使用它,你不需要 需要关心内存分配, 边界检查,指针 操纵等等


我们谈论的是C,车轮(再发明者)的永恒天堂;如果您正在使用的框架没有提供功能,请启动您自己的实现我已经更新了我的答案。在编写自己不断增长的缓冲区时,我应该看哪个开源实现?:-)你能解释一下你所说的用宏污染代码是什么意思吗?任何可移植的东西都将解决malloc()、realloc()和memcpy()之间的细微差异,这取决于平台,特别是如果它提供日志回调的话。您自己也注意到,您希望能够指定分配器。过度污染和不可避免的使用是有区别的。:-)我将删除该阶段-“干净且独立”就足够了。我已经更新了我的问题以解释自动增长。我正在尽可能地避免GPL,但如果找不到更好的,我会接受它。谢谢谢谢这几乎就是我想要的(它有一些额外的特性,不支持自定义分配器,但这是可以修复的)。