contexts fixes

This commit is contained in:
ProgramSnail 2023-05-09 15:51:13 +03:00
parent 6850863f58
commit ab29a785bf
7 changed files with 106 additions and 94 deletions

View file

@ -13,24 +13,19 @@ namespace info::value {
struct Unit {};
struct InternalValue {
public:
InternalValue() = default;
explicit InternalValue(std::variant<double,
long long,
std::string,
char,
bool,
Unit>&& value) : value(std::move(value)) {}
template<typename T>
explicit InternalValue(const T& value) : value(value) {} // move ??
template<typename T>
std::optional<T*> GetValue() {
if (!std::holds_alternative<T>(value)) {
return std::nullopt;
}
return std::get<T>(value);
return &std::get<T>(value);
}
public:
std::variant<double,
@ -107,6 +102,13 @@ public:
};
struct Value { // DefinedValue ??
public:
Value() = default;
template<typename T>
explicit Value(const T& value) : value(value) {} // move ??
public:
std::variant<InternalValue,
TupleValue,
VariantValue,
@ -120,7 +122,7 @@ class ValueManager {
public:
template<typename T>
utils::IdType AddValue(const T& value, utils::ValueType value_type) {
values_.push_back(std::pair<Value, utils::ValueType> {value, value_type});
values_.push_back(std::pair<Value, utils::ValueType> {Value(value), value_type});
return values_.size() - 1;
}
@ -144,6 +146,11 @@ public:
utils::ValueType GetValueType(utils::IdType value_id) {
return values_.at(value_id).second;
}
bool EqualTypes(utils::IdType first_type, utils::IdType second_type) = delete; // TODO
bool AddTypeRequirement(utils::IdType type, utils::IdType requrement) = delete;
private:
std::vector<std::pair<Value, utils::ValueType>> values_;
};