R_API void *r_vector_assign_at(RVector *vec, size_t index, void *elem) { void *p = r_vector_index_ptr (vec, index); if (elem) { r_vector_assign (vec, p, elem); } return p; }
R_API void *r_vector_push(RVector *vec, void *x) { if (vec->len >= vec->capacity) { RESIZE_OR_RETURN_NULL (NEXT_VECTOR_CAPACITY); } void *p = r_vector_index_ptr (vec, vec->len++); if (x) { r_vector_assign (vec, p, x); } return p; }
R_API void r_vector_remove_at(RVector *vec, size_t index, void *into) { void *p = r_vector_index_ptr (vec, index); if (into) { r_vector_assign (vec, into, p); } vec->len--; if (index < vec->len) { memmove (p, (char *)p + vec->elem_size, vec->elem_size * (vec->len - index)); } }
R_API void *r_vector_insert(RVector *vec, size_t index, void *x) { if (vec->len >= vec->capacity) { RESIZE_OR_RETURN_NULL (NEXT_VECTOR_CAPACITY); } void *p = r_vector_index_ptr (vec, index); if (index < vec->len) { memmove ((char *)p + vec->elem_size, p, vec->elem_size * (vec->len - index)); } vec->len++; if (x) { r_vector_assign (vec, p, x); } return p; }
R_API void r_vector_pop(RVector *vec, void *into) { if (into) { r_vector_assign (vec, into, r_vector_index_ptr (vec, vec->len - 1)); } vec->len--; }