loom

Форк
0
/
Array.cpp 
66 строк · 1.6 Кб
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
#include "simodo/inout/format/fmt.h"
12

13
#include <cassert>
14

15
namespace simodo::variable
16
{
17
    Array::Array(const std::vector<Value> & values)
18
        : _dimensions({static_cast<index_t>(values.size())}), _values(values)
19
    {}
20

21
    void Array::reserve(size_t capacity)
22
    {
23
        _values.reserve(capacity);
24
    }
25

26
    Array Array::copy() const
27
    {
28
        std::vector<Value> values;
29

30
        for(const Value & v : _values)
31
            values.push_back(v.copy());
32

33
        return { _common_type, _dimensions, values };
34
    }
35

36
    void Array::add(const Value & value)
37
    {
38
        _values.push_back(value);
39
    }
40

41
    void Array::pop()
42
    {
43
        assert(!_values.empty());
44
        _values.pop_back();
45
    }
46

47
    const Value & Array::getValueByIndex(const std::vector<index_t> & index) const
48
    {
49
        if (_dimensions.size() != index.size())
50
            throw bormental::DrBormental("Array::getValueByIndex", inout::fmt("Out of indexes count"));
51

52
        if (index.size() != 1)
53
            throw bormental::DrBormental("Array::getValueByIndex", inout::fmt("Unsupported"));
54

55
        if (index[0] >= _values.size())
56
            throw bormental::DrBormental("Array::getValueByIndex", inout::fmt("Out of index"));
57

58
        return _values[index[0]];
59
    }
60

61
    VariableRef Array::getRefByIndex(const std::vector<index_t> & index) const
62
    {
63
        return VariableRef(getValueByIndex(index));
64
    }
65

66
}

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

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

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

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