SST  12.0.1
StructuralSimulationToolkit
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 
17 namespace SST {
18 /**
19  Module is a tag class used with the loadModule function.
20  */
21 class Module
22 {
23 public:
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 {
37 public:
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:30
Module is a tag class used with the loadModule function.
Definition: module.h:21
Definition: paramsInfo.h:40
Definition: module.h:35
Parameter store.
Definition: params.h:55