#ifndef FX_DS_BUFFER_H_ #define FX_DS_BUFFER_H_ #include #include FX_DECLS_BEGIN; #define FX_TYPE_BUFFER (fx_buffer_get_type()) FX_DECLARE_TYPE(fx_buffer); FX_TYPE_CLASS_DECLARATION_BEGIN(fx_buffer) FX_TYPE_CLASS_DECLARATION_END(fx_buffer) FX_API fx_type_id fx_buffer_get_type(void); FX_API fx_buffer *fx_buffer_create(size_t item_sz); FX_API fx_buffer *fx_buffer_create_from_bytes(const void *p, size_t len); FX_API fx_buffer *fx_buffer_create_from_array( const void *p, size_t item_sz, size_t len); FX_API void *fx_buffer_steal(fx_buffer *buf); FX_API fx_status fx_buffer_reserve(fx_buffer *buf, size_t capacity); FX_API fx_status fx_buffer_resize(fx_buffer *buf, size_t length); FX_API fx_status fx_buffer_append(fx_buffer *dest, const void *p, size_t count); FX_API fx_status fx_buffer_prepend(fx_buffer *dest, const void *p, size_t count); FX_API fx_status fx_buffer_insert(fx_buffer *dest, const void *p, size_t count, size_t at); FX_API fx_status fx_buffer_remove(fx_buffer *dest, size_t at, size_t count); FX_API fx_status fx_buffer_clear(fx_buffer *buf); FX_API fx_status fx_buffer_push_back(fx_buffer *buf, size_t count, void **p); FX_API fx_status fx_buffer_push_front(fx_buffer *buf, size_t count, void **p); FX_API fx_status fx_buffer_pop_back(fx_buffer *buf, size_t count); FX_API fx_status fx_buffer_pop_front(fx_buffer *buf, size_t count); FX_API size_t fx_buffer_get_size(const fx_buffer *buf); FX_API size_t fx_buffer_get_item_size(const fx_buffer *buf); FX_API size_t fx_buffer_get_capacity(const fx_buffer *buf); FX_API void *fx_buffer_ptr(const fx_buffer *buf); FX_API void *fx_buffer_get(const fx_buffer *buf, size_t at); FX_DECLS_END; #endif