Type 4 – Arrays¶
CBOR arrays, just like byte strings and strings, can be encoded either as definite, or as indefinite.
Corresponding cbor_type |
CBOR_TYPE_ARRAY |
Number of allocations (definite) | Two plus any manipulations with the data |
Number of allocations (indefinite) | Two plus logarithmically many reallocations relative to additions |
Storage requirements (definite) | (sizeof(cbor_item_t) + 1) * size |
Storage requirements (indefinite) | <= sizeof(cbor_item_t) + sizeof(cbor_item_t) * size * BUFFER_GROWTH |
Examples¶
0x9f Start indefinite array
0x01 Unsigned integer 1
0xff "Break" control token
0x9f Start array, 1B length follows
0x20 Unsigned integer 32
... 32 items follow
Streaming indefinite arrays¶
Please refer to Streaming & indefinite items.
Getting metadata¶
-
size_t
cbor_array_size
(const cbor_item_t *item)¶ Get the number of members.
- Return
- The number of members
- Parameters
item[borrow]
-An array
-
size_t
cbor_array_allocated
(const cbor_item_t *item)¶ Get the size of the allocated storage.
- Return
- The size of the allocated storage (number of items)
- Parameters
item[borrow]
-An array
-
bool
cbor_array_is_definite
(const cbor_item_t *item)¶ Is the array definite?
- Return
- Is the array definite?
- Parameters
item[borrow]
-An array
-
bool
cbor_array_is_indefinite
(const cbor_item_t *item)¶ Is the array indefinite?
- Return
- Is the array indefinite?
- Parameters
item[borrow]
-An array
Reading data¶
-
cbor_item_t **
cbor_array_handle
(const cbor_item_t *item)¶ Get the array contents.
The items may be reordered and modified as long as references remain consistent.
- Return
- cbor_array_size items
- Parameters
item[borrow]
-An array
-
cbor_item_t *
cbor_array_get
(const cbor_item_t *item, size_t index)¶ Get item by index.
- Return
- incref The item, or
NULL
in case of boundary violation - Parameters
item[borrow]
-An array
index
-The index
Creating new items¶
-
cbor_item_t *
cbor_new_definite_array
(const size_t size)¶ Create new definite array.
- Return
- new array or
NULL
upon malloc failure - Parameters
size
-Number of slots to preallocate
-
cbor_item_t *
cbor_new_indefinite_array
()¶ Create new indefinite array.
- Return
- new array or
NULL
upon malloc failure
Modifying items¶
-
bool
cbor_array_push
(cbor_item_t *array, cbor_item_t *pushee)¶ Append to the end.
For indefinite items, storage may be realloacted. For definite items, only the preallocated capacity is available.
- Return
- true on success, false on failure
- Parameters
array[borrow]
-An array
pushee[incref]
-The item to push
-
bool
cbor_array_replace
(cbor_item_t *item, size_t index, cbor_item_t *value)¶ Replace item at an index.
The item being replace will be cbor_decref ‘ed.
- Return
- true on success, false on allocation failure.
- Parameters
item[borrow]
-An array
value[incref]
-The item to assign
index
-The index
-
bool
cbor_array_set
(cbor_item_t *item, size_t index, cbor_item_t *value)¶ Set item by index.
Creating arrays with holes is not possible
- Return
- true on success, false on allocation failure.
- Parameters
item[borrow]
-An array
value[incref]
-The item to assign
index
-The index