43#ifndef TEUCHOS_PARAMETER_LIST_H
44#define TEUCHOS_PARAMETER_LIST_H
287 std::string
const& docString =
"",
295 std::string
const&
name,
char value[], std::string
const& docString =
"",
304 std::string
const&
name,
const char value[], std::string
const& docString =
"",
312 std::string
const&
name,
ParameterList const& value, std::string
const& docString =
""
319 template <
typename U,
typename = std::enable_if_t<std::is_same_v<std::decay_t<U>, ParameterEntry>>>
329 int const depth = 1000);
352 T&
get(
const std::string&
name, T def_value);
357 std::string&
get(
const std::string&
name,
char def_value[]);
362 std::string&
get(
const std::string&
name,
const char def_value[]);
395 T&
get (
const std::string&
name);
425 const T&
get (
const std::string&
name)
const;
443 const T*
getPtr(
const std::string&
name)
const;
505 std::string
const&
name,
bool throwIfNotExists =
true
519 const std::string&
name,
bool mustAlreadyExist =
false,
520 const std::string& docString =
""
529 const std::string& docString =
""
544 const std::string&
name()
const;
566#ifndef DOXYGEN_SHOULD_SKIP_THIS
602 std::ostream&
print(std::ostream& os,
int indent = 0,
bool showTypes =
false,
bool showFlags =
true,
bool showDefault =
true )
const;
605 void unused(std::ostream& os)
const;
678 int const depth = 1000,
722 int const depth = 1000
752 const bool left_to_right =
true);
776 const std::string &sublist_name,
const bool mustAlreadyExist)
const;
871 static std::string
name() {
return "ParameterList"; }
891 return !( list1 == list2 );
920 bool verbose =
false);
956 std::string
const& name_in, T
const& value_in, std::string
const& docString_in,
961 const Ordinal param_idx =
params_.getObjOrdinalIndex(name_in);
962 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
964 const std::string docString =
965 (docString_in.length() ? docString_in : param->docString());
967 (
nonnull(validator_in) ? validator_in : param->validator());
969 ParameterEntry param_new(value_in,
false,
false, docString, validator );
971 validator->validate(param_new, name_in, this->
name());
977 ParameterEntry param_new(value_in,
false,
false, docString_in, validator_in);
979 param_new.
validator()->validate(param_new, name_in, this->
name());
981 params_.setObj(name_in, param_new);
989 std::string
const& name_in,
char value[], std::string
const& docString
992{
return set(name_in, std::string(value), docString, validator); }
997 const std::string& name_in,
const char value[],
const std::string &docString
1000{
return set( name_in, std::string(value), docString, validator ); }
1005 std::string
const& name_in,
ParameterList const& value, std::string
const&
1013template <
typename U,
typename>
1017 params_.setObj(name_in, std::forward<U>(entry_in));
1026 for (itr = this->
begin(); itr != this->
end(); ++itr){
1027 const std::string &entry_name = itr->first;
1028 if (this->
isSublist(entry_name) && depth > 0){
1032 if (theEntry->
isType<T>()){
1047 Ordinal param_idx =
params_.getObjOrdinalIndex(name_in);
1048 if (param_idx == SIOVOCB::getInvalidOrdinal()) {
1060{
return get(name_in, std::string(def_value)); }
1065{
return get(name_in, std::string(def_value)); }
1093 const Ordinal param_idx =
params_.getObjOrdinalIndex(name_in);
1094 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1096 if (param_ptr->isType<T>()) {
1097 return ¶m_ptr->getValue<T>(0);
1114 const Ordinal param_idx =
params_.getObjOrdinalIndex(name_in);
1115 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1117 if (param_ptr->isType<T>()) {
1118 return ¶m_ptr->getValue<T>(0);
1150 const Ordinal param_idx =
params_.getObjOrdinalIndex(name_in);
1151 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1152 return &*
params_.getNonconstObjPtr(param_idx);
1163 const Ordinal param_idx =
params_.getObjOrdinalIndex(name_in);
1164 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1165 return &*
params_.getObjPtr(param_idx);
1175 const Ordinal param_idx =
params_.getObjOrdinalIndex(name_in);
1176 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1187 const Ordinal param_idx =
params_.getObjOrdinalIndex(name_in);
1188 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1210#ifndef DOXYGEN_SHOULD_SKIP_THIS
1216 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1227 return this->
isType(name_in,
static_cast<T*
>(0));
1263 return params_.nonconstBegin();
1282 const std::string &,
const std::string &name_in,
1288 ,
"Error! An attempt was made to access parameter \""<<name_in<<
"\""
1290 "\nin the parameter (sub)list \""<<this->name()<<
"\""
1410 const std::string ¶mName
1487 ,
const std::string ¶mName
1488 ,
const int arrayDim = -1
1489 ,
const bool mustExist =
true
1492 std::string arrayStr;
1500 arrayStr = *arrayStrPtr;
1513 ,
"Error! The parameter \""<<paramName<<
"\"\n"
1514 "in the sublist \""<<paramList.
name()<<
"\"\n"
1515 "exists, but the std::string value:\n"
1519 "is not a valid array represntation!"
1523 ( ( a.
size()>0 && arrayDim>=0 ) &&
static_cast<int>(a.
size())!=arrayDim )
1525 ,
"Error! The parameter \""<<paramName<<
"\"\n"
1526 "in the sublist \""<<paramList.
name()<<
"\"\n"
1527 "exists and is a valid array, but the dimension of\n"
1528 "the read in array a.size() = " << a.
size() <<
"\n"
1529 "was not equal to the expected size arrayDim = " << arrayDim <<
"!"
1551 bool param_exists =
false;
1552 bool overwrite =
false;
1553 if (paramName == newName){
1557 param_exists =
true;
1559 "The parameter " << paramName <<
" is not of type " <<
typeid(T).name());
1561 std::logic_error,
"The parameter " << newName <<
" already exists in this "
1565 pl.
set(newName, params);
1567 return param_exists;
1577 bool mustAlreadyExist =
false,
const std::string& docString =
""
1581 ¶mList->sublist(
name, mustAlreadyExist, docString), paramList,
false );
1594 ¶mList->sublist(
name), paramList,
false );
Templated array class derived from the STL std::vector.
#define TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT
Object held as the "value" in the Teuchos::ParameterList std::map.
Parameter List Modifier class.
Reference-counted pointer class and non-member templated function implementations.
Provides std::map class for deficient platforms.
ParameterList()=default
Constructor.
Replacement for std::vector that is compatible with the Teuchos Memory Management classes.
Array< T > fromStringToArray(const std::string &arrayStr)
Converts from std::string representation (as created by toString()) back into the array object.
This object is held as the "value" in the Teuchos::ParameterList std::map.
void setValidator(RCP< const ParameterEntryValidator > const &validator)
Set the validator.
bool isType() const
Test the type of the data being contained.
any & getAny(bool activeQry=true)
Direct access to the Teuchos::any data value underlying this object. The bool argument activeQry (def...
RCP< const ParameterEntryValidator > validator() const
Return the (optional) validator object.
T & getValue(const ParameterEntry &entry)
A templated helper function for returning the value of type T held in the ParameterEntry object,...
Utility class for setting and passing in print options.
PrintOptions & showFlags(bool _showFlags)
PrintOptions & indent(int _indent)
PrintOptions copy() const
PrintOptions & showTypes(bool _showTypes)
PrintOptions & showDefault(bool _showDefault)
PrintOptions & showDoc(bool _showDoc)
PrintOptions & incrIndent(int indents)
A list of parameters of arbitrary type.
TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT bool operator==(const ParameterList &list1, const ParameterList &list2)
Returns true if two parameter lists are the same.
bool isParameterType(const ParameterList &l, const std::string &name)
A templated helper function for determining the type of a parameter entry for a const list....
T & get(ParameterList &l, const std::string &name)
A shorter name for getParameter().
void reconcileParameterList(ParameterList &validParamList, const bool left_to_right=true)
Reconcile a parameter list after validation.
TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT bool haveSameValues(const ParameterList &list1, const ParameterList &list2, bool verbose=false)
Returns true if two parameter lists have the same values.
ParameterList & setEntry(const std::string &name, U &&entry)
Set a parameter directly as a ParameterEntry.
ParameterList & setParameters(const ParameterList &source)
const ParameterEntry & entry(ConstIterator i) const
Access to ParameterEntry (i.e., returns i->second).
RCP< const ParameterListModifier > modifier_
ConstIterator end() const
An iterator pointing beyond the last entry.
bool isType(const std::string &name) const
Whether the given parameter exists in this list and has type T.
Ordinal numParams() const
Get the number of stored parameters.
ParameterEntry & nonconstEntry(Iterator i)
Access to ParameterEntry (i.e., returns i->second).
void validateEntryIsList(const std::string &name, const ParameterEntry &entry) const
Validate a sublist param is indeed a sublist.
ParameterList & setParametersNotAlreadySet(const ParameterList &source)
void setStringParameterFromArray(const std::string ¶mName, const Array< T > &array, ParameterList *paramList)
Set a std::string parameter representation of an array.
params_t params_
Parameter list.
RCP< const ParameterListModifier > getModifier() const
Return the optional modifier object.
void validateParameters(ParameterList const &validParamList, int const depth=1000, EValidateUsed const validateUsed=VALIDATE_USED_ENABLED, EValidateDefaults const validateDefaults=VALIDATE_DEFAULTS_ENABLED) const
Validate the parameters in this list given valid selections in the input list.
void unused(std::ostream &os) const
Print out unused parameters in the ParameterList.
void validateParametersAndSetDefaults(ParameterList const &validParamList, int const depth=1000)
Validate the parameters in this list given valid selections in the input list and set defaults for th...
RCP< ParameterList > sublist(const RCP< ParameterList > ¶mList, const std::string &name, bool mustAlreadyExist=false, const std::string &docString="")
Return a RCP to a sublist in another RCP-ed parameter list.
ParameterList & sublist(const std::string &name, bool mustAlreadyExist=false, const std::string &docString="")
Creates an empty sublist and returns a reference to the sublist name. If the list already exists,...
ParameterList & set(std::string const &name, T const &value, std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
Set a parameter whose value has type T.
RCP< ParameterList > createParameterList(const std::string &name)
Nonmember constructor.
bool disableRecursiveModification_
Modify into list or not.
const T & getParameter(const ParameterList &l, const std::string &name)
A templated helper function for getting a parameter from a const list. This helper function prevents ...
Array< T > getArrayFromStringParameter(const ParameterList ¶mList, const std::string ¶mName, const int arrayDim=-1, const bool mustExist=true)
Get an Array object (with entries of type T) from a parameter holding a std::string representation of...
Iterator nonconstEnd()
An iterator pointing beyond the last entry.
RCP< const ParameterList > sublist(const RCP< const ParameterList > ¶mList, const std::string &name)
Return a RCP to a sublist in another RCP-ed parameter list.
RCP< ParameterList > parameterList(const ParameterList &source)
Nonmember constructor.
void print() const
Print function to use in debugging in a debugger.
TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT bool haveSameValuesSorted(const ParameterList &list1, const ParameterList &list2, bool verbose=false)
Returns true if two parameter lists have the same values independent of ordering.
const std::string & name() const
The name of this ParameterList.
ParameterList()=default
Constructor.
void modifyParameterList(ParameterList &validParamList, int const depth=1000)
Modify the valid parameter list prior to validation.
bool replaceParameterWithArray(const std::string ¶mName, const std::string &newName, ParameterList &pl)
Replace a parameter with an array containing the parameter.
bool isSublist(const std::string &name) const
Whether the given sublist exists in this list.
params_t::Iterator Iterator
Parameter container iterator typedef.
std::string & get(const std::string &name, const char def_value[])
Specialization of get(), where the nominal value is a character string. Both char* and std::string ar...
ParameterList & disableRecursiveValidation()
ParameterList & disableRecursiveReconciliation()
bool disableRecursiveValidation_
Validate into list or not.
ParameterList & set(std::string const &name, const char value[], std::string const &docString="", RCP< const ParameterEntryValidator > const &validator=null)
Specialization of set() for a parameter which is a const char[].
ParameterEntry * getEntryPtr(const std::string &name)
Retrieves the pointer for an entry with the name name if it exists.
params_t::ConstIterator ConstIterator
Parameter container const iterator typedef.
const T * getParameterPtr(const ParameterList &l, const std::string &name)
A templated helper function for getting a pointer to a parameter from a non-const list,...
std::string name_
Name of the (sub)list.
ConstIterator begin() const
An iterator pointing to the first entry.
StringIndexedOrderedValueObjectContainer< ParameterEntry > params_t
Internal data-structure.
RCP< ParameterList > createParameterList()
Nonmember constructor.
ParameterList & disableRecursiveModification()
RCP< ParameterList > parameterList()
Nonmember constructor.
void validateEntryExists(const std::string &funcName, const std::string &name, const ParameterEntry *entry) const
Validate that a parameter exists.
void validateMissingSublistMustExist(const std::string &baselist_name, const std::string &sublist_name, const bool mustAlreadyExist) const
Throw a sublist does not exist exception.
bool disableRecursiveReconciliation_
Reconcile into list or not.
ParameterEntry & getEntry(const std::string &name)
Retrieves an entry with the name name.
std::string currentParametersString() const
Create a single formated std::string of all of the zero-level parameters in this list.
bool isParameterType(ParameterList &l, const std::string &name)
A templated helper function for determining the type of a parameter entry for a non-const list....
void validateEntryType(const std::string &funcName, const std::string &name, const ParameterEntry &entry) const
Validate that a type is the same.
RCP< ParameterList > parameterList(const std::string &name)
Nonmember constructor.
bool operator!=(const ParameterList &list1, const ParameterList &list2)
Returns true if two parameter lists are not the same.
T & getParameter(ParameterList &l, const std::string &name)
A templated helper function for getting a parameter from a non-const list. This helper function preve...
void recursivelySetValidator(RCP< const ParameterEntryValidator > const &validator, int const depth=1000)
Recursively attach a validator to parameters of type T.
T * getPtr(const std::string &name)
Retrieves the pointer for parameter name of type T from a list. A null pointer is returned if this pa...
bool isParameter(const std::string &name) const
Whether the given parameter exists in this list.
T & get(const std::string &name, T def_value)
Return the parameter's value, or the default value if it is not there.
TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT bool haveSameModifiers(const ParameterList &list1, const ParameterList &list2)
Returns true if two parameter lists have the same modifiers.
T * getParameterPtr(ParameterList &l, const std::string &name)
A templated helper function for getting a pointer to a parameter from a non-const list,...
ParameterList & setName(const std::string &name)
Set the name of *this list.
RCP< ParameterEntry > getEntryRCP(const std::string &name)
Retrieves the RCP for an entry with the name name if it exists.
ParameterList & disableRecursiveAll()
bool remove(std::string const &name, bool throwIfNotExists=true)
Remove a parameter (does not depend on the type of the parameter).
void updateSubListNames(int depth=0)
Update sublist names recursively.
Iterator nonconstBegin()
An iterator pointing to the first entry.
void setModifier(RCP< const ParameterListModifier > const &modifier)
EValidateDefaults
Validation defaults enum.
EValidateUsed
Validation used enum.
std::ostream & operator<<(std::ostream &os, const ParameterList &l)
Output stream operator for handling the printing of the parameter list.
Simple wrapper class for raw pointers to single objects where no persisting relationship exists.
Ptr< T > ptr(T *p)
Create a pointer to an object from a raw pointer.
Smart reference counting pointer class for automatic garbage collection.
RCP< T > rcpFromPtr(const Ptr< T > &ptr)
Create an RCP<T> from a Ptr<T> object.
RCP< T > rcpWithEmbeddedObjPostDestroy(T *p, const Embedded &embedded, bool owns_mem=true)
Create an RCP with and also put in an embedded object.
Base types for StringIndexedOrderedValueObjectContainer.
String indexed ordered value-type object container class.
Ordinal getObjOrdinalIndex(const std::string &key) const
Get the ordinal index given the string key.
FilteredIterator< typename key_and_obj_array_t::const_iterator, SelectActive< ParameterEntry > > ConstIterator
FilteredIterator< typename key_and_obj_array_t::iterator, SelectActive< ParameterEntry > > Iterator
Ptr< const ObjType > getObjPtr(const Ordinal &idx) const
Get a const semi-persisting association with the stored object indexed by ordinal.
Tuple< T, 1 > tuple(const T &a)
Create a Tuple<T,1>.
static std::string concreteName(const ParameterList &)
static std::string name()
Default traits class that just returns typeid(T).name().
static std::string name()
std::string typeName() const
Return the name of the type.
const std::type_info & type() const
Return the type of value being stored.
#define TEUCHOS_TEST_FOR_EXCEPTION_PURE_MSG(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
This macro is designed to be a short version of TEUCHOS_TEST_FOR_EXCEPTION() that is easier to call.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
bool nonnull(const std::shared_ptr< T > &p)
Returns true if p.get()!=NULL.
@ VALIDATE_DEFAULTS_ENABLED
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
@ VALIDATE_DEFAULTS_DISABLED
std::string toString(const HashSet< Key > &h)