loom

Форк
0
/
Value.cpp 
43 строки · 1.2 Кб
1
/*
2
MIT License
3

4
Copyright (c) 2022 МГТУ им. Н.Э. Баумана, кафедра ИУ-6, Михаил Фетисов,
5

6
https://bmstu.codes/lsx/simodo/loom
7
*/
8

9
#include "simodo/variable/Variable.h"
10

11
#include <cassert>
12

13
namespace simodo::variable
14
{
15
    const VariableRef & Value::getRef() const 
16
    { 
17
        return std::get<VariableRef>(_variant); 
18
    }
19

20
    Value Value::copy() const
21
    {
22
        switch(_type)
23
        {
24
        case ValueType::Array:
25
            if (std::holds_alternative<std::shared_ptr<Array>>(_variant))
26
                return std::make_shared<Array>(getArray()->copy());
27
            return _type;
28
        case ValueType::Function:
29
            /// \todo При копировании функции ломается передача замыканий (нужно проверить)
30
            // return *this;
31
        case ValueType::Object:
32
            if (std::holds_alternative<std::shared_ptr<Object>>(_variant))
33
                return { _type, std::make_shared<Object>(getObject()->copy()) };
34
            return _type;
35
        case ValueType::Ref:
36
            assert(getRef().origin().type() != ValueType::Ref);
37
            return getRef().origin().value().copy();
38
        default:
39
            return *this;
40
        }
41
    }
42

43
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.