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());
143 bool dependentVisible_;
281 const std::string& value,
762 if(!func_.is_null()){
763 value = func_->runFunction(value);
784 !dependee->isType<T>(),
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 <<
830template<
class DependeeType,
class DependentType>
904 DependeeType newAmount,
930template<
class DependeeType,
class DependentType>
939template<
class DependeeType,
class DependentType>
948template<
class DependeeType,
class DependentType>
953 "Ay no! The dependee parameter types don't match." << std::endl <<
957 << std::endl << std::endl);
960template<
class DependeeType,
class DependentType>
972 Dependency::ParameterEntryList::iterator it = this->
getDependents().begin();
1003template<
class DependeeType,
class DependentType>
1067template<
class DependeeType,
class DependentType>
1077template<
class DependeeType,
class DependentType>
1088template<
class DependeeType,
class DependentType>
1093 return "NumberArrayLengthDependency(" +
1098template <
class DependeeType,
class DependentType>
1109 i<originalArray.
size() && i<newAmount;
1112 newArray[i] = originalArray[i];
1115 dependentToModify->setValue(newArray,
1116 false, dependentToModify->docString(), dependentToModify->validator());
1119template<
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;
1133template<
class DependeeType,
class DependentType>
1140 Dependency::ConstParameterEntryList::const_iterator it =
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);
1161template<
class DependeeType,
class DependentType>
1179template<
class DependeeType,
class DependentType>
1223 typedef std::map<std::string, RCP<const ParameterEntryValidator> >
1229 typedef std::pair<std::string, RCP<const ParameterEntryValidator> >
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;
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."
1742void RangeValidatorDependency<T>::setDependentsToValidator(
1745 typename ParameterEntryList::const_iterator it;
1747 it = getDependents().begin();
1748 it != getDependents().end();
1751 (*it)->setValidator(toSet);
1787 dummyRange, dummyValidator));
1798template<
class DependeeType,
class DependentType>
1858template<
class DependeeType,
class DependentType>
1865 Dependency::ConstParameterEntryList::const_iterator it =
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);
1889template<
class DependeeType,
class DependentType>
1951template<
class DependeeType,
class DependentType>
1957 dependee, dependent, func)
1962template<
class DependeeType,
class DependentType>
1968 dependee, dependents, func)
1974template<
class DependeeType,
class DependentType>
1979 return "TwoDRowDependency(" +
1984template <
class DependeeType,
class DependentType>
1987 DependeeType newAmount,
1993 dependentToModify->setValue(originalArray,
1994 false, dependentToModify->docString(), dependentToModify->validator());
1997template<
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;
2016template<
class DependeeType,
class DependentType>
2034template<
class DependeeType,
class DependentType>
2052template<
class DependeeType,
class DependentType>
2114template<
class DependeeType,
class DependentType>
2120 dependee, dependent, func)
2125template<
class DependeeType,
class DependentType>
2131 dependee, dependents, func)
2137template<
class DependeeType,
class DependentType>
2142 return "TwoDColDependency(" +
2147template <
class DependeeType,
class DependentType>
2150 DependeeType newAmount,
2156 dependentToModify->setValue(originalArray,
2157 false, dependentToModify->docString(), dependentToModify->validator());
2160template<
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;
2179template<
class DependeeType,
class DependentType>
2197template<
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.
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...
Replacement for std::vector that is compatible with the Teuchos Memory Management classes.
A BoolValidatorDependency says the following about the relationship between two parameters: Dependeni...
BoolValidatorDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, RCP< const ParameterEntryValidator > trueValidator, RCP< const ParameterEntryValidator > falseValidator=null)
Constructs a BoolValidatorDependency.
std::string getTypeAttributeValue() const
RCP< const ParameterEntryValidator > getTrueValidator() const
Gets the true validator.
void validateDep() const
Validates the dependency to make sure it's valid/has been setup properly. If subclassing,...
RCP< const ParameterEntryValidator > getFalseValidator() const
Gets the false validator.
A bool visual dependency says the following about the relationship between two elements in a Paramete...
bool getDependeeState() const
std::string getTypeAttributeValue() const
BoolVisualDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, bool showIf=true)
A condition visual dependency says the following about the relationship between elements in a Paramet...
std::string getTypeAttributeValue() const
bool getDependeeState() const
ConditionVisualDependency(RCP< const Condition > condition, RCP< ParameterEntry > dependent, bool showIf=true)
RCP< const Condition > getCondition() const
Gets the condition being used in this dependency.
ParameterEntryList & getDependents()
Gets the dependents of the dependency.
Dependency(ConstParameterEntryList dependees, ParameterEntryList dependents)
Constructs a Dependency.
std::set< RCP< ParameterEntry >, RCPComp > ParameterEntryList
A list of Dependees.
S getFirstDependeeValue() const
Convienence function. Returns the first dependee in the list of dependees.
std::set< RCP< const ParameterEntry >, RCPConstComp > ConstParameterEntryList
A list of dependents.
RCP< const ParameterEntry > getFirstDependee() const
Gets the first dependee in the dependees list. This is a convience function.
static RCP< BoolValidatorDependency > getDummyObject()
Retrieves a dummy object of type BoolValidatorDependency.
static RCP< BoolVisualDependency > getDummyObject()
Retrieves a dummy object of type BoolVisualDependency.
static RCP< ConditionVisualDependency > getDummyObject()
Retrieves a dummy object of type ConditionVisualDependency.
static RCP< NumberArrayLengthDependency< DependeeType, DependentType > > getDummyObject()
Retrieves a dummy object of type NumberArrayLengthDependency.
static RCP< NumberVisualDependency< T > > getDummyObject()
Retrieves a dummy object of type NumberVisualDependency.
static RCP< RangeValidatorDependency< T > > getDummyObject()
Retrieves a dummy object of type RangeValidatorDependency.
static RCP< StringValidatorDependency > getDummyObject()
Retrieves a dummy object of type StringValidatorDependency.
static RCP< StringVisualDependency > getDummyObject()
Retrieves a dummy object of type StringVisualDependency.
static RCP< TwoDColDependency< DependeeType, DependentType > > getDummyObject()
Retrieves a dummy object of type NumberArrayLengthDependency.
static RCP< TwoDRowDependency< DependeeType, DependentType > > getDummyObject()
Retrieves a dummy object of type NumberArrayLengthDependency.
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.
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 simple function object that applies a given operand to a spcified arguement using a specific operat...
A StringValidatorDependency says the following about the relationship between two parameters: Depende...
void validateDep() const
Validates the dependency to make sure it's valid/has been setup properly. If subclassing,...
std::string getTypeAttributeValue() const
const ValueToValidatorMap & getValuesAndValidators() const
retrieve a const reference to the ValueToValidator map being used by this StringValidatorDependency
RCP< const ParameterEntryValidator > getDefaultValidator() const
std::pair< std::string, RCP< const ParameterEntryValidator > > ValueToValidatorPair
Conveniece typedef.
StringValidatorDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, ValueToValidatorMap valuesAndValidators, RCP< ParameterEntryValidator > defaultValidator=null)
Constructs a StringValidatorDependency.
std::map< std::string, RCP< const ParameterEntryValidator > > ValueToValidatorMap
Conveniece typedef.
A string visual dependency says the following about the relationship between two elements in a Parame...
Array< std::string > ValueList
const ValueList & getValues() const
get the List of values the dependee will be checked against.
StringVisualDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, std::string value, bool showIf=true)
Constructs a StringVisualDependency.
std::string getTypeAttributeValue() const
bool getDependeeState() const
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 thin wrapper around the Array class which causes it to be interpreted as a 2D Array.
void resizeRows(size_type numberOfRows)
Changes the number of rows in the matrix.
void resizeCols(size_type numberOfCols)
Changes the number of rows in the matrix.
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
static std::string name()
virtual void evaluate()=0
ValidatorDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent)
Constructs a ValidatorDependency.
bool isDependentVisible() const
Determines whether or not the dependent is currently visible.
virtual bool getDependeeState() const =0
Get the state of the dependee in order to evaluate the dependency.
bool getShowIf() const
Get's the value of the showIf variable.
VisualDependency(RCP< const ParameterEntry > dependee, RCP< ParameterEntry > dependent, bool showIf=getShowIfDefaultValue())
Constructs a VisualDependency.
ValueType & any_cast(any &operand)
Used to extract the templated value held in Teuchos::any to a given value type.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
bool is_null(const std::shared_ptr< T > &p)
Returns true if p.get()==NULL.
bool nonnull(const std::shared_ptr< T > &p)
Returns true if p.get()!=NULL.
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.
static T zero()
Returns representation of zero for this ordinal type.
static T one()
Returns representation of one for this scalar type.
static T zero()
Returns representation of zero for this scalar type.