10 #ifndef TEUCHOS_STANDARDDEPENDCIES_HPP_ 
   11 #define TEUCHOS_STANDARDDEPENDCIES_HPP_ 
   44     static const bool SHOW_IF_DEFAULT_VALUE = 
true;
 
   45     return SHOW_IF_DEFAULT_VALUE;
 
   63     bool showIf=getShowIfDefaultValue());
 
   75     ParameterEntryList dependents,
 
   76     bool showIf=getShowIfDefaultValue());
 
   87     ConstParameterEntryList dependees,
 
   89     bool showIf=getShowIfDefaultValue());
 
  100     ConstParameterEntryList dependees,
 
  101     ParameterEntryList dependents,
 
  102     bool showIf=getShowIfDefaultValue());
 
  115   virtual bool getDependeeState() 
const = 0;
 
  120   bool isDependentVisible() 
const;
 
  123   bool getShowIf() 
const;
 
  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> >
 
 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...
RCP< const SimpleFunctionObject< DependeeType > > func_
The function used to calculate the amount by which an arrays dimensional attribute should be modified...
std::string typeName(const T &t)
Template function for returning the concrete type name of a passed-in object. 
RCP< ParameterEntryValidator > defaultValidator_
The default validator to be used if a request is made for a value that does not appear in the valuesA...
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 
void setDependentsToValidator(RCP< const ParameterEntryValidator > toSet)
std::pair< std::string, RCP< const ParameterEntryValidator > > ValueToValidatorPair
Conveniece typedef. 
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...
RCP< const ParameterEntryValidator > trueValidator_
The validators to be used when the dependee is either true or false. 
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...
bool dependentVisible_
Whether or not the dependent is currently visible. 
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. 
RCP< const ParameterEntryValidator > defaultValidator_
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 
bool showIf_
Whether or not to show the dependent if the dependee is set to the value. 
RCP< const Condition > condition_
The Condition to determine whether or not the dependent is displayed. 
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. 
ValueToValidatorMap valuesAndValidators_
A map associating particular dependee values with validators that could be placed on the dependent...
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. 
#define TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT
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< SimpleFunctionObject< T > > func_
the function used to determine the visibility of the dependent. 
RangeToValidatorMap rangesAndValidators_
A map associating ranges with validators. 
static const bool & getShowIfDefaultValue()
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()
RCP< const SimpleFunctionObject< T > > getFunctionObject() const 
Const version of function getter.