loom

Форк
0
/
FormationWrapper.cpp 
97 строк · 2.6 Кб
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/FormationWrapper.h"
10

11
#include <cassert>
12

13
namespace simodo::ast
14
{
15
    FormationWrapper::FormationWrapper(size_t streams_quantity)
16
    : _ast_streams(streams_quantity)
17
    {
18
        assert(streams_quantity >= DEFAULT_STREAMS_QUANTITY);
19
    }
20

21
    void FormationWrapper::setStreamNo(uint16_t no) 
22
    { 
23
        assert(no < _ast_streams.size());
24
        _current_stream_no = no; 
25
    }
26

27
    const FormationFlow & FormationWrapper::getStream(uint16_t no) const 
28
    {
29
        assert(no < _ast_streams.size());
30
        return _ast_streams[no];
31
    }
32

33
    void FormationWrapper::removeStream(uint16_t no)
34
    {
35
        assert(no < _ast_streams.size());
36
        _ast_streams[no] = {};
37
    }
38

39
    void FormationWrapper::addNode(const std::u16string & host, 
40
                                OperationCode op, 
41
                                const inout::Token & op_symbol, 
42
                                const inout::Token & bound)
43
    {
44
        FormationFlow & stream = getStream_mutable(_current_stream_no);
45

46
        stream.addNode(host, op, op_symbol, bound);
47
    }
48

49
    void FormationWrapper::addNode_StepInto(const std::u16string & host, 
50
                                OperationCode op, 
51
                                const inout::Token & op_symbol, 
52
                                const inout::Token & bound)
53
    {
54
        FormationFlow & stream = getStream_mutable(_current_stream_no);
55

56
        stream.addNode_StepInto(host, op, op_symbol, bound);
57
    }
58

59
    bool FormationWrapper::goParent()
60
    {
61
        FormationFlow & stream = getStream_mutable(_current_stream_no);
62

63
        return stream.goParent();
64
    }
65

66
    void FormationWrapper::addFile(const std::string & file_path)
67
    {
68
        FormationFlow & stream = getStream_mutable(_current_stream_no);
69

70
        stream.addFile(file_path);
71
    }
72

73
    const ast::Tree & FormationWrapper::tree() const  
74
    {
75
        return _tree;
76
    }
77

78
    void FormationWrapper::finalize()
79
    {
80
        std::vector<Node> wb;
81

82
        for(const FormationFlow & ff : _ast_streams) {
83
            const std::vector<Node> & fb = ff.branches();
84

85
            wb.insert(wb.end(), fb.begin(), fb.end());
86
        }
87

88
        _tree._root._branches.swap(wb);
89
    }
90

91
    FormationFlow &FormationWrapper::getStream_mutable(uint16_t stream_no)
92
    {
93
        assert(stream_no < _ast_streams.size());
94
        return _ast_streams[stream_no];
95
    }
96

97
}

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

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

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

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