![]() |
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 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 239 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 |
![]() | |
cf_atomic32 | count |
bool | free |
enum as_val_t | type |
Private Attributes | |
as_val | _ |
Related Functions | |
(Note that these are not member functions.) | |
bool | as_bytes_append (as_bytes *bytes, const uint8_t *value, uint32_t size) |
bool | as_bytes_append_byte (as_bytes *bytes, uint8_t value) |
bool | as_bytes_append_int16 (as_bytes *bytes, int16_t value) |
bool | as_bytes_append_int32 (as_bytes *bytes, int32_t value) |
bool | as_bytes_append_int64 (as_bytes *bytes, int64_t value) |
uint32_t | as_bytes_capacity (const as_bytes *bytes) |
uint32_t | as_bytes_copy (const as_bytes *bytes, uint32_t index, uint8_t *value, uint32_t size) |
void | as_bytes_destroy (as_bytes *bytes) |
bool | as_bytes_ensure (as_bytes *bytes, uint32_t n, bool resize) |
as_bytes * | as_bytes_fromval (const as_val *v) |
uint8_t * | as_bytes_get (const as_bytes *bytes) |
uint32_t | as_bytes_get_byte (const as_bytes *bytes, uint32_t index, uint8_t *value) |
uint32_t | as_bytes_get_int16 (const as_bytes *bytes, uint32_t index, int16_t *value) |
uint32_t | as_bytes_get_int32 (const as_bytes *bytes, uint32_t index, int32_t *value) |
uint32_t | as_bytes_get_int64 (const as_bytes *bytes, uint32_t index, int64_t *value) |
as_bytes_type | as_bytes_get_type (const as_bytes *bytes) |
uint8_t * | as_bytes_getorelse (const as_bytes *bytes, uint8_t *fallback) |
as_bytes * | as_bytes_init (as_bytes *bytes, uint32_t capacity) |
as_bytes * | as_bytes_init_wrap (as_bytes *bytes, uint8_t *value, uint32_t size, bool free) |
as_bytes * | as_bytes_new (uint32_t capacity) |
as_bytes * | as_bytes_new_wrap (uint8_t *value, uint32_t size, bool free) |
bool | as_bytes_set (as_bytes *bytes, uint32_t index, const uint8_t *value, uint32_t size) |
bool | as_bytes_set_byte (as_bytes *bytes, uint32_t index, uint8_t value) |
bool | as_bytes_set_int16 (as_bytes *bytes, uint32_t index, int16_t value) |
bool | as_bytes_set_int32 (as_bytes *bytes, uint32_t index, int32_t value) |
bool | as_bytes_set_int64 (as_bytes *bytes, uint32_t index, int64_t value) |
void | as_bytes_set_type (as_bytes *bytes, as_bytes_type type) |
uint32_t | as_bytes_size (const as_bytes *bytes) |
uint8_t * | as_bytes_tobytes (const as_bytes *bytes, uint32_t *size) |
as_val * | as_bytes_toval (const as_bytes *b) |
bool | as_bytes_truncate (as_bytes *bytes, uint32_t n) |
|
related |
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 734 of file as_bytes.h.
|
related |
Append an int16_t value.
Definition at line 750 of file as_bytes.h.
|
related |
Append an int32_t value.
Definition at line 766 of file as_bytes.h.
|
related |
Append an int64_t value.
Definition at line 782 of file as_bytes.h.
|
related |
Get the number of bytes allocated.
bytes | The bytes to get the capacity of. |
Definition at line 423 of file as_bytes.h.
|
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 390 of file as_bytes.h.
|
related |
Ensure the bytes buffer can handle n
additional bytes.
Using the current size, we see if size + n
is within the capacity of the bytes' buffer. If so, then return true.
If resize
is true and size + n
exceeds the capacity of the bytes's buffer, then resize the capacity of the buffer by n
bytes. If the buffer was heap allocated, then realloc()
will be used to resize. If the buffer was stack allocated, it will be converted to a heap allocated buffer using 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. |
n | The number of additional 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 881 of file as_bytes.h.
|
related |
Get the raw value of this instance.
bytes | The bytes to get the raw value from. |
Definition at line 492 of file as_bytes.h.
|
related |
Read a single byte from the given bytes.
Definition at line 544 of file as_bytes.h.
|
related |
Read an int16_t from the given bytes.
Definition at line 565 of file as_bytes.h.
|
related |
Read an int32_t from the given bytes.
Definition at line 586 of file as_bytes.h.
|
related |
Read an int64_t from the given bytes.
Definition at line 607 of file as_bytes.h.
|
related |
Get the type of bytes.
bytes | The bytes to get the type of. |
Definition at line 438 of file as_bytes.h.
|
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 474 of file as_bytes.h.
Initializes a stack allocated as_bytes
. Allocates an internal buffer on the heap of specified capacity using 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. |
|
related |
Create and initialize a new heap allocated as_bytes
. Allocates an internal buffer on the heap of specified capacity using malloc()
.
capacity | The number of bytes to allocate. |
|
related |
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 646 of file as_bytes.h.
|
related |
Set a byte at given index.
Definition at line 662 of file as_bytes.h.
|
related |
Set a byte at given index.
Definition at line 678 of file as_bytes.h.
|
related |
Set a byte at given index.
Definition at line 694 of file as_bytes.h.
|
related |
Set the type of bytes.
bytes | The bytes to set the type of. |
type | The type for the bytes. |
Definition at line 452 of file as_bytes.h.
|
related |
Get the number of bytes used.
bytes | The bytes to get the size of. |
Definition at line 408 of file as_bytes.h.
|
related |
Get the bytes value.
Definition at line 851 of file as_bytes.h.
Convert to an as_val.
Definition at line 871 of file as_bytes.h.
|
related |
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. |
|
private |
as_boolean is a subtype of as_val. You can cast as_boolean to as_val.
Definition at line 246 of file as_bytes.h.
uint32_t as_bytes::capacity |
The number of bytes allocated to as_bytes.value
.
Definition at line 251 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 267 of file as_bytes.h.
uint32_t as_bytes::size |
The number of bytes used by as_bytes.value
.
Definition at line 256 of file as_bytes.h.
as_bytes_type as_bytes::type |
The type of bytes.
Definition at line 272 of file as_bytes.h.
uint8_t* as_bytes::value |
A sequence of bytes.
Definition at line 261 of file as_bytes.h.