12#ifndef SST_CORE_ELI_ELIBASE_H
13#define SST_CORE_ELI_ELIBASE_H
15#include "sst/core/sst_types.h"
27#define COMPONENT_CATEGORY_UNCATEGORIZED 0x00
28#define COMPONENT_CATEGORY_PROCESSOR 0x01
29#define COMPONENT_CATEGORY_MEMORY 0x02
30#define COMPONENT_CATEGORY_NETWORK 0x04
31#define COMPONENT_CATEGORY_SYSTEM 0x08
62 const std::vector<std::string>
69 const char* description;
70 const char* superclass;
76 const char* description;
77 const char* superclass;
101combineEliInfo(std::vector<T>& base,
const std::vector<T>& add)
103 std::vector<T> combined;
105 for (
auto& x : add ) {
106 if ( std::none_of(base.begin(), base.end(), [&](
auto& y) { return !strcmp(x.name, y.name); }) )
107 combined.emplace_back(x);
112 for (
auto& x : base ) {
113 if constexpr ( std::is_same_v<T, ElementInfoAttribute> ) {
114 if ( x.value !=
nullptr ) combined.emplace_back(x);
117 if ( x.description !=
nullptr ) combined.emplace_back(x);
125 virtual void load() = 0;
132 using InfoMap = std::map<std::string, std::deque<std::shared_ptr<LibraryLoader>>>;
133 using LibraryMap = std::map<std::string, InfoMap>;
135 static bool isLoaded(
const std::string& name) {
return getLoaders().count(name) != 0; }
138 static bool addLoader(
139 const std::string& lib,
const std::string& name,
const std::string& alias,
LibraryLoader* loader);
141 static LibraryMap& getLoaders()
143 static LibraryMap loaders;
150template <
typename,
typename =
void>
153 static std::string get() {
return ""; }
157struct GetAlias<T, std::void_t<decltype(T::ELI_getAlias())>>
159 static std::string get() {
return T::ELI_getAlias(); }
166#define ELI_FORWARD_AS_ONE(...) __VA_ARGS__
182#define SST_ELI_DECLARE_BASE(Base) \
183 using __LocalEliBase = Base; \
184 using __ParentEliBase = void; \
185 static constexpr int __EliBaseLevel = 0; \
186 static constexpr int __EliDerivedLevel = 0; \
187 static const char* ELI_baseName() \
192#define SST_ELI_DECLARE_INFO_COMMON() \
193 using InfoLibrary = ::SST::ELI::InfoLibrary<__LocalEliBase>; \
194 template <class __TT> \
195 static bool addDerivedInfo(const std::string& lib, const std::string& elem) \
197 using BuilderInfo = typename __LocalEliBase::BuilderInfo; \
198 return addInfo(lib, elem, new BuilderInfo(lib, elem, (__TT*)nullptr)); \
207#define SST_ELI_DECLARE_NEW_BASE(OldBase, NewBase) \
208 using __LocalEliBase = NewBase; \
209 using __ParentEliBase = OldBase; \
210 static constexpr int __EliBaseLevel = OldBase::__EliBaseLevel + 2; \
211 SST_ELI_DECLARE_INFO_COMMON() \
212 static const char* ELI_baseName() \
216 template <class InfoImpl> \
217 static bool addInfo(const std::string& elemlib, const std::string& elem, InfoImpl* info) \
219 return OldBase::addInfo(elemlib, elem, info) && \
220 ::SST::ELI::InfoDatabase::getLibrary<NewBase>(elemlib)->addInfo(elem, info); \
Describes Parameters to a Component.
Definition elibase.h:48
const char * name
Definition elibase.h:49
const char * description
Definition elibase.h:50
const char * defaultValue
Definition elibase.h:51
Describes Ports that the Component can use.
Definition elibase.h:58
const char * name
Definition elibase.h:59
const char * description
Definition elibase.h:61
const std::vector< std::string > validEvents
Definition elibase.h:63
Describes Statistics used by a Component.
Definition elibase.h:38
const char * name
Definition elibase.h:39
const char * units
Definition elibase.h:41
const uint8_t enableLevel
Definition elibase.h:42
const char * description
Definition elibase.h:40