12 #ifndef SST_CORE_ELI_ELIBASE_H 13 #define SST_CORE_ELI_ELIBASE_H 15 #include "sst/core/sst_types.h" 24 #include <type_traits> 28 #define COMPONENT_CATEGORY_UNCATEGORIZED 0x00 29 #define COMPONENT_CATEGORY_PROCESSOR 0x01 30 #define COMPONENT_CATEGORY_MEMORY 0x02 31 #define COMPONENT_CATEGORY_NETWORK 0x04 32 #define COMPONENT_CATEGORY_SYSTEM 0x08 63 const std::vector<std::string>
70 const char* description;
71 const char* superclass;
77 const char* description;
78 const char* superclass;
100 template <
typename T>
102 combineEliInfo(std::vector<T>& base,
const std::vector<T>& add)
104 std::vector<T> combined;
106 for (
auto& x : add ) {
107 if ( std::none_of(base.begin(), base.end(), [&](
auto& y) {
return !strcmp(x.name, y.name); }) )
108 combined.emplace_back(x);
113 for (
auto& x : base ) {
114 if constexpr ( std::is_same_v<T, ElementInfoAttribute> ) {
115 if ( x.value !=
nullptr ) combined.emplace_back(x);
118 if ( x.description !=
nullptr ) combined.emplace_back(x);
126 virtual void load() = 0;
133 using InfoMap = std::map<std::string, std::deque<std::shared_ptr<LibraryLoader>>>;
134 using LibraryMap = std::map<std::string, InfoMap>;
136 static bool isLoaded(
const std::string& name) {
return getLoaders().count(name) != 0; }
139 static bool addLoader(
140 const std::string& lib,
const std::string& name,
const std::string& alias,
LibraryLoader* loader);
142 static LibraryMap& getLoaders()
144 static LibraryMap loaders;
151 template <
typename,
typename =
void>
154 static std::string
get() {
return ""; }
157 template <
typename T>
158 struct GetAlias<T, std::void_t<decltype(T::ELI_getAlias())>>
160 static std::string
get() {
return T::ELI_getAlias(); }
167 #define ELI_FORWARD_AS_ONE(...) __VA_ARGS__ 183 #define SST_ELI_DECLARE_BASE(Base) \ 184 using __LocalEliBase = Base; \ 185 using __ParentEliBase = void; \ 186 static constexpr int __EliBaseLevel = 0; \ 187 static constexpr int __EliDerivedLevel = 0; \ 188 static const char* ELI_baseName() \ 193 #define SST_ELI_DECLARE_INFO_COMMON() \ 194 using InfoLibrary = ::SST::ELI::InfoLibrary<__LocalEliBase>; \ 195 template <class __TT> \ 196 static bool addDerivedInfo(const std::string& lib, const std::string& elem) \ 198 using BuilderInfo = typename __LocalEliBase::BuilderInfo; \ 199 return addInfo(lib, elem, new BuilderInfo(lib, elem, (__TT*)nullptr)); \ 208 #define SST_ELI_DECLARE_NEW_BASE(OldBase, NewBase) \ 209 using __LocalEliBase = NewBase; \ 210 using __ParentEliBase = OldBase; \ 211 static constexpr int __EliBaseLevel = OldBase::__EliBaseLevel + 2; \ 212 SST_ELI_DECLARE_INFO_COMMON() \ 213 static const char* ELI_baseName() \ 217 template <class InfoImpl> \ 218 static bool addInfo(const std::string& elemlib, const std::string& elem, InfoImpl* info) \ 220 return OldBase::addInfo(elemlib, elem, info) && \ 221 ::SST::ELI::InfoDatabase::getLibrary<NewBase>(elemlib)->addInfo(elem, info); \ 224 #endif // SST_CORE_ELI_ELIBASE_H Definition: elibase.h:130
const char * defaultValue
Definition: elibase.h:52
const char * description
Definition: elibase.h:51
Describes Statistics used by a Component.
Definition: elibase.h:38
Definition: elibase.h:124
const char * description
Definition: elibase.h:62
const char * name
Definition: elibase.h:50
const std::vector< std::string > validEvents
Definition: elibase.h:64
const char * name
Definition: elibase.h:40
Definition: elibase.h:152
Describes Parameters to a Component.
Definition: elibase.h:48
const char * description
Definition: elibase.h:41
const char * name
Definition: elibase.h:60
const uint8_t enable_level
Definition: elibase.h:43
Describes Ports that the Component can use.
Definition: elibase.h:58
const char * units
Definition: elibase.h:42