relative values, types check

This commit is contained in:
MihailRis
2024-05-10 16:05:46 +03:00
parent 17426705ae
commit b38128ef39
6 changed files with 185 additions and 19 deletions
+30
View File
@@ -242,6 +242,20 @@ size_t Map::size() const {
return values.size();
}
static const std::string TYPE_NAMES[] {
"none",
"map",
"list",
"string",
"number",
"bool",
"integer",
};
const std::string& dynamic::type_name(const Value& value) {
return TYPE_NAMES[value.index()];
}
List_sptr dynamic::create_list(std::initializer_list<Value> values) {
return std::make_shared<List>(values);
}
@@ -249,3 +263,19 @@ List_sptr dynamic::create_list(std::initializer_list<Value> values) {
Map_sptr dynamic::create_map(std::initializer_list<std::pair<const std::string, Value>> entries) {
return std::make_shared<Map>(entries);
}
number_t dynamic::get_number(const Value& value) {
if (auto num = std::get_if<number_t>(&value)) {
return *num;
} else if (auto num = std::get_if<integer_t>(&value)) {
return *num;
}
throw std::runtime_error("cannot cast "+type_name(value)+" to number");
}
integer_t dynamic::get_integer(const Value& value) {
if (auto num = std::get_if<integer_t>(&value)) {
return *num;
}
throw std::runtime_error("cannot cast "+type_name(value)+" to integer");
}