ona/source/kym.cpp

50 lines
698 B
C++
Raw Normal View History

2023-02-18 04:34:40 +01:00
export module kym;
2023-02-19 17:50:29 +01:00
import coral;
import coral.math;
2023-02-18 04:34:40 +01:00
export namespace kym {
enum class value_type {
nil,
boolean,
integer,
scalar,
vector2,
vector3,
object,
};
struct value {
value_type type;
union {
bool boolean;
2023-02-19 17:50:29 +01:00
coral::i64 integer;
2023-02-18 04:34:40 +01:00
2023-02-19 17:50:29 +01:00
coral::f64 scalar;
2023-02-18 04:34:40 +01:00
2023-02-19 17:50:29 +01:00
coral::vector2 vector2;
2023-02-18 04:34:40 +01:00
2023-02-19 17:50:29 +01:00
coral::vector3 vector3;
2023-02-18 04:34:40 +01:00
void * object;
} as;
2023-02-19 17:50:29 +01:00
coral::optional<coral::u16> as_u16() const {
2023-02-18 04:34:40 +01:00
if ((this->type == value_type::integer) &&
2023-02-19 17:50:29 +01:00
(this->as.integer >= 0) && (this->as.integer <= coral::u16_max)) {
2023-02-18 04:34:40 +01:00
2023-02-19 17:50:29 +01:00
return static_cast<coral::u16>(this->as.integer);
2023-02-18 04:34:40 +01:00
}
return {};
}
};
value nil = {
.type = value_type::nil,
.as = {.object = nullptr},
};
};