41#define TLV_TAGLEN_SIZE (sizeof(tlv_tag_t) + sizeof(tlv_len_t))
64 assert(self && mem && (cap > 0u));
75 const uint8_t len,
void *val)
93 assert(self && entry);
95 header_size =
sizeof(entry->
tag) +
sizeof(entry->
len);
96 entry_size = header_size + entry->
len;
97 new_tail_idx = self->_tail_idx + entry_size;
99 if (new_tail_idx < self->_cap) {
100 self->_mem[self->_tail_idx] = entry->
tag;
101 self->_tail_idx +=
sizeof(entry->
tag);
103 self->_mem[self->_tail_idx] = entry->
len;
104 self->_tail_idx +=
sizeof(entry->
len);
106 (void)memcpy(&self->_mem[self->_tail_idx], entry->
val,
108 self->_tail_idx = new_tail_idx;
123 assert(self && entry);
125 header_size =
sizeof(entry->
tag) +
sizeof(entry->
len);
128 if ((self->_head_idx + header_size) <= self->_tail_idx) {
129 entry->
tag = self->_mem[self->_head_idx];
130 self->_head_idx +=
sizeof(entry->
tag);
132 entry->
len = self->_mem[self->_head_idx];
133 self->_head_idx +=
sizeof(entry->
len);
135 entry->
val = &self->_mem[self->_head_idx];
136 self->_head_idx += entry->
len;
148 self->_head_idx = 0u;
155 self->_head_idx = 0u;
156 self->_tail_idx = 0u;
164 return self->_tail_idx;
172 return self->_cap - self->_tail_idx;
tlv_tag_t tag
Definition tlv.h:46
tlv_len_t len
Definition tlv.h:47
void * val
Definition tlv.h:48
static size_t tlv_buf_get_free_mem_size(struct tlv_buf *self)
Definition tlv.h:168
static bool tlv_buf_push(struct tlv_buf *self, struct tlv_entry *entry)
Definition tlv.h:86
static void tlv_buf_init(struct tlv_buf *self, uint8_t *mem, const size_t cap)
Definition tlv.h:62
static void tlv_buf_reset(struct tlv_buf *self)
Definition tlv.h:152
static void tlv_buf_reset_head(struct tlv_buf *self)
Definition tlv.h:145
static bool tlv_buf_pop(struct tlv_buf *self, struct tlv_entry *entry)
Definition tlv.h:118
static void tlv_entry_init(struct tlv_entry *self, const uint8_t tag, const uint8_t len, void *val)
Definition tlv.h:74
static size_t tlv_buf_get_occupied_mem_size(struct tlv_buf *self)
Definition tlv.h:160
uint8_t tlv_len_t
Definition tlv.h:38
uint8_t tlv_tag_t
Definition tlv.h:37