loom

Форк
0
/
Specification.cpp 
60 строк · 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
    const Value & Specification::find(const std::u16string & spec_name) const
30
    {
31
        static const Value null = {};
32

33
        if (!isObject())
34
            return null;
35

36
        auto it = std::find_if(object()->variables().begin(), object()->variables().end(),
37
                [spec_name](const Variable & v){
38
                    return v.name() == spec_name;
39
                });
40

41
        if (it == object()->variables().end())
42
            return null;
43

44
        return it->value();
45
    }
46

47
    void Specification::set(const std::u16string & name, const Value & value)
48
    {
49
        auto it = std::find_if(object()->variables().begin(), object()->variables().end(),
50
                [name](const Variable & v){
51
                    return v.name() == name;
52
                });
53

54
        if (it == object()->variables().end())
55
            object()->variables().push_back(Variable{name, value});
56
        else 
57
            it->value() = value;
58
    }
59

60
}

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

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

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

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