![]() |
Container for byte arrays.
An as_bytes should be initialized via one of the provided function.
The as_bytes_inita(), as_bytes_init() and as_bytes_new() are used to initialize empty internal buffers of a specified size.
To initialize a stack allocated as_string, use as_bytes_init():
The above initialized the variable, and allocated 20 bytes to the buffer using cf_malloc()
.
To use only stack allocated buffer for as_bytes, ten you should use as_bytes_inita():
You will see the APIs of the two are very similar. The key difference is as_bytes_inita() is a macro, which performs stack allocation inline.
If you need a heap allocated as_bytes instance, then you should use as_bytes_new():
If you already have a byte array allocated and want to simply wrap it in an as_bytes, then use either:
The as_bytes_init_wrap() function is used to initialize a stack allocated as_bytes, then set the internal buffer to the byte array provided.
The as_bytes_new_wrap() function is used to create an initialize a new heap allocated as_bytes, then it will set the internal buffer to the byte array provided.
When the as_bytes instance is no longer required, then you should release the resources associated with it via as_bytes_destroy():
as_bytes has a number of functions for reading and writing data to its internal buffer.
For reading at specified index:
Function | Description |
---|---|
as_bytes_get() | Copy the bytes in the buffer to another buffer. |
as_bytes_get_byte() | Read a byte from the buffer |
as_bytes_get_int16() | Read a 16-bit integer from the buffer |
as_bytes_get_int32() | Read a 32-bit integer from the buffer |
as_bytes_get_int64() | Read a 64-bit integer from the buffer |
For writing at specified index:
Function | Description |
---|---|
as_bytes_set() | Copy a byte array into the buffer. |
as_bytes_set_byte() | Write a byte from the buffer |
as_bytes_set_int16() | Write a 16-bit integer from the buffer |
as_bytes_set_int32() | Write a 32-bit integer from the buffer |
as_bytes_set_int64() | Write a 64-bit integer from the buffer |
For writing at to the end of the buffer:
Function | Description |
---|---|
as_bytes_append() | Copy a byte array into the buffer. |
as_bytes_append_byte() | Write a byte from the buffer |
as_bytes_append_int16() | Write a 16-bit integer from the buffer |
as_bytes_append_int32() | Write a 32-bit integer from the buffer |
as_bytes_append_int64() | Write a 64-bit integer from the buffer |
as_bytes is derived from as_val, so it is generally safe to down cast:
However, upcasting is more error prone. When doing so, you should use as_bytes_fromval(). If conversion fails, then the return value is NULL.
Definition at line 250 of file as_bytes.h.
#include "as_bytes.h"
Data Fields | |
uint32_t | capacity |
bool | free |
uint32_t | size |
as_bytes_type | type |
uint8_t * | value |
![]() | |
uint32_t | count |
bool | free |
as_val_t | type |
Related Symbols | |
(Note that these are not member symbols.) | |
AS_EXTERN bool | as_bytes_append (as_bytes *bytes, const uint8_t *value, uint32_t size) |
static bool | as_bytes_append_byte (as_bytes *bytes, uint8_t value) |
static bool | as_bytes_append_double (as_bytes *bytes, double value) |
static bool | as_bytes_append_int16 (as_bytes *bytes, int16_t value) |
static bool | as_bytes_append_int32 (as_bytes *bytes, int32_t value) |
static bool | as_bytes_append_int64 (as_bytes *bytes, int64_t value) |
static uint32_t | as_bytes_capacity (const as_bytes *bytes) |
AS_EXTERN uint32_t | as_bytes_copy (const as_bytes *bytes, uint32_t index, uint8_t *value, uint32_t size) |
static void | as_bytes_destroy (as_bytes *bytes) |
AS_EXTERN bool | as_bytes_ensure (as_bytes *bytes, uint32_t capacity, bool resize) |
static as_bytes * | as_bytes_fromval (const as_val *v) |
static uint8_t * | as_bytes_get (const as_bytes *bytes) |
static uint32_t | as_bytes_get_byte (const as_bytes *bytes, uint32_t index, uint8_t *value) |
static uint32_t | as_bytes_get_double (const as_bytes *bytes, uint32_t index, double *value) |
static uint32_t | as_bytes_get_int16 (const as_bytes *bytes, uint32_t index, int16_t *value) |
static uint32_t | as_bytes_get_int32 (const as_bytes *bytes, uint32_t index, int32_t *value) |
static uint32_t | as_bytes_get_int64 (const as_bytes *bytes, uint32_t index, int64_t *value) |
static as_bytes_type | as_bytes_get_type (const as_bytes *bytes) |
AS_EXTERN uint32_t | as_bytes_get_var_int (const as_bytes *bytes, uint32_t index, uint32_t *value) |
static uint8_t * | as_bytes_getorelse (const as_bytes *bytes, uint8_t *fallback) |
AS_EXTERN as_bytes * | as_bytes_init (as_bytes *bytes, uint32_t capacity) |
AS_EXTERN as_bytes * | as_bytes_init_wrap (as_bytes *bytes, uint8_t *value, uint32_t size, bool free) |
AS_EXTERN as_bytes * | as_bytes_new (uint32_t capacity) |
AS_EXTERN as_bytes * | as_bytes_new_wrap (uint8_t *value, uint32_t size, bool free) |
AS_EXTERN bool | as_bytes_set (as_bytes *bytes, uint32_t index, const uint8_t *value, uint32_t size) |
static bool | as_bytes_set_byte (as_bytes *bytes, uint32_t index, uint8_t value) |
static bool | as_bytes_set_double (as_bytes *bytes, uint32_t index, double value) |
static bool | as_bytes_set_int16 (as_bytes *bytes, uint32_t index, int16_t value) |
static bool | as_bytes_set_int32 (as_bytes *bytes, uint32_t index, int32_t value) |
static bool | as_bytes_set_int64 (as_bytes *bytes, uint32_t index, int64_t value) |
static void | as_bytes_set_type (as_bytes *bytes, as_bytes_type type) |
AS_EXTERN uint32_t | as_bytes_set_var_int (const as_bytes *bytes, uint32_t index, uint32_t value) |
static uint32_t | as_bytes_size (const as_bytes *bytes) |
static uint8_t * | as_bytes_tobytes (const as_bytes *bytes, uint32_t *size) |
static as_val * | as_bytes_toval (const as_bytes *b) |
AS_EXTERN bool | as_bytes_truncate (as_bytes *bytes, uint32_t n) |
Append raw bytes of given size.
bytes | The bytes to append to. |
value | The buffer to read from. |
size | The number of bytes to read from the value. |
|
related |
Append a uint8_t (byte).
Definition at line 817 of file as_bytes.h.
References as_bytes_append().
|
related |
Append a double value.
Definition at line 881 of file as_bytes.h.
References as_bytes_append().
|
related |
Append an int16_t value.
Definition at line 833 of file as_bytes.h.
References as_bytes_append().
|
related |
Append an int32_t value.
Definition at line 849 of file as_bytes.h.
References as_bytes_append().
|
related |
Append an int64_t value.
Definition at line 865 of file as_bytes.h.
References as_bytes_append().
|
related |
Get the number of bytes allocated.
bytes | The bytes to get the capacity of. |
Definition at line 434 of file as_bytes.h.
References capacity.
|
related |
Copy into value up to size bytes from the given as_bytes
, returning the number of bytes copied.
bytes | The bytes to read from. |
index | The positing in bytes to read from. |
value | The byte buffer to copy into. |
size | The number of bytes to copy into the buffer. |
|
related |
Destroy the as_bytes
and release associated resources.
bytes | The bytes to destroy. |
Definition at line 401 of file as_bytes.h.
References as_val_destroy.
Ensure the bytes buffer can handle capacity
bytes.
If resize
is true and capacity
exceeds the capacity of the bytes's buffer, then resize the capacity of the buffer to capacity
bytes. If the buffer was heap allocated, then cf_realloc()
will be used to resize. If the buffer was stack allocated, it will be converted to a heap allocated buffer using cf_malloc() and then its contents will be copied into the new heap allocated buffer.
If resize
is false, and if the capacity is not sufficient, then return false.
bytes | The bytes to ensure the capacity of. |
capacity | The total number of bytes to ensure bytes can handle. |
resize | If true and capacity is not sufficient, then resize the buffer. |
Convert from an as_val.
Definition at line 977 of file as_bytes.h.
References AS_BYTES, and as_util_fromval.
|
related |
Get the raw value of this instance.
bytes | The bytes to get the raw value from. |
Definition at line 503 of file as_bytes.h.
References as_bytes_getorelse().
|
related |
Read a single byte from the given bytes.
Definition at line 555 of file as_bytes.h.
References as_bytes_copy().
|
related |
Read a double from the given bytes.
Definition at line 639 of file as_bytes.h.
References as_bytes_copy().
|
related |
Read an int16_t from the given bytes.
Definition at line 576 of file as_bytes.h.
References as_bytes_copy().
|
related |
Read an int32_t from the given bytes.
Definition at line 597 of file as_bytes.h.
References as_bytes_copy().
|
related |
Read an int64_t from the given bytes.
Definition at line 618 of file as_bytes.h.
References as_bytes_copy().
|
related |
Get the type of bytes.
bytes | The bytes to get the type of. |
Definition at line 449 of file as_bytes.h.
References AS_BYTES_UNDEF, and type.
|
related |
Decode an integer in variable 7-bit format. The high bit indicates if more bytes are used.
|
related |
Get the raw value of this instance. If the instance is NULL, then return the fallback value.
bytes | The bytes to get the raw value from. |
fallback | The value to return if bytes is NULL. |
Definition at line 485 of file as_bytes.h.
References value.
Initializes a stack allocated as_bytes
. Allocates an internal buffer on the heap of specified capacity using cf_malloc()
.
bytes | The bytes to initialize. |
capacity | The number of bytes to allocate on the heap. |
|
related |
Initializes a stack allocated as_bytes
, wrapping the given buffer.
bytes | The bytes to initialize. |
value | The initial value. |
size | The number of bytes of the initial value. |
free | If true, then as_bytes_destroy() will free the value. |
Create and initialize a new heap allocated as_bytes
. Allocates an internal buffer on the heap of specified capacity using cf_malloc()
.
capacity | The number of bytes to allocate. |
Creates a new heap allocated as_bytes
, wrapping the given buffer.
value | The initial value. |
size | The number of bytes of the initial value. |
free | If true, then as_bytes_destroy() will free the value. |
|
related |
Copy raw bytes of given size into the given as_bytes
starting at specified index.
bytes | The bytes to write to. |
index | The position to write to. |
value | The buffer to read from. |
size | The number of bytes to read from the value. |
|
related |
Set a byte at given index.
Definition at line 696 of file as_bytes.h.
References as_bytes_set().
|
related |
Set double at given index.
Definition at line 760 of file as_bytes.h.
References as_bytes_set().
|
related |
Set 16 bit integer at given index.
Definition at line 712 of file as_bytes.h.
References as_bytes_set().
|
related |
Set 32 bit integer at given index.
Definition at line 728 of file as_bytes.h.
References as_bytes_set().
|
related |
Set 64 bit integer at given index.
Definition at line 744 of file as_bytes.h.
References as_bytes_set().
|
related |
Set the type of bytes.
bytes | The bytes to set the type of. |
type | The type for the bytes. |
Definition at line 463 of file as_bytes.h.
|
related |
Encode an integer in 7-bit format. The high bit indicates if more bytes are used.
The bytes
must be sufficiently sized for the data being written. To ensure the bytes
is allocated sufficiently, you will need to call as_bytes_ensure()
.
|
related |
Get the number of bytes used.
bytes | The bytes to get the size of. |
Definition at line 419 of file as_bytes.h.
References size.
|
related |
Get the bytes value.
Definition at line 947 of file as_bytes.h.
Convert to an as_val.
Definition at line 967 of file as_bytes.h.
Truncate the bytes' buffer. The size specifies the number of bytes to remove from the end of the buffer.
This means, if the buffer has size of 100, and we truncate 10, then the remaining size is 90.
Truncation does not modify the capacity of the buffer.
bytes | The bytes to truncate. |
n | The number of bytes to remove from the end. |
uint32_t as_bytes::capacity |
The number of bytes allocated to as_bytes.value
.
Definition at line 262 of file as_bytes.h.
bool as_bytes::free |
If true, then as_bytes.value
will be freed when as_bytes_destroy() is called.
Definition at line 278 of file as_bytes.h.
uint32_t as_bytes::size |
The number of bytes used by as_bytes.value
.
Definition at line 267 of file as_bytes.h.
as_bytes_type as_bytes::type |
The type of bytes.
Definition at line 283 of file as_bytes.h.
uint8_t* as_bytes::value |
A sequence of bytes.
Definition at line 272 of file as_bytes.h.