#include "ikarus/values/value.h" #include #include #include #include #include #include bool ikarus_value_is_indeterminate(IkarusValue const * value) { 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 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->get_data() ); 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() ); }