loom

Форк
0
/
Specification.cpp 
64 строки · 1.5 Кб
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
#include "simodo/bormental/DrBormental.h"
11

12
#include "simodo/inout/convert/functions.h"
13

14
#include <cassert>
15

16
namespace simodo::variable
17
{
18
    const std::shared_ptr<Object> Specification::getObjectPtr() const
19
    {
20
        if (!isObject()) {
21
            assert(isNull());
22
            const_cast<Specification *>(this)->setValue(std::make_shared<Object>());
23
        }
24

25
        assert(isObject());
26
        return getObject();
27
    }
28

29
    void Specification::clone(const Specification & other)
30
    {
31
        setValue(other.object()->copy());
32
    }
33

34
    const Value & Specification::find(const std::u16string & spec_name) const
35
    {
36
        static const Value null = {};
37

38
        if (!isObject())
39
            return null;
40

41
        auto it = std::find_if(object()->variables().begin(), object()->variables().end(),
42
                [spec_name](const Variable & v){
43
                    return v.name() == spec_name;
44
                });
45

46
        if (it == object()->variables().end())
47
            return null;
48

49
        return it->value();
50
    }
51

52
    void Specification::set(const std::u16string & name, const Value & value)
53
    {
54
        assert(!name.empty());
55

56
        Variable & v = object()->getVariableByName_mutable(name);
57

58
        if (v.name().empty())
59
            object()->add(Variable{name, value});
60
        else 
61
            v.setValue(value);
62
    }
63

64
}

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

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

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

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