4
Copyright (c) 2021 МГТУ им. Н.Э. Баумана, кафедра ИУ-6, Михаил Фетисов,
6
https://bmstu.codes/lsx/simodo/stars
9
#include "simodo/module/HardModule.h"
13
namespace simodo::module
15
HardModule::HardModule(std::function<ExtModuleFactory_t> creator, interpret::Interpret_interface * interpret)
17
, _interpret(interpret)
20
_modules.push_back(creator(interpret));
21
assert(_modules.back());
24
version_t HardModule::version() const
26
return _modules[0]->version();
29
variable::Value HardModule::instantiate(std::shared_ptr<Module_interface> /*module_object*/)
31
if (_modules.size() == 1) {
32
_modules.push_back(std::shared_ptr<Module_interface>());
33
/// \todo Пересмотреть странную передачу самого себя в свой же метод.
34
/// PVS Studio: warn V678 An object is used as an argument to its own method.
35
/// Consider checking the first actual argument of the 'instantiate' function.
36
return _modules[0]->instantiate(_modules[0]);
39
size_t last_module_index = _modules.size() - 1;
40
_modules[last_module_index] = _creator(_interpret);
41
_modules.push_back(std::shared_ptr<Module_interface>());
42
/// \todo Пересмотреть странную передачу самого себя в свой же метод.
43
/// PVS Studio: warn V678 An object is used as an argument to its own method.
44
/// Consider checking the first actual argument of the 'instantiate' function.
45
return _modules[last_module_index]->instantiate(_modules[last_module_index]);