VIPRA Documentation
Loading...
Searching...
No Matches
module.hpp
1#pragma once
2
3// NOLINTBEGIN(unused-includes)
4#include "vipra/logging/logging.hpp"
5#include "vipra/macros/errors.hpp"
6#include "vipra/modules.hpp"
7#include "vipra/modules/module.hpp"
8#include "vipra/special_modules/parameters.hpp"
9// NOLINTEND(unused-includes)
10
11#define VIPRA_MODULE_TYPE(type) \
12 constexpr auto module_type() const -> VIPRA::Modules::Type \
13 { \
14 return VIPRA::Modules::Type::type; \
15 }
16
17#define VIPRA_MODULE_NAME(name) \
18 constexpr auto module_name() const -> const char* { return name; }
19
20#define NEW_VIPRA_MODULE(Name, Type) \
21 class Name : public VIPRA::Modules::Module<Name>, public VIPRA::Modules::Type
22
23#define VIPRA_REGISTER_MODULE(Name, Type) \
24 extern "C" auto create_module() -> VIPRA::Modules::Type* \
25 { \
26 /* NOLINTNEXTLINE */ \
27 return new Name(); \
28 } \
29 extern "C" void setup_module(void* mod, VIPRA::Parameters& paramIn, \
30 VIPRA::Random::Engine& engine) \
31 { \
32 static_cast<Name*>(mod)->register_params(paramIn); \
33 static_cast<Name*>(mod)->config(paramIn, engine); \
34 }