【问题标题】:Growable buffer for plain C [closed]普通 C 的可增长缓冲区 [关闭]
【发布时间】:2010-02-14 12:37:13
【问题描述】:

我需要一个以纯 C 语言实现的开源(最好是 MIT 许可)轻量级可增长缓冲区(最好也可编译为 C++)。

我需要等效于以下 API(伪代码):

  • void set_allocator(buffer * buf, allocator_Fn fn);
  • void push_bytes(buffer * buf, const char * bytes, size_t len);
  • size_t get_length(buffer * buf);
  • void overwrite_autogrow(buffer * buf, size_t offset, const char * bytes, size_t len);
  • const char * to_string(buffer * buf);

实施应该是干净和独立的。

overwrite_autogrowlenbytes 写入给定的偏移量,同时根据需要增加缓冲区(就像push_bytes 一样)。

设置分配器的能力是可选的,但最好有。

有人知道我想要什么吗?

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

【问题讨论】:

  • 我们谈论的是 C,轮子(再)发明者的永恒避风港;如果您使用的框架不提供该功能,请推出您自己的实现
  • 我已经更新了我的答案。在编写自己的增长缓冲区时,我应该查看哪个开源实现? :-)
  • 你能澄清pollute your code with macros 的意思吗?任何可移植的东西都可以解决 malloc()、realloc() 和 memcpy() 之间的细微差别,具体取决于平台,尤其是在它提供日志回调的情况下。您自己指出您希望能够指定分配器。
  • 嗯,过度污染和不可避免的使用是有区别的。 :-) 我将删除那个阶段——“干净且独立”就足够了。

标签: c open-source buffer


【解决方案1】:

VPOOL(BSD 许可证)

http://www.bsdua.org/libbsdua.html#vpool

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

【讨论】:

  • 谢谢!这几乎是我想要的(它有一些额外的功能,并且不支持自定义分配器——但这是可以修复的)。
【解决方案2】:

http://library.gnome.org/devel/glib/stable/glib-Arrays.html

不确定它是否实现了 overwrite_autogrow,因为我不知道你的意思。您想手动设置容量吗?如果是 g_array_set_size。

但是,许可证可能存在问题,但您应该能够将其用作 LGPL。我不知道这是否与 MIT 兼容。

【讨论】:

  • 我更新了我的问题来解释 overwrite_autogrow。我试图尽可能地避免 [L]GPL,但如果我找不到更好的东西,我会接受它。谢谢!
猜你喜欢
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-14
  • 2010-11-09
  • 2019-04-09
  • 1970-01-01
相关资源
最近更新 更多