loom

Форк
0
/
FormationFlow.cpp 
61 строка · 1.7 Кб
1
/*
2
MIT License
3

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

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

9
#include "simodo/ast/generator/FormationFlow.h"
10

11
#include <cassert>
12

13
namespace simodo::ast
14
{
15
    FormationFlow::FormationFlow() 
16
    {
17
        _flow.push_back(&_tree.mutable_root());
18
        _flow.back()->_branches.reserve(8);
19
    }
20

21
    void FormationFlow::addNode(const std::u16string & host, 
22
                                OperationCode op, 
23
                                const inout::Token & op_symbol, 
24
                                const inout::Token & bound)
25
    {
26
        assert(!_flow.empty());
27

28
        // Создаём ноду, остаёмся в старой
29
        _flow.back()->_branches.emplace_back(host, op, op_symbol, bound);
30
    }
31

32
    void FormationFlow::addNode_StepInto(const std::u16string & host, 
33
                                OperationCode op, 
34
                                const inout::Token & op_symbol, 
35
                                const inout::Token & bound)
36
    {
37
        assert(!_flow.empty());
38

39
        // Создаём ноду и переключаемся на неё
40
        _flow.back()->_branches.emplace_back(host, op, op_symbol, bound);
41
        _flow.push_back( &(_flow.back()->_branches.back()) );
42
    }
43

44
    bool FormationFlow::goParent()
45
    {
46
        assert(!_flow.empty());
47

48
        if (_flow.size() < 2)
49
            return false;
50

51
        // Возвращаемся на вышестоящую ноду
52
        _flow.pop_back();
53
        return true;
54
    }
55

56
    void FormationFlow::addFile(const std::string & file_path)
57
    {
58
        _tree._files.push_back(file_path);
59
    }
60

61
}

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

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

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

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