Teuchos - Trilinos Tools Package  Version of the Day
Teuchos_Dependency.hpp
1 // @HEADER
2 // ***********************************************************************
3 //
4 // Teuchos: Common Tools Package
5 // Copyright (2004) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Michael A. Heroux (maherou@sandia.gov)
38 //
39 // ***********************************************************************
40 // @HEADER
41 
42 
43 #ifndef TEUCHOS_DEPENDENCY_HPP_
44 #define TEUCHOS_DEPENDENCY_HPP_
45 #include "Teuchos_RCP.hpp"
47 #include "Teuchos_InvalidDependencyException.hpp"
48 #include <set>
55 namespace Teuchos{
56 
57 
64 class TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT Dependency : public Describable{
65 
66 public:
67 
70 
74  typedef std::set<RCP<ParameterEntry>, RCPComp > ParameterEntryList;
75 
79  typedef std::set<RCP<const ParameterEntry>, RCPConstComp > ConstParameterEntryList;
80 
82 
85 
92  Dependency(
93  ConstParameterEntryList dependees,
94  ParameterEntryList dependents);
95 
102  Dependency(
103  ConstParameterEntryList dependees,
104  RCP<ParameterEntry> dependent);
105 
112  Dependency(
113  RCP<const ParameterEntry> dependee,
114  ParameterEntryList dependents);
115 
122  Dependency(
123  RCP<const ParameterEntry> dependee,
124  RCP<ParameterEntry> dependent);
125 
127 
129 
130 
136  inline const ConstParameterEntryList& getDependees() const{
137  return dependees_;
138  }
139 
146  return dependents_;
147  }
148 
154  inline const ConstParameterEntryList& getDependents() const{
155  return constDependents_;
156  }
157 
158 
163  return *(dependees_.begin());
164  }
165 
172  template<class S>
173  inline S getFirstDependeeValue() const{
174  return getValue<S>(*(*(dependees_.begin())));
175  }
176 
181  virtual std::string getTypeAttributeValue() const = 0;
182 
183 
187  static const std::string& getXMLTagName(){
188  static const std::string xmlTagName = "Dependency";
189  return xmlTagName;
190  }
191 
193 
196 
201  virtual void evaluate() = 0;
202 
204 
207 
209  virtual void print(std::ostream& out) const;
210 
212 
213 protected:
214 
217 
223  virtual void validateDep() const = 0;
224 
226 
227  private:
228 
231 
235  ConstParameterEntryList dependees_;
236 
240  ParameterEntryList dependents_;
241 
245  ConstParameterEntryList constDependents_;
246 
250  Dependency(){}
251 
255  void createConstDependents();
256 
260  void checkDependeesAndDependents();
261 
263 
264 };
265 
266 
267 } //namespace Teuchos
268 #endif //TEUCHOS_DEPENDENCY_HPP_
Templated Parameter List class.
Reference-counted pointer class and non-member templated function implementations.
This class represents a depndency between elements in a Parameter List.
virtual std::string getTypeAttributeValue() const =0
Returns the string to be used for the value of the type attribute when converting the dependency to X...
std::set< RCP< ParameterEntry >, RCPComp > ParameterEntryList
A list of Dependees.
ParameterEntryList & getDependents()
Gets the dependents of the dependency.
static const std::string & getXMLTagName()
Returns the XML tag to use when serializing Dependencies.
S getFirstDependeeValue() const
Convienence function. Returns the first dependee in the list of dependees.
const ConstParameterEntryList & getDependents() const
Gets the dependents of the dependency.
virtual void evaluate()=0
Evaluates the dependency and makes any appropriate changes to the dependee based on the dependent.
std::set< RCP< const ParameterEntry >, RCPConstComp > ConstParameterEntryList
A list of dependents.
const ConstParameterEntryList & getDependees() const
Gets the dependees of the dependency.
virtual void validateDep() const =0
Validates the dependency to make sure it's valid/has been setup properly. If subclassing,...
RCP< const ParameterEntry > getFirstDependee() const
Gets the first dependee in the dependees list. This is a convience function.
Base class for all objects that can describe themselves.
Smart reference counting pointer class for automatic garbage collection.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...
Struct for comparing two RCPs. Simply compares the raw pointers contained within the RCPs.
Struct for comparing two RCPs. Simply compares the raw pointers contained within the RCPs.