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
57
_val_variable = std::make_shared<Variable>(u"", *_val_ptr);
59
return *_val_variable;
61
return *_variable_ptr;
64
Variable & VariableRef::origin()
68
_val_variable = std::make_shared<Variable>(u"", *_val_ptr);
70
return *_val_variable;
72
return *_variable_ptr;
75
void VariableRef::setValue(const Value & value)
80
_val_variable->value() = value;
83
_variable_ptr->value() = value;