Мне нужен легкий (предпочтительно MIT-лицензированный) легкий растущий буфер, реализованный в простой C (предпочтительно также скомпилируемый как C++).Растительный буфер для простой 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_autogrow
пишет len
из bytes
к заданному смещению при выращивании буфера по мере необходимости (как push_bytes
делает).
Возможность установки распределителя не является обязательной, но предпочтительнее иметь.
Кто-нибудь знает что-нибудь близкое к тому, что я хочу?
Или, по крайней мере, любые реализации, на которые стоит обратить внимание при реализации моих собственных?
мы говорим о С, вечным оазисом колеса- (ре) -inventors; если используемая вами структура не обеспечивает функциональность, сверните свою собственную реализацию. – Christoph
Я обновил свой ответ. Какую реализацию с открытым исходным кодом следует рассмотреть при написании собственного растущего буфера? :-) –
Можете ли вы пояснить, что вы подразумеваете под «загрязнением вашего кода макросами»? Все портативные устройства будут работать вокруг тонких различий между malloc(), realloc() и memcpy() в зависимости от платформы, особенно если она обеспечивает обратный вызов для ведения журнала. Вы сами заметили, что хотите указать распределитель. –