SST 12.1.0
Structural Simulation Toolkit
paramsInfo.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_ELI_PARAMS_INFO_H
13#define SST_CORE_ELI_PARAMS_INFO_H
14
15#include "sst/core/eli/elibase.h"
16#include "sst/core/params.h"
17
18#include <string>
19#include <vector>
20
21namespace SST {
22namespace ELI {
23
24template <class T, class Enable = void>
26{
27 static const std::vector<SST::ElementInfoParam>& get()
28 {
29 static std::vector<SST::ElementInfoParam> var = {};
30 return var;
31 }
32};
33
34template <class T>
35struct GetParams<T, typename MethodDetect<decltype(T::ELI_getParams())>::type>
36{
37 static const std::vector<SST::ElementInfoParam>& get() { return T::ELI_getParams(); }
38};
39
41{
42public:
43 const std::vector<ElementInfoParam>& getValidParams() const { return params_; }
44
45 void toString(std::ostream& os) const;
46
47 template <class XMLNode>
48 void outputXML(XMLNode* node) const
49 {
50 // Build the Element to Represent the Component
51 int idx = 0;
52 for ( const ElementInfoParam& param : params_ ) {
53 ;
54 // Build the Element to Represent the Parameter
55 auto* XMLParameterElement = new XMLNode("Parameter");
56 XMLParameterElement->SetAttribute("Index", idx);
57 XMLParameterElement->SetAttribute("Name", param.name);
58 XMLParameterElement->SetAttribute("Description", param.description ? param.description : "none");
59 XMLParameterElement->SetAttribute("Default", param.defaultValue ? param.defaultValue : "none");
60 node->LinkEndChild(XMLParameterElement);
61 ++idx;
62 }
63 }
64
65 const Params::KeySet_t& getParamNames() const { return allowedKeys; }
66
67protected:
68 template <class T>
69 ProvidesParams(T* UNUSED(t)) : params_(GetParams<T>::get())
70 {
71 init();
72 }
73
74private:
75 void init();
76
77 Params::KeySet_t allowedKeys;
78 std::vector<ElementInfoParam> params_;
79};
80
81} // namespace ELI
82} // namespace SST
83
84// clang-format off
85#define SST_ELI_DOCUMENT_PARAMS(...) \
86 static const std::vector<SST::ElementInfoParam>& ELI_getParams() \
87 { \
88 static std::vector<SST::ElementInfoParam> var = { __VA_ARGS__ }; \
89 auto parent = SST::ELI::GetParams< \
90 std::conditional<(__EliDerivedLevel > __EliBaseLevel), __LocalEliBase, __ParentEliBase>::type>::get(); \
91 SST::ELI::combineEliInfo(var, parent); \
92 return var; \
93 }
94// clang-format on
95
96#define SST_ELI_DELETE_PARAM(param) \
97 { \
98 param, nullptr, nullptr \
99 }
100
101#endif // SST_CORE_ELI_PARAMS_INFO_H
Definition: paramsInfo.h:41
std::set< key_type, KeyCompare > KeySet_t
Definition: params.h:233
Definition: paramsInfo.h:26
Definition: elibase.h:130
Describes Parameters to a Component.
Definition: elibase.h:48