43 #ifndef TEUCHOS_PARAMETER_LIST_H 44 #define TEUCHOS_PARAMETER_LIST_H 50 #include "Teuchos_ParameterListExceptions.hpp" 53 #include "Teuchos_StringIndexedOrderedValueObjectContainer.hpp" 54 #include "Teuchos_Assert.hpp" 152 PrintOptions() : indent_(0), showTypes_(
false), showFlags_(
false), showDoc_(
false), showDefault_(
true) {}
153 PrintOptions& indent(
int _indent) { indent_ = _indent;
return *
this; }
154 PrintOptions& showTypes(
bool _showTypes) { showTypes_ = _showTypes;
return *
this; }
155 PrintOptions& showFlags(
bool _showFlags) { showFlags_ = _showFlags;
return *
this; }
156 PrintOptions& showDoc(
bool _showDoc) { showDoc_ = _showDoc;
return *
this; }
157 PrintOptions& showDefault(
bool _showDefault) { showDefault_ = _showDefault;
return *
this; }
158 PrintOptions& incrIndent(
int indents) { indent_ += indents;
return *
this; }
159 int indent()
const {
return indent_; }
160 bool showTypes()
const {
return showTypes_; }
161 bool showFlags()
const {
return showFlags_; }
162 bool showDoc()
const {
return showDoc_; }
163 bool showDefault()
const {
return showDefault_; }
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 =
"" 328 int const depth = 1000);
351 T&
get(
const std::string& name, T def_value);
356 std::string&
get(
const std::string& name,
char def_value[]);
361 std::string&
get(
const std::string& name,
const char def_value[]);
394 T&
get (
const std::string& name);
424 const T&
get (
const std::string& name)
const;
433 T* getPtr(
const std::string& name);
442 const T* getPtr(
const std::string& name)
const;
504 std::string
const& name,
bool throwIfNotExists = true
518 const std::string& name,
bool mustAlreadyExist =
false,
519 const std::string& docString =
"" 528 const std::string& docString =
"" 543 const std::string& name()
const;
549 bool isParameter (
const std::string& name)
const;
555 bool isSublist (
const std::string& name)
const;
563 bool isType (
const std::string& name)
const;
565 #ifndef DOXYGEN_SHOULD_SKIP_THIS 577 bool isType(
const std::string& name, T* ptr)
const;
581 Ordinal numParams ()
const;
597 std::ostream& print(std::ostream& os,
const PrintOptions &printOptions)
const;
601 std::ostream& print(std::ostream& os,
int indent = 0,
bool showTypes =
false,
bool showFlags =
true,
bool showDefault =
true )
const;
604 void unused(std::ostream& os)
const;
607 std::string currentParametersString()
const;
675 void validateParameters(
677 int const depth = 1000,
719 void validateParametersAndSetDefaults(
721 int const depth = 1000
738 void modifyParameterList(
ParameterList &validParamList,
int const depth = 1000);
751 const bool left_to_right =
true);
764 void validateEntryExists(
const std::string &funcName,
const std::string &name,
769 void validateEntryType(
const std::string &funcName,
const std::string &name,
772 void validateEntryIsList(
const std::string &name,
const ParameterEntry &entry)
const;
774 void validateMissingSublistMustExist(
const std::string &baselist_name,
775 const std::string &sublist_name,
const bool mustAlreadyExist)
const;
777 void updateSubListNames(
int depth = 0);
782 std::string name_ =
"ANONYMOUS";
796 bool disableRecursiveValidation_ =
false;
799 bool disableRecursiveModification_ =
false;
802 bool disableRecursiveReconciliation_ =
false;
870 static std::string name() {
return "ParameterList"; }
890 return !( list1 == list2 );
901 TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT
bool haveSameModifiers (
const ParameterList& list1,
919 bool verbose =
false);
933 TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT
bool haveSameValuesSorted(
const ParameterList& list1,
955 std::string
const& name_in, T
const& value_in, std::string
const& docString_in,
961 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
963 const std::string docString =
964 (docString_in.length() ? docString_in : param->docString());
966 (
nonnull(validator_in) ? validator_in : param->validator());
968 ParameterEntry param_new(value_in,
false,
false, docString, validator );
970 validator->validate(param_new, name_in, this->
name());
976 ParameterEntry param_new(value_in,
false,
false, docString_in, validator_in);
978 param_new.
validator()->validate(param_new, name_in, this->
name());
980 params_.
setObj(name_in, param_new);
988 std::string
const& name_in,
char value[], std::string
const& docString
991 {
return set(name_in, std::string(value), docString, validator); }
996 const std::string& name_in,
const char value[],
const std::string &docString
999 {
return set( name_in, std::string(value), docString, validator ); }
1004 std::string
const& name_in,
ParameterList const& value, std::string
const&
1015 params_.
setObj(name_in, entry_in);
1020 template<
typename T>
1025 for (itr = this->
begin(); itr != this->
end(); ++itr){
1026 const std::string &entry_name = itr->first;
1027 if (this->
isSublist(entry_name) && depth > 0){
1031 if (theEntry->
isType<T>()){
1042 template<
typename T>
1047 if (param_idx == SIOVOCB::getInvalidOrdinal()) {
1052 this->
template validateEntryType<T>(
"get", name_in, *param);
1053 return getValue<T>(*param);
1059 {
return get(name_in, std::string(def_value)); }
1064 {
return get(name_in, std::string(def_value)); }
1067 template<
typename T>
1071 validateEntryExists(
"get",name_in,foundEntry);
1072 this->
template validateEntryType<T>(
"get",name_in,*foundEntry);
1073 return getValue<T>(*foundEntry);
1077 template<
typename T>
1081 validateEntryExists(
"get",name_in,foundEntry);
1082 this->
template validateEntryType<T>(
"get",name_in,*foundEntry);
1083 return getValue<T>(*foundEntry);
1087 template<
typename T>
1093 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1095 if (param_ptr->isType<T>()) {
1096 return ¶m_ptr->getValue<T>(0);
1108 template<
typename T>
1114 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1116 if (param_ptr->isType<T>()) {
1117 return ¶m_ptr->getValue<T>(0);
1130 validateEntryExists(
"get", name_in, foundEntry);
1139 validateEntryExists(
"get", name_in, foundEntry);
1150 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1163 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1175 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1187 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1188 return rcpFromPtr(params_.
getObjPtr(param_idx));
1196 {
return modifier_; }
1209 #ifndef DOXYGEN_SHOULD_SKIP_THIS 1210 template<
typename T>
1215 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1216 return params_.
getObjPtr(param_idx)->isType<T>();
1223 template<
typename T>
1226 return this->
isType(name_in, static_cast<T*>(0));
1235 return params_.
begin();
1241 return params_.
end();
1266 inline ParameterList::Iterator ParameterList::nonconstEnd()
1272 inline ParameterEntry& ParameterList::nonconstEntry(Iterator i)
1278 template<
typename T>
1280 void ParameterList::validateEntryType(
1281 const std::string &,
const std::string &name_in,
1282 const ParameterEntry &entry_in
1286 entry_in.getAny().type() !=
typeid(T), Exceptions::InvalidParameterType
1287 ,
"Error! An attempt was made to access parameter \""<<name_in<<
"\"" 1288 " of type \""<<entry_in.getAny().typeName()<<
"\"" 1289 "\nin the parameter (sub)list \""<<this->
name()<<
"\"" 1305 template<
typename T>
1308 return l.template get<T>(name);
1317 template<
typename T>
1321 return getParameter<T>(l,name);
1331 template<
typename T>
1334 return l.template get<T>(name);
1345 template<
typename T>
1349 return l.template getPtr<T>(name);
1360 template<
typename T>
1364 return l.template getPtr<T>(name);
1374 template<
typename T>
1378 return l.
isType( name, (T*)NULL );
1388 template<
typename T>
1392 return l.
isType( name, (T*)NULL );
1407 template<
typename T>
1409 const std::string ¶mName
1415 paramList->
set(paramName,toString(array));
1483 template<
typename T>
1486 ,
const std::string ¶mName
1487 ,
const int arrayDim = -1
1488 ,
const bool mustExist =
true 1491 std::string arrayStr;
1493 arrayStr = getParameter<std::string>(paramList,paramName);
1497 *arrayStrPtr = getParameterPtr<std::string>(paramList,paramName);
1499 arrayStr = *arrayStrPtr;
1507 a = fromStringToArray<T>(arrayStr);
1512 ,
"Error! The parameter \""<<paramName<<
"\"\n" 1513 "in the sublist \""<<paramList.
name()<<
"\"\n" 1514 "exists, but the std::string value:\n" 1518 "is not a valid array represntation!" 1522 ( ( a.
size()>0 && arrayDim>=0 ) && static_cast<int>(a.
size())!=arrayDim )
1524 ,
"Error! The parameter \""<<paramName<<
"\"\n" 1525 "in the sublist \""<<paramList.
name()<<
"\"\n" 1526 "exists and is a valid array, but the dimension of\n" 1527 "the read in array a.size() = " << a.
size() <<
"\n" 1528 "was not equal to the expected size arrayDim = " << arrayDim <<
"!" 1546 template<
typename T>
1550 bool param_exists =
false;
1551 bool overwrite =
false;
1552 if (paramName == newName){
1556 param_exists =
true;
1558 "The parameter " << paramName <<
" is not of type " <<
typeid(T).name());
1560 std::logic_error,
"The parameter " << newName <<
" already exists in this " 1564 pl.
set(newName, params);
1566 return param_exists;
1576 bool mustAlreadyExist =
false,
const std::string& docString =
"" 1579 return rcpWithEmbeddedObjPostDestroy(
1580 ¶mList->
sublist(name, mustAlreadyExist, docString), paramList, false );
1592 return rcpWithEmbeddedObjPostDestroy(
1593 ¶mList->
sublist(name), paramList, false );
bool replaceParameterWithArray(const std::string ¶mName, const std::string &newName, ParameterList &pl)
Replace a parameter with an array containing the parameter.
Object held as the "value" in the Teuchos::ParameterList std::map.
C++ Standard Library compatable filtered iterator.
Ordinal getObjOrdinalIndex(const std::string &key) const
Get the ordinal index given the string key.
Ptr< const ObjType > getObjPtr(const Ordinal &idx) const
Get a const semi-persisting association with the stored object indexed by ordinal.
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...
RCP< ParameterEntry > getEntryRCP(const std::string &name)
Retrieves the RCP for an entry with the name name if it exists.
void setValidator(RCP< const ParameterEntryValidator > const &validator)
Set the validator.
RCP< ParameterList > createParameterList()
Nonmember constructor.
RCP< ParameterList > createParameterList(const std::string &name)
Nonmember constructor.
ConstIterator begin() const
An iterator pointing to the first entry.
T & get(const std::string &name, T def_value)
Return the parameter's value, or the default value if it is not there.
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.
bool nonnull(const std::shared_ptr< T > &p)
Returns true if p.get()!=NULL.
This object is held as the "value" in the Teuchos::ParameterList std::map.
const ParameterEntry & entry(ConstIterator i) const
Access to ParameterEntry (i.e., returns i->second)
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
bool isSublist(const std::string &name) const
Whether the given sublist exists 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...
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.
void recursivelySetValidator(RCP< const ParameterEntryValidator > const &validator, int const depth=1000)
Recursively attach a validator to parameters of type T.
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...
ConstIterator end() const
ParameterEntry * getEntryPtr(const std::string &name)
Retrieves the pointer for an entry with the name name if it exists.
RCP< ParameterList > parameterList()
Nonmember constructor.
ParameterList & setEntry(const std::string &name, const ParameterEntry &entry)
Set a parameter directly as a ParameterEntry.
ConstIterator end() const
An iterator pointing beyond the last entry.
void print() const
Print function to use in debugging in a debugger.
bool remove(std::string const &name, bool throwIfNotExists=true)
Remove a parameter (does not depend on the type of the parameter).
std::ostream & operator<<(std::ostream &os, const ParameterList &l)
Output stream operator for handling the printing of the parameter list.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
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...
bool operator!=(const ParameterList &list1, const ParameterList &list2)
Returns true if two parameter lists are not the same.
RCP< ParameterList > parameterList(const ParameterList &source)
Nonmember constructor.
params_t::ConstIterator ConstIterator
Parameter container const iterator typedef.
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 ...
bool isType(const std::string &name) const
Whether the given parameter exists in this list and has type T.
Utility class for setting and passing in print options.
ConstIterator begin() const
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...
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.
T * getParameterPtr(ParameterList &l, const std::string &name)
A templated helper function for getting a pointer to a parameter from a non-const list...
RCP< const ParameterEntryValidator > validator() const
Return the (optional) validator object.
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...
A list of parameters of arbitrary type.
Provides std::map class for deficient platforms.
Parameter List Modifier class.
bool isType() const
Test the type of the data being contained.
const std::string & name() const
The name of this ParameterList.
Templated array class derived from the STL std::vector.
Ordinal setObj(const std::string &key, const ObjType &obj)
Set (or reset) object by value and return its ordinal index.
Default traits class that just returns typeid(T).name().
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos, as well as a number of utility routines.
void setStringParameterFromArray(const std::string ¶mName, const Array< T > &array, ParameterList *paramList)
Set a std::string parameter representation of an array.
EValidateDefaults
Validation defaults enum.
bool isParameter(const std::string &name) const
Whether the given parameter exists in this 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 & setName(const std::string &name)
Set the name of *this list.
Smart reference counting pointer class for automatic garbage collection.
RCP< const ParameterListModifier > getModifier() const
Return the optional modifier object.
ParameterEntry & getEntry(const std::string &name)
Retrieves an entry with the name name.
Ptr< ObjType > getNonconstObjPtr(const Ordinal &idx)
Get a nonconst semi-persisting association with the stored object indexed by ordinal.
EValidateUsed
Validation used enum.
RCP< ParameterList > parameterList(const std::string &name)
Nonmember constructor.
Reference-counted pointer class and non-member templated function implementations.
Base types for StringIndexedOrderedValueObjectContainer.
#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...
Simple wrapper class for raw pointers to single objects where no persisting relationship exists...
static std::string name()
#define TEUCHOS_TEST_FOR_EXCEPTION_PURE_MSG(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
Replacement for std::vector that is compatible with the Teuchos Memory Management classes...