2022-06-02 15:52:43 +03:00
|
|
|
/* This software is licensed by the MIT License, see LICENSE file */
|
|
|
|
/* Copyright © 2022 Gregory Lirent */
|
|
|
|
|
|
|
|
#include "../../include/array.h"
|
|
|
|
#include "../__internal/include.h"
|
|
|
|
|
|
|
|
#ifndef LIBCDSB_SRC_ARRAY_INCLUDE_H
|
|
|
|
#define LIBCDSB_SRC_ARRAY_INCLUDE_H
|
|
|
|
|
2022-08-22 11:59:09 +03:00
|
|
|
ainline(void copy_init(void* x, const void* s, vtype t)) {
|
|
|
|
switch (t) {
|
2022-08-19 13:41:19 +03:00
|
|
|
default:
|
|
|
|
#ifndef NDEBUG
|
|
|
|
abort();
|
|
|
|
#endif
|
2022-08-22 11:59:09 +03:00
|
|
|
case VTYPE_STRING: string_copy_init(x, s); break;
|
|
|
|
case VTYPE_ARRAY: array_copy_init(x, s); break;
|
|
|
|
case VTYPE_LIST: list_copy_init(x, s); break;
|
|
|
|
case VTYPE_MAP: map_copy_init(x, s); break;
|
|
|
|
case VTYPE_SET: vset_copy_init(x, s); break;
|
|
|
|
case VTYPE_DICT: dict_copy_init(x, s); break;
|
2022-08-19 13:41:19 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-06-02 15:52:43 +03:00
|
|
|
ainline(void array_cut(arr_t* x, size_t i, size_t n)) {
|
|
|
|
void* v = x->mem + i*vtype_size(x->type);
|
|
|
|
void* e = v + n*vtype_size(x->type);
|
|
|
|
|
|
|
|
memmove(v, e, (x->size-(i+n))*vtype_size(x->type));
|
|
|
|
x->size -= n;
|
|
|
|
}
|
|
|
|
|
|
|
|
ainline(void* array_end(const arr_t* x)) {
|
|
|
|
return x->mem + x->size*vtype_size(x->type);
|
|
|
|
}
|
|
|
|
|
2022-06-03 11:58:02 +03:00
|
|
|
ainline(void* array_internal_at(const arr_t* x, size_t i)) {
|
2022-06-02 15:52:43 +03:00
|
|
|
return x->mem + i*vtype_size(x->type);
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* LIBCDSB_SRC_ARRAY_INCLUDE_H */
|