loom

Форк
0
/
Array.cpp 
50 строк · 1.3 Кб
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
    Array Array::copy() const
22
    {
23
        std::vector<Value> values;
24

25
        for(const Value & v : _values)
26
            values.push_back(v.copy());
27

28
        return { _common_type, _dimensions, values };
29
    }
30

31
    const Value & Array::getValueByIndex(const std::vector<index_t> & index) const
32
    {
33
        if (_dimensions.size() != index.size())
34
            throw bormental::DrBormental("Array::getValueByIndex", inout::fmt("Out of indexes count"));
35

36
        if (index.size() != 1)
37
            throw bormental::DrBormental("Array::getValueByIndex", inout::fmt("Unsupported"));
38

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

42
        return _values[index[0]];
43
    }
44

45
    VariableRef Array::getRefByIndex(const std::vector<index_t> & index) const
46
    {
47
        return VariableRef(getValueByIndex(index));
48
    }
49

50
}

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

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

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

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