Teuchos Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Teuchos_Dependency.hpp
Go to the documentation of this file.
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"
48 #include <set>
55 namespace Teuchos{
56 
57 
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 
236 
241 
246 
251 
255  void createConstDependents();
256 
260  void checkDependeesAndDependents();
261 
263 
264 };
265 
266 
267 } //namespace Teuchos
268 #endif //TEUCHOS_DEPENDENCY_HPP_
std::set< RCP< const ParameterEntry >, RCPConstComp > ConstParameterEntryList
A list of dependents.
ParameterEntryList & getDependents()
Gets the dependents of the dependency.
std::set< RCP< ParameterEntry >, RCPComp > ParameterEntryList
A list of Dependees.
This class represents a depndency between elements in a Parameter List.
const ConstParameterEntryList & getDependents() const
Gets the dependents of the dependency.
Struct for comparing two RCPs. Simply compares the raw pointers contained within the RCPs...
S getFirstDependeeValue() const
Convienence function. Returns the first dependee in the list of dependees.
Struct for comparing two RCPs. Simply compares the raw pointers contained within the RCPs...
Dependency()
Declaring and defining the default constructor as private.
const ConstParameterEntryList & getDependees() const
Gets the dependees of the dependency.
Templated Parameter List class.
ConstParameterEntryList dependees_
The parameters being depended upon.
ParameterEntryList dependents_
The dependent paramters.
static const std::string & getXMLTagName()
Returns the XML tag to use when serializing Dependencies.
RCP< const ParameterEntry > getFirstDependee() const
Gets the first dependee in the dependees list. This is a convience function.
#define TEUCHOSPARAMETERLIST_LIB_DLL_EXPORT
ConstParameterEntryList constDependents_
A const version dependent paramters.
Base class for all objects that can describe themselves.
Smart reference counting pointer class for automatic garbage collection.
Reference-counted pointer class and non-member templated function implementations.