4
Copyright (c) 2022 МГТУ им. Н.Э. Баумана, кафедра ИУ-6, Михаил Фетисов,
6
https://bmstu.codes/lsx/simodo/loom
9
#include "simodo/variable/Variable.h"
13
namespace simodo::variable
15
VariableRef::VariableRef(Variable & var)
17
if (var.type() != ValueType::Ref)
20
VariableRef variant_ref = std::get<VariableRef>(var.variant()); // Копируем вариант со ссылкой (чуть дольше, но безопасно?)
21
Variable & ref = variant_ref.origin(); // Получаем изменяемую ссылку
23
assert(ref.type() != ValueType::Ref);
28
VariableRef::VariableRef(const Variable & var_c)
30
Variable & var = const_cast<Variable &>(var_c);
32
if (var.type() != ValueType::Ref)
35
VariableRef variant_ref = std::get<VariableRef>(var.variant()); // Копируем вариант со ссылкой (чуть дольше, но безопасно?)
36
Variable & ref = variant_ref.origin(); // Получаем изменяемую ссылку
38
assert(ref.type() != ValueType::Ref);
43
VariableRef::VariableRef(Value & val)
48
VariableRef::VariableRef(const Value & val_c)
49
: _val_ptr(const_cast<Value *>(&val_c))
53
const Variable & VariableRef::origin() const
59
_val_variable = std::make_shared<Variable>(u"", *_val_ptr);
61
return *_val_variable;
63
return *_variable_ptr;
66
Variable & VariableRef::origin()
72
_val_variable = std::make_shared<Variable>(u"", *_val_ptr);
74
return *_val_variable;
76
return *_variable_ptr;
79
void VariableRef::setValue(const Value & value)
86
_val_variable->value() = value;
89
_variable_ptr->value() = value;