SST 12.1.0
Structural Simulation Toolkit
module.h
1// Copyright 2009-2022 NTESS. Under the terms
2// of Contract DE-NA0003525 with NTESS, the U.S.
3// Government retains certain rights in this software.
4//
5// Copyright (c) 2009-2022, NTESS
6// All rights reserved.
7//
8// This file is part of the SST software package. For license
9// information, see the LICENSE file in the top level directory of the
10// distribution.
11
12#ifndef SST_CORE_MODULE_H
13#define SST_CORE_MODULE_H
14
15#include "sst/core/eli/elementinfo.h"
16
17namespace SST {
18/**
19 Module is a tag class used with the loadModule function.
20 */
21class Module
22{
23public:
24 SST_ELI_DECLARE_BASE(Module)
25 // declare extern to limit compile times
26 SST_ELI_DECLARE_CTORS(ELI_CTOR(SST::Params&), ELI_CTOR(Component*, SST::Params&))
27 SST_ELI_DECLARE_INFO_EXTERN(ELI::ProvidesParams)
28 Module() {}
29 virtual ~Module() {}
30};
31} // namespace SST
32
33// Very hackish way to get a deprecation warning for
34// SST_ELI_REGISTER_MODULE, but there are no standard ways to do this
36{
37public:
38 static constexpr int fake_deprecated_function()
39 __attribute__((deprecated("SST_ELI_REGISTER_MODULE is deprecated and will be removed in SST 13. Please use the "
40 "new SST_ELI_REGISTER_MODULE_API and SST_ELI_REGISTER_MODULE_DERIVED macros")))
41 {
42 return 0;
43 }
44};
45
46#define SST_ELI_REGISTER_MODULE(cls, lib, name, version, desc, interface) \
47 static const int SST_ELI_FAKE_VALUE = sst_eli_fake_deprecated_class::fake_deprecated_function(); \
48 SST_ELI_REGISTER_DERIVED(SST::Module,cls,lib,name,ELI_FORWARD_AS_ONE(version),desc) \
49 SST_ELI_INTERFACE_INFO(interface)
50
51// New way to register modules. Must register an interface (API)
52// first, then you can register a module that implements it
53#define SST_ELI_REGISTER_MODULE_API(cls, ...) \
54 SST_ELI_DECLARE_NEW_BASE(SST::Module,::cls) \
55 SST_ELI_NEW_BASE_CTOR(SST::Params&,##__VA_ARGS__)
56
57#define SST_ELI_REGISTER_MODULE_DERIVED_API(cls, base, ...) \
58 SST_ELI_DECLARE_NEW_BASE(::base,::cls) \
59 SST_ELI_NEW_BASE_CTOR(SST::Params&,##__VA_ARGS__)
60
61#define SST_ELI_REGISTER_MODULE_DERIVED(cls, lib, name, version, desc, interface) \
62 SST_ELI_REGISTER_DERIVED(::interface,cls,lib,name,ELI_FORWARD_AS_ONE(version),desc) \
63 SST_ELI_INTERFACE_INFO(#interface)
64
65#endif // SST_CORE_MODULE_H
Main component object for the simulation.
Definition: component.h:31
Definition: paramsInfo.h:41
Module is a tag class used with the loadModule function.
Definition: module.h:22
Parameter store.
Definition: params.h:56
Definition: module.h:36