43 #ifndef TEUCHOS_PARAMETER_LIST_H 44 #define TEUCHOS_PARAMETER_LIST_H 50 #include "Teuchos_ParameterListExceptions.hpp" 52 #include "Teuchos_StringIndexedOrderedValueObjectContainer.hpp" 53 #include "Teuchos_Assert.hpp" 151 PrintOptions() : indent_(0), showTypes_(
false), showFlags_(
false), showDoc_(
false) {}
152 PrintOptions& indent(
int _indent) { indent_ = _indent;
return *
this; }
153 PrintOptions& showTypes(
bool _showTypes) { showTypes_ = _showTypes;
return *
this; }
154 PrintOptions& showFlags(
bool _showFlags) { showFlags_ = _showFlags;
return *
this; }
155 PrintOptions& showDoc(
bool _showDoc) { showDoc_ = _showDoc;
return *
this; }
156 PrintOptions& incrIndent(
int indents) { indent_ += indents;
return *
this; }
157 int indent()
const {
return indent_; }
158 bool showTypes()
const {
return showTypes_; }
159 bool showFlags()
const {
return showFlags_; }
160 bool showDoc()
const {
return showDoc_; }
187 Ordinal numParams ()
const;
252 std::string
const& docString =
"",
260 std::string
const& name,
char value[], std::string
const& docString =
"",
269 std::string
const& name,
const char value[], std::string
const& docString =
"",
277 std::string
const& name,
ParameterList const& value, std::string
const& docString =
"" 307 T&
get(
const std::string& name, T def_value);
312 std::string&
get(
const std::string& name,
char def_value[]);
317 std::string&
get(
const std::string& name,
const char def_value[]);
350 T&
get (
const std::string& name);
380 const T&
get (
const std::string& name)
const;
389 T* getPtr(
const std::string& name);
398 const T* getPtr(
const std::string& name)
const;
457 std::string
const& name,
bool throwIfNotExists = true
471 const std::string& name,
bool mustAlreadyExist =
false 472 ,
const std::string& docString =
"" 487 const std::string& name()
const;
493 bool isParameter (
const std::string& name)
const;
499 bool isSublist (
const std::string& name)
const;
507 bool isType (
const std::string& name)
const;
509 #ifndef DOXYGEN_SHOULD_SKIP_THIS 521 bool isType(
const std::string& name, T* ptr)
const;
538 std::ostream& print(std::ostream& os,
const PrintOptions &printOptions)
const;
542 std::ostream& print(std::ostream& os,
int indent = 0,
bool showTypes =
false,
bool showFlags =
true )
const;
545 void unused(std::ostream& os)
const;
548 std::string currentParametersString()
const;
616 void validateParameters(
618 int const depth = 1000,
660 void validateParametersAndSetDefaults(
662 int const depth = 1000
676 void validateEntryExists(
const std::string &funcName,
const std::string &name,
681 void validateEntryType(
const std::string &funcName,
const std::string &name,
684 void validateEntryIsList(
const std::string &name,
const ParameterEntry &entry)
const;
686 void validateMissingSublistMustExist(
const std::string &baselist_name,
687 const std::string &sublist_name,
const bool mustAlreadyExist)
const;
689 void updateSubListNames(
int depth = 0);
708 bool disableRecursiveValidation_;
775 static std::string name() {
return "ParameterList"; }
795 return !( list1 == list2 );
831 std::string
const& name_in, T
const& value_in, std::string
const& docString_in,
837 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
839 const std::string docString =
840 (docString_in.length() ? docString_in : param->docString());
842 (
nonnull(validator_in) ? validator_in : param->validator());
844 ParameterEntry param_new(value_in,
false,
false, docString, validator );
846 validator->validate(param_new, name_in, this->
name());
852 ParameterEntry param_new(value_in,
false,
false, docString_in, validator_in);
854 param_new.
validator()->validate(param_new, name_in, this->
name());
856 params_.
setObj(name_in, param_new);
864 std::string
const& name_in,
char value[], std::string
const& docString
867 {
return set(name_in, std::string(value), docString, validator); }
872 const std::string& name_in,
const char value[],
const std::string &docString
875 {
return set( name_in, std::string(value), docString, validator ); }
880 std::string
const& name_in,
ParameterList const& value, std::string
const&
891 params_.
setObj(name_in, entry_in);
904 if (param_idx == SIOVOCB::getInvalidOrdinal()) {
909 this->
template validateEntryType<T>(
"get", name_in, *param);
910 return getValue<T>(*param);
916 {
return get(name_in, std::string(def_value)); }
921 {
return get(name_in, std::string(def_value)); }
928 validateEntryExists(
"get",name_in,foundEntry);
929 this->
template validateEntryType<T>(
"get",name_in,*foundEntry);
930 return getValue<T>(*foundEntry);
938 validateEntryExists(
"get",name_in,foundEntry);
939 this->
template validateEntryType<T>(
"get",name_in,*foundEntry);
940 return getValue<T>(*foundEntry);
950 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
952 if (param_ptr->isType<T>()) {
953 return ¶m_ptr->getValue<T>(0);
971 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
973 if (param_ptr->isType<T>()) {
974 return ¶m_ptr->getValue<T>(0);
987 validateEntryExists(
"get", name_in, foundEntry);
996 validateEntryExists(
"get", name_in, foundEntry);
1007 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1020 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1032 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1044 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1045 return rcpFromPtr(params_.
getObjPtr(param_idx));
1061 #ifndef DOXYGEN_SHOULD_SKIP_THIS 1062 template<
typename T>
1067 if (param_idx != SIOVOCB::getInvalidOrdinal()) {
1068 return params_.
getObjPtr(param_idx)->isType<T>();
1075 template<
typename T>
1078 return this->
isType(name_in, static_cast<T*>(0));
1087 return params_.
begin();
1093 return params_.
end();
1118 inline ParameterList::Iterator ParameterList::nonconstEnd()
1124 inline ParameterEntry& ParameterList::nonconstEntry(Iterator i)
1130 template<
typename T>
1132 void ParameterList::validateEntryType(
1133 const std::string &,
const std::string &name_in,
1134 const ParameterEntry &entry_in
1138 entry_in.getAny().type() !=
typeid(T), Exceptions::InvalidParameterType
1139 ,
"Error! An attempt was made to access parameter \""<<name_in<<
"\"" 1140 " of type \""<<entry_in.getAny().typeName()<<
"\"" 1141 "\nin the parameter (sub)list \""<<this->
name()<<
"\"" 1157 template<
typename T>
1160 return l.template get<T>(name);
1169 template<
typename T>
1173 return getParameter<T>(l,name);
1183 template<
typename T>
1186 return l.template get<T>(name);
1197 template<
typename T>
1201 return l.template getPtr<T>(name);
1212 template<
typename T>
1216 return l.template getPtr<T>(name);
1226 template<
typename T>
1230 return l.
isType( name, (T*)NULL );
1240 template<
typename T>
1244 return l.
isType( name, (T*)NULL );
1259 template<
typename T>
1261 const std::string ¶mName
1267 paramList->
set(paramName,toString(array));
1335 template<
typename T>
1338 ,
const std::string ¶mName
1339 ,
const int arrayDim = -1
1340 ,
const bool mustExist =
true 1343 std::string arrayStr;
1345 arrayStr = getParameter<std::string>(paramList,paramName);
1349 *arrayStrPtr = getParameterPtr<std::string>(paramList,paramName);
1351 arrayStr = *arrayStrPtr;
1359 a = fromStringToArray<T>(arrayStr);
1364 ,
"Error! The parameter \""<<paramName<<
"\"\n" 1365 "in the sublist \""<<paramList.
name()<<
"\"\n" 1366 "exists, but the std::string value:\n" 1370 "is not a valid array represntation!" 1374 ( ( a.
size()>0 && arrayDim>=0 ) && static_cast<int>(a.
size())!=arrayDim )
1376 ,
"Error! The parameter \""<<paramName<<
"\"\n" 1377 "in the sublist \""<<paramList.
name()<<
"\"\n" 1378 "exists and is a valid array, but the dimension of\n" 1379 "the read in array a.size() = " << a.
size() <<
"\n" 1380 "was not equal to the expected size arrayDim = " << arrayDim <<
"!" 1392 bool mustAlreadyExist =
false,
const std::string& docString =
"" 1395 return rcpWithEmbeddedObjPostDestroy(
1396 ¶mList->
sublist(name, mustAlreadyExist, docString), paramList, false );
1408 return rcpWithEmbeddedObjPostDestroy(
1409 ¶mList->
sublist(name), paramList, false );
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.
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)
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.
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.
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.
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.
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.
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...