adjust values api to vector-esque interface
Signed-off-by: Folling <mail@folling.io>
This commit is contained in:
parent
733b52575b
commit
3395eba331
13 changed files with 297 additions and 220 deletions
35
src/values/value_base.hpp
Normal file
35
src/values/value_base.hpp
Normal 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);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue