11 #ifndef QMCPLUSPLUS_INPUTSECTION_H 12 #define QMCPLUSPLUS_INPUTSECTION_H 19 #include <unordered_set> 20 #include <unordered_map> 70 std::unordered_set<std::string>
bools;
72 std::unordered_set<std::string>
reals;
74 std::unordered_set<std::string>
custom;
78 std::unordered_set<std::string>
enums;
80 std::unordered_map<std::string, std::function<std::any(xmlNodePtr cur, std::string& value_key)>>
delegate_factories_;
83 std::unordered_map<std::string, std::any>
values_;
92 T
get(
const std::string& name)
const 94 if constexpr (std::is_enum<T>::value)
97 return std::any_cast<T>(any_enum);
103 return std::any_cast<T>(
values_.at(name));
141 void init(
const std::unordered_map<std::string, std::any>& init_values);
147 template<
typename ENUM_T>
149 const std::unordered_map<std::string, std::any>& enum_map)
151 std::string lookup_str =
"not found";
152 for (
const auto& enum_node : enum_map)
154 if (enum_node.second.type() ==
typeid(decltype(enum_val)) &&
155 enum_val == std::any_cast<decltype(enum_val)>(enum_node.second))
157 lookup_str = enum_node.first;
178 void readAttributes(xmlNodePtr cur,
const std::string& element_name,
const std::vector<std::string>& do_not_consume);
183 using DelegateHandler = std::function<std::any(xmlNodePtr cur, std::string& value_name)>;
210 [[noreturn]]
virtual std::any
assignAnyEnum(
const std::string& tag)
const;
221 const std::string& name,
222 std::istringstream& svalue);
234 const std::string& enum_value,
235 const std::unordered_map<std::string, std::any>& enum_map);
242 void report(std::ostream& out)
const;
266 void setFromStream(
const std::string& name, std::istringstream& svalue);
271 void setFromValue(
const std::string& name,
const std::any& svalue);
281 void assignValue(
const std::string& name,
const T& value);
285 void handleDelegate(
const std::string& ename,
const xmlNodePtr element);
std::unordered_set< std::string > strings
void handleDelegate(const std::string &ename, const xmlNodePtr element)
factor out delegate handling code for sanity.
std::unordered_set< std::string > reals
void setFromValue(const std::string &name, const std::any &svalue)
Coerce input collected via init into types matching the definition of the input types defined in the ...
helper functions for EinsplineSetBuilder
std::unordered_set< std::string > parameters
bool isBool(const std::string &name) const
std::unordered_map< std::string, std::function< std::any(xmlNodePtr cur, std::string &value_key)> > delegate_factories_
std::vector< std::string > section_name_alternates
For historical reasons some sections must recognize several different names. Assign them to this vari...
bool isMultiple(const std::string &name) const
bool isCustom(const std::string &name) const
std::unordered_set< std::string > positions
std::unordered_map< std::string, std::any > default_values
QMCTraits::FullPrecRealType Real
std::unordered_set< std::string > custom
void readAttributes(xmlNodePtr cur, const std::string &element_name, const std::vector< std::string > &do_not_consume)
reads attributes for both the root node and parameter/child nodes that aren't delegated.
std::unordered_set< std::string > delegates
bool isEnumString(const std::string &name) const
bool isMultiReal(const std::string &name) const
void init(const std::unordered_map< std::string, std::any > &init_values)
virtual void checkParticularValidity()
Do validation for a particular subtype of InputSection Called by check_valid.
std::function< std::any(xmlNodePtr cur, std::string &value_name)> DelegateHandler
Function that returns Input class as std::any.
bool isDelegate(const std::string &name) const
typename QMCTypes< Real, OHMMS_DIM >::PosType Position
std::unordered_set< std::string > integers
This a subclass for runtime errors that will occur on all ranks.
void readXML(xmlNodePtr cur)
Read variable values (initialize) from XML input, call checkValid.
void checkValid()
Check validity of inputs.
std::unordered_set< std::string > attributes
bool isInteger(const std::string &name) const
static std::any lookupAnyEnum(const std::string &enum_name, const std::string &enum_value, const std::unordered_map< std::string, std::any > &enum_map)
Assign any enum helper for InputSection derived class assumes enum lookup table of this form: inline ...
std::unordered_map< std::string, std::any > values_
bool isAttribute(const std::string &name) const
static std::string reverseLookupInputEnumMap(ENUM_T enum_val, const std::unordered_map< std::string, std::any > &enum_map)
Get string represtation of enum class type value from enum_val.
void setFromStream(const std::string &name, std::istringstream &svalue)
void assignValue(const std::string &name, const T &value)
assign value into unordered map respecting values multiplicity It is a fatal exception to assign to a...
std::unordered_set< std::string > required
bool isRequired(const std::string &name) const
bool isString(const std::string &name) const
bool isPosition(const std::string &name) const
std::unordered_set< std::string > multi_strings
std::unordered_set< std::string > bools
bool isMultiString(const std::string &name) const
std::unordered_set< std::string > multi_reals
QTFull::RealType FullPrecRealType
bool setIfInInput(T &var, const std::string &tag)
set var if input section has read the tag
std::unordered_set< std::string > multiple
Input section provides basic parsing and a uniform method of access to the raw parsed input...
void registerDelegate(const std::string &tag, DelegateHandler delegate_handler)
register factory function for delegate input
bool isReal(const std::string &name) const
bool isParameter(const std::string &name) const
bool has(const std::string &name) const
std::string section_name
"Name" of the input section, you must define this in the subtype and the ename, name, type, or method must match.
bool has_default(const std::string &name) const
InputSection & operator=(const InputSection &other)=default
virtual void setFromStreamCustom(const std::string &ename, const std::string &name, std::istringstream &svalue)
Derived class can overrides this to do custom parsing of the element values for Custom elements These...
std::unordered_set< std::string > enums
list of enum inputs which allow a finite set of strings to map to enum values The enum class types an...
virtual std::any assignAnyEnum(const std::string &tag) const
Derived class overrides this to get proper assignment of scoped enum values.