42 #include "Teuchos_StandardParameterEntryValidators.hpp" 46 std::string Teuchos::getVerbosityLevelParameterValueName(
65 true, std::invalid_argument,
"Teuchos::getVerbosityLevelParameterValue" 66 "Name(const Teuchos::EVerbosityLevel): Input argument " << verbLevel <<
67 " has an invalid value. Valid values are VERB_DEFAULT=" <<
VERB_DEFAULT 88 Teuchos::verbosityLevelParameterEntryValidator(
89 std::string
const& defaultParameterName
93 new StringToIntegralParameterEntryValidator<EVerbosityLevel>(
96 getVerbosityLevelParameterValueName(
VERB_NONE),
97 getVerbosityLevelParameterValueName(
VERB_LOW),
99 getVerbosityLevelParameterValueName(
VERB_HIGH),
103 "Use level set in code",
105 "Produce minimal output",
106 "Produce a little more output",
107 "Produce a higher level of output",
108 "Produce the highest level of output" 110 tuple<EVerbosityLevel>(
136 : preferredType_(PREFER_DOUBLE), acceptedTypes_(
AcceptedTypes())
138 finishInitialization();
145 : preferredType_(preferredType), acceptedTypes_(acceptedTypes)
147 finishInitialization();
156 const std::string &sublistName,
const bool activeQuery
159 const any &anyValue = entry.
getAny(activeQuery);
160 if( acceptedTypes_.
allowInt() && anyValue.
type() ==
typeid(int) )
161 return any_cast<
int>(anyValue);
162 if( acceptedTypes_.
allowDouble() && anyValue.
type() ==
typeid(double) )
163 return as<int>(any_cast<
double>(anyValue));
164 if( acceptedTypes_.
allowString() && anyValue.
type() ==
typeid(std::string) )
165 return std::atoi(any_cast<std::string>(anyValue).c_str());
166 throwTypeError(entry,paramName,sublistName);
173 const std::string &sublistName,
const bool activeQuery
176 const any &anyValue = entry.
getAny(activeQuery);
177 if( acceptedTypes_.
allowInt() && anyValue.
type() ==
typeid(int) )
178 return as<double>(any_cast<
int>(anyValue));
179 if( acceptedTypes_.
allowDouble() && anyValue.
type() ==
typeid(double) )
180 return any_cast<
double>(anyValue);
181 if( acceptedTypes_.
allowString() && anyValue.
type() ==
typeid(std::string) )
182 return std::atof(any_cast<std::string>(anyValue).c_str());
183 throwTypeError(entry,paramName,sublistName);
190 const std::string &sublistName,
const bool activeQuery
193 const any &anyValue = entry.
getAny(activeQuery);
194 if( acceptedTypes_.
allowInt() && anyValue.
type() ==
typeid(int) )
196 if( acceptedTypes_.
allowDouble() && anyValue.
type() ==
typeid(double) )
198 if( acceptedTypes_.
allowString() && anyValue.
type() ==
typeid(std::string) )
199 return any_cast<std::string>(anyValue);
200 throwTypeError(entry,paramName,sublistName);
207 const int defaultValue
211 if(entry)
return getInt(*entry,paramName,paramList.
name(),
true);
212 return paramList.
get(paramName,defaultValue);
218 const double defaultValue
222 if(entry)
return getDouble(*entry,paramName,paramList.
name(),
true);
223 return paramList.
get(paramName,defaultValue);
229 const std::string &defaultValue
233 if(entry)
return getString(*entry,paramName,paramList.
name(),
true);
234 return paramList.
get(paramName,defaultValue);
259 return preferredType_;
268 return "anynumberValidator";
273 std::string
const & docString,
278 out <<
"# Accepted types: " << acceptedTypesString_ <<
".\n";
291 std::string
const& paramName,
292 std::string
const& sublistName
300 getDouble(entry, paramName, sublistName,
false);
305 std::string
const& paramName,
306 std::string
const& sublistName,
311 switch(preferredType_) {
314 getInt(*entry,paramName,sublistName,
false),
320 getDouble(*entry,paramName,sublistName,
false),
326 getString(*entry,paramName,sublistName,
false),
339 void AnyNumberParameterEntryValidator::finishInitialization()
342 std::ostringstream oss;
343 bool addedType =
false;
349 if(addedType) oss <<
", ";
354 if(addedType) oss <<
", ";
358 acceptedTypesString_ = oss.str();
362 void AnyNumberParameterEntryValidator::throwTypeError(
364 std::string
const& paramName,
365 std::string
const& sublistName
371 ,
"Error, the parameter {paramName=\""<<paramName<<
"\"" 372 ",type=\""<<entryName<<
"\"}" 373 <<
"\nin the sublist \"" << sublistName <<
"\"" 374 <<
"\nhas the wrong type." 375 <<
"\n\nThe accepted types are: " << acceptedTypesString_ <<
"!";
384 AnyNumberParameterEntryValidator::PREFER_INT,
397 return mustAlreadyExist_;
407 this->mustAlreadyExist_ = shouldFileExist;
408 return mustAlreadyExist_;
413 this->EmptyNameOK_ = isEmptyNameOK;
425 std::string
const &sublistName)
const 431 "The \"" << paramName <<
"\"" <<
432 " parameter in the \"" << sublistName <<
433 "\" sublist is has an error." << std::endl << std::endl <<
434 "Error: The value that you entered was the wrong type." << std::endl <<
435 "Parameter: " << paramName << std::endl <<
436 "Type specified: " << entryName << std::endl <<
437 "Type accepted: " <<
typeid(std::string).name() <<
438 std::endl << std::endl);
439 if(mustAlreadyExist_ && !EmptyNameOK_){
440 std::string fileName = getValue<std::string>(entry);
443 "The \"" << paramName <<
"\"" <<
444 " parameter in the \"" << sublistName <<
445 "\" sublist is has an error." << std::endl << std::endl <<
446 "Error: The file must already exists. The value you entered does " <<
447 "not corresspond to an existing file name." << std::endl <<
448 "Parameter: " << paramName << std::endl <<
449 "File name specified: " << fileName << std::endl << std::endl);
456 return "FilenameValidator";
461 std::string
const &docString, std::ostream &out)
const 464 out <<
"# Validator Used: " << std::endl;
465 out <<
"# FileName Validator" << std::endl;
481 validStrings_(
rcp(new
Array<std::string>(validStrings)))
489 return validStrings_;
496 return validStrings_;
502 std::string
const &sublistName)
const 508 "The \"" << paramName <<
"\"" <<
509 " parameter in the \"" << sublistName <<
510 "\" sublist is has an error." << std::endl << std::endl <<
511 "Error: The value that you entered was the wrong type." <<
512 "Parameter: " << paramName << std::endl <<
513 "Type specified: " << entryName << std::endl <<
518 it = std::find(validStrings_->begin(),
519 validStrings_->end(), getValue<std::string>(entry));
522 "The \"" << paramName <<
"\"" <<
523 " parameter in the \"" << sublistName <<
524 "\" sublist is has an error." << std::endl << std::endl <<
525 "Error: The value that was entered doesn't fall with in " 526 "the range set by the validator." <<
527 "Parameter: " << paramName << std::endl <<
528 "Acceptable Values: " << *validStrings_ << std::endl <<
529 "Value entered: " << getValue<std::string>(entry) << std::endl <<
537 return "StringValidator";
542 std::ostream &out)
const 545 out <<
"# Validator Used: " << std::endl;
546 out <<
"# String Validator" << std::endl;
547 if (validStrings_.
get() && validStrings_->size()){
548 out <<
"# Acceptable Values: " << *validStrings_ << std::endl;
565 Teuchos::anyNumberParameterEntryValidator()
572 Teuchos::anyNumberParameterEntryValidator(
579 preferredType, acceptedTypes
584 void Teuchos::setIntParameter(
585 std::string
const& paramName,
586 int const value, std::string
const& docString,
593 anyNumberParameterEntryValidator(
594 AnyNumberParameterEntryValidator::PREFER_INT, acceptedTypes
596 paramList->
set(paramName, value, docString, paramEntryValidator);
600 void Teuchos::setDoubleParameter(
601 std::string
const& paramName,
602 double const& value, std::string
const& docString,
609 anyNumberParameterEntryValidator(
610 AnyNumberParameterEntryValidator::PREFER_DOUBLE, acceptedTypes
612 paramList->
set(paramName, value, docString, paramEntryValidator);
616 void Teuchos::setNumericStringParameter(
617 std::string
const& paramName,
618 std::string
const& value, std::string
const& docString,
625 anyNumberParameterEntryValidator(
626 AnyNumberParameterEntryValidator::PREFER_STRING, acceptedTypes
628 paramList->
set(paramName, value, docString, paramEntryValidator);
632 int Teuchos::getIntParameter(
634 std::string
const& paramName
642 if ( !
is_null(anyNumValidator) )
643 return anyNumValidator->getInt(entry,paramName,paramList.
name());
645 return any_cast<int>(entry.
getAny());
648 return myAnyNumValidator.
getInt(entry,paramName,paramList.
name());
652 double Teuchos::getDoubleParameter(
654 std::string
const& paramName
662 if ( !
is_null(anyNumValidator) )
663 return anyNumValidator->getDouble(entry,paramName,paramList.
name());
664 if (
typeid(
double) == entry.
getAny().
type() )
665 return any_cast<double>(entry.
getAny());
668 return myAnyNumValidator.
getDouble(entry,paramName,paramList.
name());
672 std::string Teuchos::getNumericStringParameter(
674 std::string
const& paramName
682 if ( !
is_null(anyNumValidator) )
683 return anyNumValidator->getString(entry,paramName,paramList.
name());
684 if (
typeid(std::string) == entry.
getAny().
type() )
685 return any_cast<std::string>(entry.
getAny());
688 return myAnyNumValidator.
getString(entry,paramName,paramList.
name());
ValidStringsList setValidStrings(const Teuchos::Array< std::string > &validStrings)
Sets the Array of valid strings and returns what the current array of valid string now is...
RCP< T > rcp(const boost::shared_ptr< T > &sptr)
Conversion function that takes in a boost::shared_ptr object and spits out a Teuchos::RCP object...
void printDoc(std::string const &docString, std::ostream &out) const
const std::string & name() const
The name of this ParameterList.
ValidStringsList validStringValues() const
Generate output as defined by the object.
static RCP< T > getDummyObject()
Retrieves a dummy object of type T.
bool setFileMustExist(bool shouldFileExist)
Sets whether or not the validator requires the file to already exist.
ValidStringsList validStringValues() const
void setValue(T value, bool isDefault=false, const std::string &docString="", RCP< const ParameterEntryValidator > const &validator=null)
Templated set method that uses the input value type to determine the type of parameter.
FileNameValidator(bool mustAlreadyExist=mustAlreadyExistDefault())
Constructs a FileNameValidator.
Generate only a minimal amount of output.
RCP< const ParameterEntryValidator > validator() const
Return the (optional) validator object.
EPreferredType
Determines what type is the preferred type.
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.
This object is held as the "value" in the Teuchos::ParameterList std::map.
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
const std::string getXMLTypeName() const
bool fileEmptyNameOK() const
Gets the variable describing whether or not this validator is OK with file name being empty (even if ...
Generate the most output possible.
Standard implementation of a ParameterEntryValidator that maps from a list of strings to an enum or i...
AcceptedTypes & allowString(bool _allowString)
Set allow an std::string value or not.
std::string getString(const ParameterEntry &entry, const std::string ¶mName="", const std::string &sublistName="", const bool activeQuery=true) const
Get a std::string value from a parameter entry.
T * get() const
Get the raw C++ pointer to the underlying object.
static std::ostream & printLines(std::ostream &os, const std::string &linePrefix, const std::string &lines)
Print lines with prefix first.
EVerbosityLevel
Verbosity level.
Modified boost::any class, which is a container for a templated value.
void validate(ParameterEntry const &entry, std::string const ¶mName, std::string const &sublistName) const
AcceptedTypes & allowInt(bool _allowInt)
Set allow an int value or not.
static std::string toString(const double &x)
Write a double as a std::string.
ValidStringsList validStringValues() const
ParameterEntry * getEntryPtr(const std::string &name)
Retrieves the pointer for an entry with the name name if it exists.
Determines the types that are accepted.
EPreferredType getPreferredType() const
Lookup the preferred type.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
Generate a high level of output.
double getDouble(const ParameterEntry &entry, const std::string ¶mName="", const std::string &sublistName="", const bool activeQuery=true) const
Get a double value from a parameter entry.
void validate(ParameterEntry const &entry, std::string const ¶mName, std::string const &sublistName) const
bool setFileEmptyNameOK(bool isEmptyNameOK)
Sets whether or not the validator is OK with empty file name (even if fileMustExist() returns true) ...
const std::string getXMLTypeName() const
A list of parameters of arbitrary type.
StringValidator()
Constructs a StringValidator.
TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT RCP< AnyNumberParameterEntryValidator > anyNumberParameterEntryValidator()
Nonmember constructor AnyNumberParameterEntryValidator.
AnyNumberParameterEntryValidator()
Construct with a preferrded type of double and accept all types.
Abstract interface for an object that can validate a ParameterEntry's value.
any & getAny(bool activeQry=true)
Direct access to the Teuchos::any data value underlying this object. The bool argument activeQry (def...
int getInt(const ParameterEntry &entry, const std::string ¶mName="", const std::string &sublistName="", const bool activeQuery=true) const
Get an integer value from a parameter entry.
void validate(ParameterEntry const &entry, std::string const ¶mName, std::string const &sublistName) const
bool isDoubleAllowed() const
Lookup whether or not Doubles are allowed.
void printDoc(std::string const &docString, std::ostream &out) const
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos, as well as a number of utility routines.
std::string typeName() const
Return the name of the type.
AcceptedTypes & allowDouble(bool _allowDouble)
Set allow a double value or not.
Smart reference counting pointer class for automatic garbage collection.
bool fileMustExist() const
Gets the variable describing whether or not this validator wants the file that is specified to alread...
const std::type_info & type() const
Return the type of value being stored.
void validateAndModify(std::string const ¶mName, std::string const &sublistName, ParameterEntry *entry) const
bool isStringAllowed() const
Lookup whether or not strings are allowed.
Standard implementation of a ParameterEntryValidator that accepts numbers from a number of different ...
void printDoc(std::string const &docString, std::ostream &out) const
ParameterEntry & getEntry(const std::string &name)
Retrieves an entry with the name name.
bool isIntAllowed() const
Lookup whether or not ints are allowed.
const std::string getXMLTypeName() const
Definition of Teuchos::as, for conversions between types.
#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...
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.
bool is_null() const
Returns true if the underlying pointer is null.