10 #ifndef TEUCHOS_STANDARDDEPENDCIES_HPP_
11 #define TEUCHOS_STANDARDDEPENDCIES_HPP_
17 #include "Teuchos_Dependency.hpp"
18 #include "Teuchos_StandardParameterEntryValidators.hpp"
20 #include "Teuchos_StandardFunctionObjects.hpp"
43 static const bool& getShowIfDefaultValue(){
44 static const bool SHOW_IF_DEFAULT_VALUE =
true;
45 return SHOW_IF_DEFAULT_VALUE;
63 bool showIf=getShowIfDefaultValue());
76 bool showIf=getShowIfDefaultValue());
89 bool showIf=getShowIfDefaultValue());
102 bool showIf=getShowIfDefaultValue());
115 virtual bool getDependeeState()
const = 0;
120 bool isDependentVisible()
const;
123 bool getShowIf()
const;
143 bool dependentVisible_;
191 virtual void evaluate() = 0;
281 const std::string& value,
318 bool getDependeeState()
const;
326 std::string getTypeAttributeValue()
const;
336 void validateDep()
const;
432 bool getDependeeState()
const;
440 std::string getTypeAttributeValue()
const;
450 void validateDep()
const;
545 bool getDependeeState()
const;
553 std::string getTypeAttributeValue()
const;
761 T value = getFirstDependeeValue<T>();
762 if(!func_.is_null()){
763 value = func_->runFunction(value);
777 return func_.getConst();
786 "The dependee of a " <<
787 "Number Visual Dependency must the same type as the dependency's " <<
788 "template type!" << std::endl <<
789 "Type Encountered: " << dependee->
getAny().
typeName() << std::endl <<
830 template<
class DependeeType,
class DependentType>
904 DependeeType newAmount,
930 template<
class DependeeType,
class DependentType>
939 template<
class DependeeType,
class DependentType>
948 template<
class DependeeType,
class DependentType>
951 typeid(DependeeType) != getFirstDependee()->getAny().type(),
953 "Ay no! The dependee parameter types don't match." << std::endl <<
956 "Dependee Parameter Type: " << getFirstDependee()->getAny().
typeName()
957 << std::endl << std::endl);
960 template<
class DependeeType,
class DependentType>
962 DependeeType newAmount = Dependency::getFirstDependeeValue<DependeeType>();
963 if(!this->getFunctionObject().is_null()){
964 newAmount = this->getFunctionObject()->runFunction(newAmount);
969 getBadDependentValueErrorMessage());
972 Dependency::ParameterEntryList::iterator it = this->getDependents().begin();
973 it != this->getDependents().end();
976 modifyArray(newAmount, *it);
1003 template<
class DependeeType,
class DependentType>
1067 template<
class DependeeType,
class DependentType>
1077 template<
class DependeeType,
class DependentType>
1088 template<
class DependeeType,
class DependentType>
1093 return "NumberArrayLengthDependency(" +
1098 template <
class DependeeType,
class DependentType>
1109 i<originalArray.
size() && i<newAmount;
1112 newArray[i] = originalArray[i];
1115 dependentToModify->
setValue(newArray,
1119 template<
class DependeeType,
class DependentType>
1122 std::ostringstream os;
1124 "Ruh Roh Shaggy! Looks like a dependency tried to set the length "
1125 "of the Array(s) to a negative number. Silly. You can't have "
1126 "an Array with a negative length!" << std::endl << std::endl <<
1127 "Error:" << std::endl <<
1128 "An attempt was made to set the length of an Array to a negative "
1129 "number by a NumberArrayLengthDependency" << std::endl << std::endl;
1133 template<
class DependeeType,
class DependentType>
1140 Dependency::ConstParameterEntryList::const_iterator it =
1141 this->getDependents().begin();
1142 it != this->getDependents().end();
1148 "Ay no! The dependent parameter types don't match." << std::endl <<
1149 "Dependent Template Type: " <<
1151 "Dependent Parameter Type: " <<
1152 (*it)->getAny().typeName() << std::endl << std::endl);
1161 template<
class DependeeType,
class DependentType>
1179 template<
class DependeeType,
class DependentType>
1223 typedef std::map<std::string, RCP<const ParameterEntryValidator> >
1229 typedef std::pair<std::string, RCP<const ParameterEntryValidator> >
1301 std::string getTypeAttributeValue()
const;
1310 void validateDep()
const;
1436 std::string getTypeAttributeValue()
const;
1445 void validateDep()
const;
1529 typedef std::map<Range, RCP<const ParameterEntryValidator> >
1535 typedef std::pair<Range, RCP<const ParameterEntryValidator> >
1588 return rangesAndValidators_;
1593 return defaultValidator_;
1650 rangesAndValidators_(rangesAndValidators),
1651 defaultValidator_(defaultValidator)
1663 rangesAndValidators_(rangesAndValidators),
1664 defaultValidator_(defaultValidator)
1678 typename RangeToValidatorMap::const_iterator it;
1679 T dependeeValue = getFirstDependeeValue<T>();
1681 it = rangesAndValidators_.begin();
1682 it != rangesAndValidators_.end();
1685 T min = it->first.first;
1686 T max = it->first.second;
1687 if(dependeeValue >= min && dependeeValue <max){
1688 setDependentsToValidator(it->second);
1692 setDependentsToValidator(defaultValidator_);
1700 "The dependee of a RangeValidatorDependency must be the same type as " <<
1701 "The RangeValidatorDependency template type!" << std::endl <<
1702 "Dependee Type: " << dependee->
getAny().
typeName() << std::endl <<
1706 rangesAndValidators_.size() < 1,
1708 "The rangesAndValidators map RangeValidatorDependency "
1709 "must have at least one entry!" << std::endl << std::endl);
1711 typename RangeToValidatorMap::const_iterator it =
1712 rangesAndValidators_.begin();
1717 for(; it!=rangesAndValidators_.end(); ++it){
1720 "Ay no! All of the validators in a RangeValidatorDependency "
1721 "must have the same type.");
1723 it->first.first > it->first.second,
1725 "The Range " << it->first.first <<
" to " << it->first.second <<
1726 " is invalid. The min can't be greater than the max, you silly goose!"
1733 typeid(*rawValidatorPtr) !=
typeid(*defaultValidator_),
1735 "Ay no! The default validator of a RangeValidatorDependency "
1736 "must have the same type as the validators in rangesAndValidators map."
1745 typename ParameterEntryList::const_iterator it;
1747 it = getDependents().begin();
1748 it != getDependents().end();
1751 (*it)->setValidator(toSet);
1787 dummyRange, dummyValidator));
1798 template<
class DependeeType,
class DependentType>
1858 template<
class DependeeType,
class DependentType>
1865 Dependency::ConstParameterEntryList::const_iterator it =
1866 this->getDependents().begin();
1867 it != this->getDependents().end();
1873 "Ay no! The dependent parameter types don't match." << std::endl <<
1874 "Dependent Template Type: " <<
1876 "Dependent Parameter Type: " <<
1877 (*it)->getAny().typeName() << std::endl << std::endl);
1889 template<
class DependeeType,
class DependentType>
1951 template<
class DependeeType,
class DependentType>
1957 dependee, dependent, func)
1962 template<
class DependeeType,
class DependentType>
1968 dependee, dependents, func)
1974 template<
class DependeeType,
class DependentType>
1979 return "TwoDRowDependency(" +
1984 template <
class DependeeType,
class DependentType>
1987 DependeeType newAmount,
1993 dependentToModify->
setValue(originalArray,
1997 template<
class DependeeType,
class DependentType>
2000 std::ostringstream os;
2002 "Ruh Roh Shaggy! Looks like a dependency tried to set the number of "
2003 "rows in TwoDArray(s) to a negative number. Silly. You can't have "
2004 "a TwoDArray with a negative number of rows!" << std::endl << std::endl <<
2005 "Error:" << std::endl <<
2006 "An attempt was made to set the number of rows of a TwoDArray to a negative "
2007 "number by a TwoDRowDependency" << std::endl << std::endl;
2016 template<
class DependeeType,
class DependentType>
2034 template<
class DependeeType,
class DependentType>
2052 template<
class DependeeType,
class DependentType>
2114 template<
class DependeeType,
class DependentType>
2120 dependee, dependent, func)
2125 template<
class DependeeType,
class DependentType>
2131 dependee, dependents, func)
2137 template<
class DependeeType,
class DependentType>
2142 return "TwoDColDependency(" +
2147 template <
class DependeeType,
class DependentType>
2150 DependeeType newAmount,
2156 dependentToModify->
setValue(originalArray,
2160 template<
class DependeeType,
class DependentType>
2163 std::ostringstream os;
2165 "Ruh Roh Shaggy! Looks like a dependency tried to set the number of "
2166 "cols in TwoDArray(s) to a negative number. Silly. You can't have "
2167 "a TwoDArray with a negative number of cols!" << std::endl << std::endl <<
2168 "Error:" << std::endl <<
2169 "An attempt was made to set the number of columns of a TwoDArrayArray to a negative "
2170 "number by a TwoDColDependency" << std::endl << std::endl;
2179 template<
class DependeeType,
class DependentType>
2197 template<
class DependeeType,
class DependentType>
2210 #endif //TEUCHOS_STANDARDDEPENDCIES_HPP_
RCP< const ParameterEntryValidator > getDefaultValidator() const
std::string getTypeAttributeValue() const
virtual void validateDep() const
A dependency in which the number of rows in a parameter with a TwoDArray depends on the value of anot...
static RCP< T > getDummyObject()
Retrieves a dummy object of type T.
A BoolValidatorDependency says the following about the relationship between two parameters: Dependeni...
std::string getTypeAttributeValue() const
std::pair< std::string, RCP< const ParameterEntryValidator > > ValueToValidatorPair
Conveniece typedef.
std::set< RCP< const ParameterEntry >, RCPConstComp > ConstParameterEntryList
A list of dependents.
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.
An abstract parent class for all visual dependencies.
A string visual dependency says the following about the relationship between two elements in a Parame...
A bool visual dependency says the following about the relationship between two elements in a Paramete...
RCP< const ParameterEntryValidator > validator() const
Return the (optional) validator object.
A dependency in which the number of rows in a parameter with a TwoDArray depends on the value of anot...
std::set< RCP< ParameterEntry >, RCPComp > ParameterEntryList
A list of Dependees.
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.
NumberArrayLengthDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RCP< const SimpleFunctionObject< DependeeType > > func=null)
Constructs a NumberArrayLengthDependency.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
virtual void validateDep() const
bool isType() const
Test the type of the data being contained.
std::string getBadDependentValueErrorMessage() const
T * get() const
Get the raw C++ pointer to the underlying object.
void modifyArray(DependeeType newAmount, RCP< ParameterEntry > dependentToModify)
std::map< std::string, RCP< const ParameterEntryValidator > > ValueToValidatorMap
Conveniece typedef.
virtual void modifyArray(DependeeType newAmount, RCP< ParameterEntry > dependentToModify)=0
Modifies a particular attribute of the array according to the specific semantics of the dependency...
ArrayModifierDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RCP< const SimpleFunctionObject< DependeeType > > func=null)
Constructs an ArrayModifierDependency.
Array< std::string > ValueList
This class represents a depndency between elements in a Parameter List.
This structure defines some basic traits for a scalar field type.
A RangeValidatorDependency says the following about the relationship between two parameters: Dependen...
std::string getTypeAttributeValue() const
const RangeToValidatorMap & getRangeToValidatorMap() const
A thin wrapper around the Array class which causes it to be interpreted as a 2D Array.
TwoDRowDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RCP< const SimpleFunctionObject< DependeeType > > func=null)
Constructs a TwoDRowDependency.
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Deprecated.
TwoDArrayModifierDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RCP< const SimpleFunctionObject< DependeeType > > func=null)
Constructs a TwoDArrayModifierDependency.
std::string getTypeAttributeValue() const
std::string getBadDependentValueErrorMessage() const
void resizeCols(size_type numberOfCols)
Changes the number of rows in the matrix.
A NumberArrayLengthDependency says the following about the relationship between two parameters: The l...
void resizeRows(size_type numberOfRows)
Changes the number of rows in the matrix.
This structure defines some basic traits for the ordinal field type.
TwoDArrayModifierDependency(RCP< const ParameterEntry > dependee, Dependency::ParameterEntryList dependents, RCP< const SimpleFunctionObject< DependeeType > > func=null)
Constructs a TwoDArrayModifierDependency.
virtual void validateDep() const
void modifyArray(DependeeType newAmount, RCP< ParameterEntry > dependentToModify)
std::string getBadDependentValueErrorMessage() const
TwoDColDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RCP< const SimpleFunctionObject< DependeeType > > func=null)
Constructs a TwoDColDependency.
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...
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.
Defines basic traits for the ordinal field type.
Default traits class that just returns typeid(T).name().
Class for retrieving a dummy object of type T.
std::string getTypeAttributeValue() const
A StringValidatorDependency says the following about the relationship between two parameters: Depende...
RangeValidatorDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RangeToValidatorMap rangesAndValidators, RCP< const ParameterEntryValidator > defaultValidator=null)
Constructs a RangeValidatorDependency.
An abstract base class for all dependencies which modify the dimensional attributes of an Array param...
Defines basic traits for the scalar field type.
static T zero()
Returns representation of zero for this scalar type.
An abstract base class for all validator dependencies.
std::string typeName() const
Return the name of the type.
Smart reference counting pointer class for automatic garbage collection.
A condition visual dependency says the following about the relationship between elements in a Paramet...
virtual std::string getBadDependentValueErrorMessage() const =0
Returns the error message that should be displayed if the dependent has taken on a value that...
std::pair< Range, RCP< const ParameterEntryValidator > > RangeValidatorPair
Convenience typedef.
const std::type_info & type() const
Return the type of value being stored.
void modifyArray(DependeeType newAmount, RCP< ParameterEntry > dependentToModify)
std::string docString() const
Return the (optional) documentation std::string.
std::pair< T, T > Range
Convenience typedef.
RCP< const SimpleFunctionObject< DependeeType > > getFunctionObject() const
Retrieves the function being used to calculate the amount by which an arrays dimensional attribute sh...
A number visual dependency says the following about the relationship between two elements in a Parame...
A dependency in which some attribute of a TwoDArray in a parameter depends on the value of another pa...
std::map< Range, RCP< const ParameterEntryValidator > > RangeToValidatorMap
Convenience typedef.
Standard Conditions to be used.
static std::string name()
std::string typeName(const T &t)
Template function for returning the concrete type name of a passed-in object.
RCP< const SimpleFunctionObject< T > > getFunctionObject() const
Const version of function getter.