implement toggle/number/text values

Signed-off-by: Folling <mail@folling.io>
This commit is contained in:
Folling 2023-11-26 13:55:14 +01:00 committed by Folling
parent da31bbf96a
commit f847d30c06
Signed by: folling
SSH key fingerprint: SHA256:S9qEx5WCFFLK49tE/LKnKuJYM5sw+++Dn6qJbbyxnCY
14 changed files with 280 additions and 48 deletions

View file

@ -10,22 +10,60 @@
#include <values/value.hpp>
bool ikarus_value_is_indeterminate(IkarusValue const * value) {
return value->indeterminate;
return value->is_interminate();
}
void ikarus_value_set_indeterminate(IkarusValue * value, bool indeterminate) {
value->set_intermediate(indeterminate);
}
char const * ikarus_value_to_string(IkarusValue const * value) {
auto str = std::visit(
auto const str = std::visit(
cppbase::overloaded{
[](IkarusToggleValue const * toggle_value) -> std::string { return toggle_value->value ? "true" : "false"; },
[](IkarusNumberValue const * number_value) -> std::string { return fmt::format("{}", number_value->value); },
[](IkarusTextValue const * text_value) -> std::string { return fmt::format("{}", text_value->value); },
},
value->data
value->get_data()
);
char * ret = new char[str.size() + 1];
auto * const ret = new char[str.size() + 1];
std::strncpy(ret, str.data(), str.size() + 1);
return ret;
}
void ikarus_value_visit(
IkarusValue * value,
void (*toggle_visitor)(IkarusToggleValue *, void *),
void (*number_visitor)(IkarusNumberValue *, void *),
void (*text_visitor)(IkarusTextValue *, void *),
void * data
) {
std::visit(
cppbase::overloaded{
[toggle_visitor, data](IkarusToggleValue * toggle_value) { toggle_visitor(toggle_value, data); },
[number_visitor, data](IkarusNumberValue * number_value) { number_visitor(number_value, data); },
[text_visitor, data](IkarusTextValue * text_value) { text_visitor(text_value, data); },
},
value->get_data()
);
}
void ikarus_value_visit_const(
IkarusValue const * value,
void (*toggle_visitor)(IkarusToggleValue const *, void *),
void (*number_visitor)(IkarusNumberValue const *, void *),
void (*text_visitor)(IkarusTextValue const *, void *),
void * data
) {
std::visit(
cppbase::overloaded{
[toggle_visitor, data](IkarusToggleValue const * toggle_value) { toggle_visitor(toggle_value, data); },
[number_visitor, data](IkarusNumberValue const * number_value) { number_visitor(number_value, data); },
[text_visitor, data](IkarusTextValue const * text_value) { text_visitor(text_value, data); },
},
value->get_data()
);
}