implement value.hpp
Signed-off-by: Folling <mail@folling.io>
This commit is contained in:
parent
3395eba331
commit
5d91c89533
6 changed files with 93 additions and 96 deletions
|
|
@ -2,31 +2,41 @@
|
|||
|
||||
template<typename V>
|
||||
typename V::data_type const * ikarus_value_base_get(V * value, size_t idx) {
|
||||
if (value->is_indeterminate()) {
|
||||
return nullptr;
|
||||
if (auto * data = value->data.template get_if<std::vector<typename V::data_type>>(); data != nullptr) {
|
||||
return &(*data)[idx];
|
||||
}
|
||||
|
||||
return &value->value[idx];
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
template<typename V>
|
||||
size_t ikarus_value_base_get_size(V const * value) {
|
||||
return value->value.size();
|
||||
if (auto * data = value->data.template get_if<std::vector<typename V::data_type>>(); data != nullptr) {
|
||||
return data->size();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
template<typename V>
|
||||
void ikarus_value_base_set(V * value, size_t idx, typename V::data_type new_data) {
|
||||
value->value[idx] = new_data;
|
||||
if (auto * data = value->data.template get_if<std::vector<typename V::data_type>>(); data != nullptr) {
|
||||
(*data)[idx] = new_data;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename V>
|
||||
void ikarus_value_base_remove(V * value, size_t idx) {
|
||||
value->value.erase(value->value.begin() + idx);
|
||||
if (auto * data = value->data.template get_if<std::vector<typename V::data_type>>(); data != nullptr) {
|
||||
data->erase(data->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);
|
||||
if (auto * data = value->data.template get_if<std::vector<typename V::data_type>>(); data != nullptr) {
|
||||
data->insert(data->begin() + idx, new_data);
|
||||
}
|
||||
}
|
||||
|
||||
template<typename V>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue