Teuchos Package Browser (Single Doxygen Collection)  Version of the Day
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"
54 namespace Teuchos{
55 
56 
64 
65 public:
66 
69 
73  typedef std::set<RCP<ParameterEntry>, RCPComp > ParameterEntryList;
74 
78  typedef std::set<RCP<const ParameterEntry>, RCPConstComp > ConstParameterEntryList;
79 
81 
84 
91  Dependency(
92  ConstParameterEntryList dependees,
93  ParameterEntryList dependents);
94 
101  Dependency(
102  ConstParameterEntryList dependees,
103  RCP<ParameterEntry> dependent);
104 
111  Dependency(
112  RCP<const ParameterEntry> dependee,
113  ParameterEntryList dependents);
114 
121  Dependency(
122  RCP<const ParameterEntry> dependee,
123  RCP<ParameterEntry> dependent);
124 
126 
128 
129 
135  inline const ConstParameterEntryList& getDependees() const{
136  return dependees_;
137  }
138 
145  return dependents_;
146  }
147 
153  inline const ConstParameterEntryList& getDependents() const{
154  return constDependents_;
155  }
156 
157 
162  return *(dependees_.begin());
163  }
164 
171  template<class S>
172  inline S getFirstDependeeValue() const{
173  return getValue<S>(*(*(dependees_.begin())));
174  }
175 
180  virtual std::string getTypeAttributeValue() const = 0;
181 
182 
186  static const std::string& getXMLTagName(){
187  static const std::string xmlTagName = "Dependency";
188  return xmlTagName;
189  }
190 
192 
195 
200  virtual void evaluate() = 0;
201 
203 
206 
208  virtual void print(std::ostream& out) const;
209 
211 
212 protected:
213 
216 
222  virtual void validateDep() const = 0;
223 
225 
226  private:
227 
230 
235 
240 
245 
250 
254  void createConstDependents();
255 
259  void checkDependeesAndDependents();
260 
262 
263 };
264 
265 
266 } //namespace Teuchos
267 #endif //TEUCHOS_DEPENDENCY_HPP_
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.
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.
Struct for comparing two RCPs. Simply compares the raw pointers contained within the RCPs...
const ConstParameterEntryList & getDependees() const
Gets the dependees of the dependency.
Struct for comparing two RCPs. Simply compares the raw pointers contained within the RCPs...
Dependency()
Declaring and defining the default constructor as private.
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.
const ConstParameterEntryList & getDependents() const
Gets the dependents of the dependency.
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.