Skip to content

Commit

Permalink
fix: add offset to svec init
Browse files Browse the repository at this point in the history
  • Loading branch information
jean-roland committed Nov 8, 2024
1 parent c78d437 commit 9199c2d
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 38 deletions.
70 changes: 35 additions & 35 deletions include/zenoh-pico/collections/vec.h
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ static inline _z_svec_t _z_svec_alias(const _z_svec_t *src) { return *src; }
static inline _z_svec_t _z_svec_alias_element(void *element) {
return (_z_svec_t){._capacity = 1, ._len = 1, ._val = element};
}
void _z_svec_init(_z_svec_t *dst, size_t element_size);
void _z_svec_init(_z_svec_t *v, size_t offset, size_t element_size);
_z_svec_t _z_svec_make(size_t capacity, size_t element_size);
z_result_t _z_svec_copy(_z_svec_t *dst, const _z_svec_t *src, z_element_copy_f copy, size_t element_size,
bool use_elem_f);
Expand All @@ -106,40 +106,40 @@ void _z_svec_clear(_z_svec_t *v, z_element_clear_f f, size_t element_size);
void _z_svec_free(_z_svec_t **v, z_element_clear_f f, size_t element_size);
void _z_svec_release(_z_svec_t *v);

#define _Z_SVEC_DEFINE(name, type, use_elem_f) \
typedef _z_svec_t name##_svec_t; \
static inline name##_svec_t name##_svec_null(void) { return _z_svec_null(); } \
static inline name##_svec_t name##_svec_make(size_t capacity) { return _z_svec_make(capacity, sizeof(type)); } \
static inline void name##_svec_init(name##_svec_t *v) { _z_svec_init(v, sizeof(type)); } \
static inline size_t name##_svec_len(const name##_svec_t *v) { return _z_svec_len(v); } \
static inline bool name##_svec_is_empty(const name##_svec_t *v) { return _z_svec_is_empty(v); } \
static inline z_result_t name##_svec_expand(name##_svec_t *v) { \
return _z_svec_expand(v, name##_elem_move, sizeof(type), use_elem_f); \
} \
static inline z_result_t name##_svec_append(name##_svec_t *v, const type *e) { \
return _z_svec_append(v, e, name##_elem_move, sizeof(type), use_elem_f); \
} \
static inline type *name##_svec_get(const name##_svec_t *v, size_t pos) { \
return (type *)_z_svec_get(v, pos, sizeof(type)); \
} \
static inline type *name##_svec_get_mut(name##_svec_t *v, size_t pos) { \
return (type *)_z_svec_get_mut(v, pos, sizeof(type)); \
} \
static inline void name##_svec_set(name##_svec_t *v, size_t pos, type *e) { \
_z_svec_set(v, pos, e, name##_elem_clear, sizeof(type)); \
} \
static inline void name##_svec_remove(name##_svec_t *v, size_t pos) { \
_z_svec_remove(v, pos, name##_elem_clear, name##_elem_move, sizeof(type), use_elem_f); \
} \
static inline z_result_t name##_svec_copy(name##_svec_t *dst, const name##_svec_t *src) { \
return _z_svec_copy(dst, src, name##_elem_copy, sizeof(type), use_elem_f); \
} \
static inline name##_svec_t name##_svec_alias(const name##_svec_t *v) { return _z_svec_alias(v); } \
static inline name##_svec_t name##_svec_alias_element(type *e) { return _z_svec_alias_element((void *)e); } \
static inline void name##_svec_move(name##_svec_t *dst, name##_svec_t *src) { _z_svec_move(dst, src); } \
static inline void name##_svec_reset(name##_svec_t *v) { _z_svec_reset(v, name##_elem_clear, sizeof(type)); } \
static inline void name##_svec_clear(name##_svec_t *v) { _z_svec_clear(v, name##_elem_clear, sizeof(type)); } \
static inline void name##_svec_release(name##_svec_t *v) { _z_svec_release(v); } \
#define _Z_SVEC_DEFINE(name, type, use_elem_f) \
typedef _z_svec_t name##_svec_t; \
static inline name##_svec_t name##_svec_null(void) { return _z_svec_null(); } \
static inline name##_svec_t name##_svec_make(size_t capacity) { return _z_svec_make(capacity, sizeof(type)); } \
static inline void name##_svec_init(name##_svec_t *v, size_t offset) { _z_svec_init(v, offset, sizeof(type)); } \
static inline size_t name##_svec_len(const name##_svec_t *v) { return _z_svec_len(v); } \
static inline bool name##_svec_is_empty(const name##_svec_t *v) { return _z_svec_is_empty(v); } \
static inline z_result_t name##_svec_expand(name##_svec_t *v) { \
return _z_svec_expand(v, name##_elem_move, sizeof(type), use_elem_f); \
} \
static inline z_result_t name##_svec_append(name##_svec_t *v, const type *e) { \
return _z_svec_append(v, e, name##_elem_move, sizeof(type), use_elem_f); \
} \
static inline type *name##_svec_get(const name##_svec_t *v, size_t pos) { \
return (type *)_z_svec_get(v, pos, sizeof(type)); \
} \
static inline type *name##_svec_get_mut(name##_svec_t *v, size_t pos) { \
return (type *)_z_svec_get_mut(v, pos, sizeof(type)); \
} \
static inline void name##_svec_set(name##_svec_t *v, size_t pos, type *e) { \
_z_svec_set(v, pos, e, name##_elem_clear, sizeof(type)); \
} \
static inline void name##_svec_remove(name##_svec_t *v, size_t pos) { \
_z_svec_remove(v, pos, name##_elem_clear, name##_elem_move, sizeof(type), use_elem_f); \
} \
static inline z_result_t name##_svec_copy(name##_svec_t *dst, const name##_svec_t *src) { \
return _z_svec_copy(dst, src, name##_elem_copy, sizeof(type), use_elem_f); \
} \
static inline name##_svec_t name##_svec_alias(const name##_svec_t *v) { return _z_svec_alias(v); } \
static inline name##_svec_t name##_svec_alias_element(type *e) { return _z_svec_alias_element((void *)e); } \
static inline void name##_svec_move(name##_svec_t *dst, name##_svec_t *src) { _z_svec_move(dst, src); } \
static inline void name##_svec_reset(name##_svec_t *v) { _z_svec_reset(v, name##_elem_clear, sizeof(type)); } \
static inline void name##_svec_clear(name##_svec_t *v) { _z_svec_clear(v, name##_elem_clear, sizeof(type)); } \
static inline void name##_svec_release(name##_svec_t *v) { _z_svec_release(v); } \
static inline void name##_svec_free(name##_svec_t **v) { _z_svec_free(v, name##_elem_clear, sizeof(type)); }

#endif /* ZENOH_PICO_COLLECTIONS_VECTOR_H */
6 changes: 5 additions & 1 deletion src/collections/vec.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,11 @@ _z_svec_t _z_svec_make(size_t capacity, size_t element_size) {
return v;
}

void _z_svec_init(_z_svec_t *dst, size_t element_size) { memset(dst->_val, 0, dst->_capacity * element_size); }
void _z_svec_init(_z_svec_t *v, size_t offset, size_t element_size) {
assert(offset <= v->_capacity);
void *start = _z_svec_get_mut(v, offset, element_size);
memset(start, 0, (v->_capacity - offset) * element_size);
}

static inline void __z_svec_move_inner(void *dst, void *src, z_element_move_f move, size_t num_elements,
size_t element_size, bool use_elem_f) {
Expand Down
4 changes: 2 additions & 2 deletions src/protocol/codec/transport.c
Original file line number Diff line number Diff line change
Expand Up @@ -359,13 +359,13 @@ z_result_t _z_frame_decode(_z_t_msg_frame_t *msg, _z_zbuf_t *zbf, uint8_t header
}
// Init message vector
msg_pool->_len = 0;
_z_network_message_svec_init(msg_pool);
_z_network_message_svec_init(msg_pool, 0);
size_t msg_idx = 0;
while (_z_zbuf_len(zbf) > 0) {
// Expand message vector if needed
if (msg_idx >= msg_pool->_capacity) {
_Z_RETURN_IF_ERR(_z_network_message_svec_expand(msg_pool));
_z_network_message_svec_init(msg_pool);
_z_network_message_svec_init(msg_pool, msg_pool->_len);
}
// Expand arc pool if needed
if (msg_idx >= arc_pool->_capacity) {
Expand Down

0 comments on commit 9199c2d

Please sign in to comment.