loom

Форк
0
104 строки · 3.0 Кб
1
/*
2
MIT License
3

4
Copyright (c) 2021 МГТУ им. Н.Э. Баумана, кафедра ИУ-6, Михаил Фетисов,
5

6
https://bmstu.codes/lsx/simodo/loom
7
*/
8

9
#include "simodo/variable/Module_interface.h"
10
#include "simodo/variable/VariableSetWrapper.h"
11
#include "simodo/interpret/Interpret_interface.h"
12

13
#include <memory>
14
#include <exception>
15
#include <cassert>
16

17
#ifdef CROSS_WIN
18
// MinGW related workaround
19
#define BOOST_DLL_FORCE_ALIAS_INSTANTIATION
20
#endif
21

22
#include <boost/dll/alias.hpp>
23

24
using namespace simodo;
25

26
namespace
27
{
28
    variable::Value createConnection(variable::Module_interface * host, const variable::VariableSetWrapper & args);
29
    variable::Value query(variable::Module_interface * host, const variable::VariableSetWrapper & args);
30
}
31

32
class Array_module : public variable::Module_interface
33
{
34
public:
35
    virtual version_t version() const override { return lib_version(); }
36

37
    virtual variable::Value instantiate(std::shared_ptr<Module_interface> module_object) override 
38
    {
39
        return {{
40
            {u"createConnection", {variable::ValueType::Function, variable::Object {{
41
                {u"@", variable::ExternalFunction {module_object, ::createConnection}},
42
                {{}, variable::ValueType::Int},
43
                {u"connection_parameters", variable::ValueType::Object},
44
            }}}},
45
            {u"query", {variable::ValueType::Function, variable::Object {{
46
                {u"@", variable::ExternalFunction {module_object, ::query}},
47
                {{}, variable::ValueType::Array},
48
                {u"connection_id", variable::ValueType::Int},
49
                {u"query_string", variable::ValueType::String},
50
                {u"query_parameters", variable::ValueType::Object},
51
            }}}},
52
        }};
53
    }
54

55
    // Factory method
56
    static std::shared_ptr<Module_interface> create(interpret::Interpret_interface * ) {
57
        return std::make_shared<Array_module>();
58
    }
59
};
60

61
BOOST_DLL_ALIAS(
62
    Array_module::create,    // <-- this function is exported with...
63
    create_simodo_module        // <-- ...this alias name
64
)
65

66
namespace
67
{
68
    variable::Value createConnection(variable::Module_interface * host, const variable::VariableSetWrapper & args)
69
    {
70
        if (host == nullptr)
71
            return {};
72

73
        assert(args.size() == 1);
74

75
        const variable::Value & connection_parameters = args[0].origin().value();
76

77
        assert(connection_parameters.isObject());
78

79
        // code...
80

81
        return 0;
82
    }
83

84
    variable::Value query(variable::Module_interface * host, const variable::VariableSetWrapper & args)
85
    {
86
        if (host == nullptr)
87
            return {};
88

89
        assert(args.size() == 3);
90

91
        const variable::Value & connection_id   = args[0].origin().value();
92
        const variable::Value & query_string    = args[1].origin().value();
93
        const variable::Value & query_parameters = args[2].origin().value();
94

95
        assert(connection_id.isInt());
96
        assert(query_string.isString());
97
        assert(query_parameters.isObject());
98

99
        // code...
100

101
        return variable::Object {};
102
    }
103

104
}
105

106

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

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

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

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