39 #ifndef picox_container_xbyte_array_h_ 40 #define picox_container_xbyte_array_h_ 93 memset(
self, 0,
sizeof(*
self));
99 self->m_is_heapdata =
true;
101 self->m_data = buffer;
102 self->m_capacity = size;
114 if (self->m_is_heapdata)
117 self->m_is_heapdata =
false;
121 self->m_capacity = 0;
127 static inline const uint8_t*
137 static inline uint8_t*
146 static inline const uint8_t*
150 X_ASSERT(self->m_size > index);
151 return self->m_data + index;
157 static inline uint8_t*
180 return self->m_capacity;
190 return !
self->m_size;
200 return self->m_size ==
self->m_capacity;
210 return self->m_capacity -
self->m_size;
230 memset(self->m_data, value, self->m_size);
251 if (self->m_capacity >= size)
254 if (! self->m_is_heapdata)
257 uint8_t*
const buf = (uint8_t*)
x_realloc2(self->m_data,
264 self->m_capacity = size;
281 const size_t space =
self->m_capacity -
self->m_size;
285 const size_t new_capcity = size > space +
self->m_capacity ?
287 self->m_capacity * 2;
312 memcpy(self->m_data + self->m_size, src, size);
313 self->m_size += size;
325 *(
self->m_data +
self->m_size) = value;
339 X_ASSERT(self->m_size >= size);
341 self->m_size -= size;
343 memcpy(dst, self->m_data + self->m_size, size);
349 static inline uint8_t
354 const uint8_t value = *(
self->m_data +
self->m_size);
371 uint8_t*
const buf = (uint8_t*)
x_realloc2(self->m_data,
378 self->m_capacity =
self->m_size;
391 if (index == self->m_size)
398 X_ASSERT(index <= self->m_size);
401 memmove(self->m_data + index + size,
402 self->m_data + index,
403 self->m_size - index);
404 memcpy(self->m_data + index, src, size);
405 self->m_size += size;
424 X_ASSERT(index <= self->m_size);
426 memmove(self->m_data + index,
427 self->m_data + index + size,
428 self->m_size - (index + size));
429 self->m_size -= size;
static void xbarray_insert(XByteArray *self, size_t index, uint8_t value)
バッファ先頭からn番目にvalueを挿入します
Definition: xbyte_array.h:412
static void * x_realloc2(void *old_mem, size_t old_size, size_t new_size)
old_memが指すold_sizeバイトのメモリブロックをnew_sizeバイトに再割当てして返します ...
Definition: xstdlib.h:138
static uint8_t * xbarray_data(XByteArray *self)
バッファ先頭を指すポインタを返します
Definition: xbyte_array.h:138
static bool xbarray_full(const XByteArray *self)
バッファが拡張なしで格納できる上限に達しているかどうかを返します
Definition: xbyte_array.h:197
static void xbarray_fill(XByteArray *self, uint8_t value)
バッファをvalueで埋めます
Definition: xbyte_array.h:227
static bool xbarray_shrink_to_fit(XByteArray *self)
バッファの容量を有効バイト数まで切り詰めます
Definition: xbyte_array.h:367
static const uint8_t * xbarray_const_at(const XByteArray *self, size_t index)
バッファ先頭からnバイト後方を指すコンストポインタを返します
Definition: xbyte_array.h:147
static size_t xbarray_size(const XByteArray *self)
バッファに格納されたバイト数を返します
Definition: xbyte_array.h:167
static void xbarray_strict_make_space_if(XByteArray *self, size_t size)
X_ASSERT()による検査を行うxbarray_make_space_if()です
Definition: xbyte_array.h:295
可変長バイト配列管理構造体
Definition: xbyte_array.h:68
static void xbarray_erase(XByteArray *self, size_t index)
バッファ先頭からn番目を除去します
Definition: xbyte_array.h:436
static bool xbarray_init(XByteArray *self, void *buffer, size_t size)
バッファを初期化します
Definition: xbyte_array.h:89
static size_t xbarray_capacity(const XByteArray *self)
バッファに割り当てられたバイト数を返します
Definition: xbyte_array.h:177
static uint8_t xbarray_pop_back(XByteArray *self)
バッファ末尾から1バイトを除去して返します
Definition: xbyte_array.h:350
static void xbarray_insert_n(XByteArray *self, size_t index, const void *src, size_t size)
バッファ先頭からn番目にsrcからsizeバイトを挿入します
Definition: xbyte_array.h:387
static void x_free(void *ptr)
ptrが指すメモリ空間を開放します
Definition: xstdlib.h:73
#define X_UNUSED(x)
コンパイラによる未使用変数の警告を抑制するマクロです。
Definition: xutils.h:161
static bool xbarray_reserve(XByteArray *self, size_t size)
バッファにsizeバイト以上の容量を確保します
Definition: xbyte_array.h:248
static void xbarray_push_back(XByteArray *self, uint8_t value)
バッファ末尾にvalueを追加します
Definition: xbyte_array.h:320
static void * x_malloc(size_t size)
sizeバイトのメモリを割り当てて返します
Definition: xstdlib.h:59
static void xbarray_erase_n(XByteArray *self, size_t index, size_t size)
バッファ先頭からn番目 ~ n + sizeの範囲を除去します
Definition: xbyte_array.h:421
static void xbarray_clear(XByteArray *self)
バッファの要素数を0にします
Definition: xbyte_array.h:217
static bool xbarray_empty(const XByteArray *self)
バッファが空かどうかを返します
Definition: xbyte_array.h:187
static const uint8_t * xbarray_const_data(const XByteArray *self)
バッファ先頭を指すコンストポインタを返します
Definition: xbyte_array.h:128
static void xbarray_deinit(XByteArray *self)
バッファを破棄します
Definition: xbyte_array.h:111
static void xbarray_push_back_n(XByteArray *self, const void *src, size_t size)
バッファ末尾にsrcからsizeバイトを追加します
Definition: xbyte_array.h:306
static size_t xbarray_space(const XByteArray *self)
バッファが拡張なしで格納できる空きバイト数を返します
Definition: xbyte_array.h:207
static uint8_t * xbarray_at(XByteArray *self, size_t index)
バッファ先頭からnバイト後方を指すポインタを返します
Definition: xbyte_array.h:158
static void xbarray_pop_back_n(XByteArray *self, void *dst, size_t size)
バッファ末尾からsizeバイトを除去します
Definition: xbyte_array.h:335
static bool xbarray_make_space_if(XByteArray *self, size_t size)
sizeバイトを格納する空き容量がない場合、バッファを拡張します
Definition: xbyte_array.h:279