loom
1/*
2MIT License
3
4Copyright (c) 2021 МГТУ им. Н.Э. Баумана, кафедра ИУ-6, Михаил Фетисов,
5
6https://bmstu.codes/lsx/simodo/stars
7*/
8
9#include "simodo/module/HardModule.h"
10
11#include <cassert>
12
13namespace simodo::module
14{
15HardModule::HardModule(std::function<ExtModuleFactory_t> creator, interpret::Interpret_interface * interpret)
16: _creator(creator)
17, _interpret(interpret)
18{
19assert(creator);
20_modules.push_back(creator(interpret));
21assert(_modules.back());
22}
23
24version_t HardModule::version() const
25{
26return _modules[0]->version();
27}
28
29variable::Object HardModule::instantiate(std::shared_ptr<Module_interface> /*module_object*/)
30{
31if (_modules.size() == 1) {
32_modules.push_back(std::shared_ptr<Module_interface>());
33return _modules[0]->instantiate(_modules[0]);
34}
35
36size_t last_module_index = _modules.size() - 1;
37_modules[last_module_index] = _creator(_interpret);
38_modules.push_back(std::shared_ptr<Module_interface>());
39return _modules[last_module_index]->instantiate(_modules[last_module_index]);
40}
41}
42