50 lines
698 B
C++
50 lines
698 B
C++
export module kym;
|
|
|
|
import coral;
|
|
import coral.math;
|
|
|
|
export namespace kym {
|
|
enum class value_type {
|
|
nil,
|
|
boolean,
|
|
integer,
|
|
scalar,
|
|
vector2,
|
|
vector3,
|
|
object,
|
|
};
|
|
|
|
struct value {
|
|
value_type type;
|
|
|
|
union {
|
|
bool boolean;
|
|
|
|
coral::i64 integer;
|
|
|
|
coral::f64 scalar;
|
|
|
|
coral::vector2 vector2;
|
|
|
|
coral::vector3 vector3;
|
|
|
|
void * object;
|
|
} as;
|
|
|
|
coral::optional<coral::u16> as_u16() const {
|
|
if ((this->type == value_type::integer) &&
|
|
(this->as.integer >= 0) && (this->as.integer <= coral::u16_max)) {
|
|
|
|
return static_cast<coral::u16>(this->as.integer);
|
|
}
|
|
|
|
return {};
|
|
}
|
|
};
|
|
|
|
value nil = {
|
|
.type = value_type::nil,
|
|
.as = {.object = nullptr},
|
|
};
|
|
};
|