adjust values api to vector-esque interface

Signed-off-by: Folling <mail@folling.io>
This commit is contained in:
folling 2023-12-03 10:16:13 +01:00 committed by Folling
parent 733b52575b
commit 3395eba331
Signed by: folling
SSH key fingerprint: SHA256:S9qEx5WCFFLK49tE/LKnKuJYM5sw+++Dn6qJbbyxnCY
13 changed files with 297 additions and 220 deletions

35
src/values/value_base.hpp Normal file
View file

@ -0,0 +1,35 @@
#pragma once
template<typename V>
typename V::data_type const * ikarus_value_base_get(V * value, size_t idx) {
if (value->is_indeterminate()) {
return nullptr;
}
return &value->value[idx];
}
template<typename V>
size_t ikarus_value_base_get_size(V const * value) {
return value->value.size();
}
template<typename V>
void ikarus_value_base_set(V * value, size_t idx, typename V::data_type new_data) {
value->value[idx] = new_data;
}
template<typename V>
void ikarus_value_base_remove(V * value, size_t idx) {
value->value.erase(value->value.begin() + idx);
}
template<typename V>
void ikarus_value_base_insert(V * value, size_t idx, typename V::data_type new_data) {
value->value.insert(value->value.begin() + idx, new_data);
}
template<typename V>
struct IkarusValue * ikarus_value_base_to_value(V * value) {
return static_cast<IkarusValue *>(value);
}