44#ifndef TEUCHOS_STANDARDDEPENDCIES_HPP_
45#define TEUCHOS_STANDARDDEPENDCIES_HPP_
51#include "Teuchos_Dependency.hpp"
52#include "Teuchos_StandardParameterEntryValidators.hpp"
54#include "Teuchos_StandardFunctionObjects.hpp"
77 static const bool& getShowIfDefaultValue(){
97 bool showIf=getShowIfDefaultValue());
110 bool showIf=getShowIfDefaultValue());
123 bool showIf=getShowIfDefaultValue());
136 bool showIf=getShowIfDefaultValue());
154 bool isDependentVisible()
const;
157 bool getShowIf()
const;
177 bool dependentVisible_;
315 const std::string& value,
352 bool getDependeeState()
const;
360 std::string getTypeAttributeValue()
const;
370 void validateDep()
const;
466 bool getDependeeState()
const;
474 std::string getTypeAttributeValue()
const;
484 void validateDep()
const;
579 bool getDependeeState()
const;
587 std::string getTypeAttributeValue()
const;
796 if(!func_.is_null()){
797 value = func_->runFunction(value);
818 !dependee->isType<
T>(),
820 "The dependee of a " <<
821 "Number Visual Dependency must the same type as the dependency's " <<
822 "template type!" << std::endl <<
823 "Type Encountered: " << dependee->getAny().typeName() << std::endl <<
864template<
class DependeeType,
class DependentType>
964template<
class DependeeType,
class DependentType>
973template<
class DependeeType,
class DependentType>
982template<
class DependeeType,
class DependentType>
985 typeid(
DependeeType) != getFirstDependee()->getAny().type(),
987 "Ay no! The dependee parameter types don't match." << std::endl <<
990 "Dependee Parameter Type: " << getFirstDependee()->getAny().
typeName()
991 << std::endl << std::endl);
994template<
class DependeeType,
class DependentType>
997 if(!this->getFunctionObject().
is_null()){
1003 getBadDependentValueErrorMessage());
1006 Dependency::ParameterEntryList::iterator
it = this->getDependents().begin();
1007 it != this->getDependents().end();
1037template<
class DependeeType,
class DependentType>
1101template<
class DependeeType,
class DependentType>
1111template<
class DependeeType,
class DependentType>
1122template<
class DependeeType,
class DependentType>
1127 return "NumberArrayLengthDependency(" +
1132template <
class DependeeType,
class DependentType>
1153template<
class DependeeType,
class DependentType>
1156 std::ostringstream os;
1158 "Ruh Roh Shaggy! Looks like a dependency tried to set the length "
1159 "of the Array(s) to a negative number. Silly. You can't have "
1160 "an Array with a negative length!" << std::endl << std::endl <<
1161 "Error:" << std::endl <<
1162 "An attempt was made to set the length of an Array to a negative "
1163 "number by a NumberArrayLengthDependency" << std::endl << std::endl;
1167template<
class DependeeType,
class DependentType>
1174 Dependency::ConstParameterEntryList::const_iterator
it =
1175 this->getDependents().begin();
1176 it != this->getDependents().end();
1182 "Ay no! The dependent parameter types don't match." << std::endl <<
1183 "Dependent Template Type: " <<
1185 "Dependent Parameter Type: " <<
1186 (*it)->getAny().typeName() << std::endl << std::endl);
1195template<
class DependeeType,
class DependentType>
1213template<
class DependeeType,
class DependentType>
1257 typedef std::map<std::string, RCP<const ParameterEntryValidator> >
1263 typedef std::pair<std::string, RCP<const ParameterEntryValidator> >
1335 std::string getTypeAttributeValue()
const;
1344 void validateDep()
const;
1470 std::string getTypeAttributeValue()
const;
1479 void validateDep()
const;
1563 typedef std::map<Range, RCP<const ParameterEntryValidator> >
1569 typedef std::pair<Range, RCP<const ParameterEntryValidator> >
1622 return rangesAndValidators_;
1627 return defaultValidator_;
1712 typename RangeToValidatorMap::const_iterator
it;
1715 it = rangesAndValidators_.begin();
1716 it != rangesAndValidators_.end();
1719 T min =
it->first.first;
1720 T max =
it->first.second;
1722 setDependentsToValidator(
it->second);
1726 setDependentsToValidator(defaultValidator_);
1734 "The dependee of a RangeValidatorDependency must be the same type as " <<
1735 "The RangeValidatorDependency template type!" << std::endl <<
1736 "Dependee Type: " << dependee->getAny().typeName() << std::endl <<
1740 rangesAndValidators_.size() < 1,
1742 "The rangesAndValidators map RangeValidatorDependency "
1743 "must have at least one entry!" << std::endl << std::endl);
1745 typename RangeToValidatorMap::const_iterator
it =
1746 rangesAndValidators_.begin();
1751 for(;
it!=rangesAndValidators_.end(); ++
it){
1754 "Ay no! All of the validators in a RangeValidatorDependency "
1755 "must have the same type.");
1757 it->first.first >
it->first.second,
1759 "The Range " <<
it->first.first <<
" to " <<
it->first.second <<
1760 " is invalid. The min can't be greater than the max, you silly goose!"
1769 "Ay no! The default validator of a RangeValidatorDependency "
1770 "must have the same type as the validators in rangesAndValidators map."
1779 typename ParameterEntryList::const_iterator
it;
1781 it = getDependents().begin();
1782 it != getDependents().end();
1785 (*it)->setValidator(
toSet);
1832template<
class DependeeType,
class DependentType>
1892template<
class DependeeType,
class DependentType>
1899 Dependency::ConstParameterEntryList::const_iterator
it =
1900 this->getDependents().begin();
1901 it != this->getDependents().end();
1907 "Ay no! The dependent parameter types don't match." << std::endl <<
1908 "Dependent Template Type: " <<
1910 "Dependent Parameter Type: " <<
1911 (*it)->getAny().typeName() << std::endl << std::endl);
1923template<
class DependeeType,
class DependentType>
1985template<
class DependeeType,
class DependentType>
1996template<
class DependeeType,
class DependentType>
2008template<
class DependeeType,
class DependentType>
2013 return "TwoDRowDependency(" +
2018template <
class DependeeType,
class DependentType>
2031template<
class DependeeType,
class DependentType>
2034 std::ostringstream os;
2036 "Ruh Roh Shaggy! Looks like a dependency tried to set the number of "
2037 "rows in TwoDArray(s) to a negative number. Silly. You can't have "
2038 "a TwoDArray with a negative number of rows!" << std::endl << std::endl <<
2039 "Error:" << std::endl <<
2040 "An attempt was made to set the number of rows of a TwoDArray to a negative "
2041 "number by a TwoDRowDependency" << std::endl << std::endl;
2050template<
class DependeeType,
class DependentType>
2068template<
class DependeeType,
class DependentType>
2086template<
class DependeeType,
class DependentType>
2148template<
class DependeeType,
class DependentType>
2159template<
class DependeeType,
class DependentType>
2171template<
class DependeeType,
class DependentType>
2176 return "TwoDColDependency(" +
2181template <
class DependeeType,
class DependentType>
2194template<
class DependeeType,
class DependentType>
2197 std::ostringstream os;
2199 "Ruh Roh Shaggy! Looks like a dependency tried to set the number of "
2200 "cols in TwoDArray(s) to a negative number. Silly. You can't have "
2201 "a TwoDArray with a negative number of cols!" << std::endl << std::endl <<
2202 "Error:" << std::endl <<
2203 "An attempt was made to set the number of columns of a TwoDArrayArray to a negative "
2204 "number by a TwoDColDependency" << std::endl << std::endl;
2213template<
class DependeeType,
class DependentType>
2231template<
class DependeeType,
class DependentType>
Defines basic traits for the ordinal field type.
Defines basic traits for the scalar field type.
Standard Conditions to be used.
An abstract base class for all dependencies which modify the dimensional attributes of an Array param...
ArrayModifierDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RCP< const SimpleFunctionObject< DependeeType > > func=null)
Constructs an ArrayModifierDependency.
virtual void modifyArray(DependeeType newAmount, RCP< ParameterEntry > dependentToModify)=0
Modifies a particular attribute of the array according to the specific semantics of the dependency.
virtual std::string getBadDependentValueErrorMessage() const =0
Returns the error message that should be displayed if the dependent has taken on a value that,...
virtual void validateDep() const
RCP< const SimpleFunctionObject< DependeeType > > getFunctionObject() const
Retrieves the function being used to calculate the amount by which an arrays dimensional attribute sh...
A BoolValidatorDependency says the following about the relationship between two parameters: Dependeni...
A bool visual dependency says the following about the relationship between two elements in a Paramete...
A condition visual dependency says the following about the relationship between elements in a Paramet...
This class represents a depndency between elements in a Parameter List.
std::set< RCP< ParameterEntry >, RCPComp > ParameterEntryList
A list of Dependees.
std::set< RCP< const ParameterEntry >, RCPConstComp > ConstParameterEntryList
A list of dependents.
Class for retrieving a dummy object of type T.
static RCP< T > getDummyObject()
Retrieves a dummy object of type T.
A NumberArrayLengthDependency says the following about the relationship between two parameters: The l...
virtual void validateDep() const
std::string getTypeAttributeValue() const
std::string getBadDependentValueErrorMessage() const
NumberArrayLengthDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RCP< const SimpleFunctionObject< DependeeType > > func=null)
Constructs a NumberArrayLengthDependency.
void modifyArray(DependeeType newAmount, RCP< ParameterEntry > dependentToModify)
.
A number visual dependency says the following about the relationship between two elements in a Parame...
bool getDependeeState() const
Get the state of the dependee in order to evaluate the dependency.
NumberVisualDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, bool showIf=true, RCP< SimpleFunctionObject< T > > func=null)
Constructs a NumberVisualDependency.
std::string getTypeAttributeValue() const
RCP< const SimpleFunctionObject< T > > getFunctionObject() const
Const version of function getter.
Abstract interface for an object that can validate a ParameterEntry's value.
This object is held as the "value" in the Teuchos::ParameterList std::map.
Smart reference counting pointer class for automatic garbage collection.
RCP< const T > getConst() const
Return an RCP<const T> version of *this.
RCP(ENull null_arg=null)
Initialize RCP<T> to NULL.
bool is_null() const
Returns true if the underlying pointer is null.
bool nonnull(const RCP< T > &p)
Returns true if p.get()!=NULL.
T * get() const
Get the raw C++ pointer to the underlying object.
A RangeValidatorDependency says the following about the relationship between two parameters: Dependen...
std::pair< Range, RCP< const ParameterEntryValidator > > RangeValidatorPair
Convenience typedef.
const RangeToValidatorMap & getRangeToValidatorMap() const
RangeValidatorDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RangeToValidatorMap rangesAndValidators, RCP< const ParameterEntryValidator > defaultValidator=null)
Constructs a RangeValidatorDependency.
RCP< const ParameterEntryValidator > getDefaultValidator() const
std::map< Range, RCP< const ParameterEntryValidator > > RangeToValidatorMap
Convenience typedef.
std::string getTypeAttributeValue() const
std::pair< T, T > Range
Convenience typedef.
A StringValidatorDependency says the following about the relationship between two parameters: Depende...
std::pair< std::string, RCP< const ParameterEntryValidator > > ValueToValidatorPair
Conveniece typedef.
std::map< std::string, RCP< const ParameterEntryValidator > > ValueToValidatorMap
Conveniece typedef.
A string visual depdencies says the following about the relationship between two elements in a Parame...
Array< std::string > ValueList
A dependency in which some attribute of a TwoDArray in a parameter depends on the value of another pa...
virtual void validateDep() const
TwoDArrayModifierDependency(RCP< const ParameterEntry > dependee, Dependency::ParameterEntryList dependents, RCP< const SimpleFunctionObject< DependeeType > > func=null)
Constructs a TwoDArrayModifierDependency.
TwoDArrayModifierDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RCP< const SimpleFunctionObject< DependeeType > > func=null)
Constructs a TwoDArrayModifierDependency.
A dependency in which the number of rows in a parameter with a TwoDArray depends on the value of anot...
TwoDColDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RCP< const SimpleFunctionObject< DependeeType > > func=null)
Constructs a TwoDColDependency.
std::string getTypeAttributeValue() const
void modifyArray(DependeeType newAmount, RCP< ParameterEntry > dependentToModify)
std::string getBadDependentValueErrorMessage() const
A dependency in which the number of rows in a parameter with a TwoDArray depends on the value of anot...
void modifyArray(DependeeType newAmount, RCP< ParameterEntry > dependentToModify)
std::string getBadDependentValueErrorMessage() const
TwoDRowDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RCP< const SimpleFunctionObject< DependeeType > > func=null)
Constructs a TwoDRowDependency.
std::string getTypeAttributeValue() const
Default traits class that just returns typeid(T).name().
static std::string name()
An abstract base class for all validator dependencies.
virtual void evaluate()=0
An abstract parent class for all visual dependencies.
virtual bool getDependeeState() const =0
Get the state of the dependee in order to evaluate the dependency.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
std::string typeName(const T &t)
Template function for returning the concrete type name of a passed-in object.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
This structure defines some basic traits for the ordinal field type.
This structure defines some basic traits for a scalar field type.
static T zero()
Returns representation of zero for this scalar type.