Teuchos - Trilinos Tools Package Version of the Day
Loading...
Searching...
No Matches
Teuchos_StandardFunctionObjectXMLConverters.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#ifndef TEUCHOS_STANDARDFUNCTIONOBJECTXMLCONVERTERS_HPP
43#define TEUCHOS_STANDARDFUNCTIONOBJECTXMLCONVERTERS_HPP
44
51#include "Teuchos_StandardFunctionObjects.hpp"
52
53
54namespace Teuchos {
55
56
58template<class OperandType>
60
61public:
62
65
73 getSpecificSimpleFunction(OperandType operand) const = 0;
74
83 const RCP<const SimpleFunctionObject<OperandType> > /* functionObject */,
84 XMLObject& /* xmlObj */) const{}
85
87
90
93 convertXML(const XMLObject& xmlObj) const;
94
97 const RCP<const FunctionObject> functionObject,
98 XMLObject& xmlObj) const;
99
101
103
104
105 static std::string getOperandAttributeName(){
106 static const std::string operandAttributeName = "operand";
107 return operandAttributeName;
108 }
109
111
112};
113
114template<class OperandType>
115RCP<FunctionObject>
117 const XMLObject& xmlObj) const
118{
119 OperandType operand =
120 xmlObj.getRequired<OperandType>(getOperandAttributeName());
121 return getSpecificSimpleFunction(operand);
122}
123
124template<class OperandType>
126 const RCP<const FunctionObject> functionObject,
127 XMLObject& xmlObj) const
128{
130 rcp_dynamic_cast<const SimpleFunctionObject<OperandType> >(
131 functionObject, true);
132 OperandType operand = castedFunction->getModifiyingOperand();
133 xmlObj.addAttribute(getOperandAttributeName(),operand);
134 getSpecialSimpleFunctionXMLTraits(castedFunction, xmlObj);
135}
136
145template<class OperandType>
147 public SimpleFunctionXMLConverter<OperandType>
148{
149public:
150
153
156 getSpecificSimpleFunction(OperandType operand) const;
157
159};
160
161template<class OperandType>
164 OperandType operand) const
165{
166 return rcp(new SubtractionFunction<OperandType>(operand));
167}
168
177template<class OperandType>
179 public SimpleFunctionXMLConverter<OperandType>
180{
181public:
182
185
188 getSpecificSimpleFunction(OperandType operand) const;
189
191};
192
193template<class OperandType>
196 OperandType operand) const
197{
198 return rcp(new AdditionFunction<OperandType>(operand));
199}
200
209template<class OperandType>
211 public SimpleFunctionXMLConverter<OperandType>
212{
213public:
214
217
220 getSpecificSimpleFunction(OperandType operand) const;
221
223};
224
225template<class OperandType>
228 OperandType operand) const
229{
230 return rcp(new MultiplicationFunction<OperandType>(operand));
231}
232
241template<class OperandType>
243 public SimpleFunctionXMLConverter<OperandType>
244{
245public:
246
249
252 getSpecificSimpleFunction(OperandType operand) const;
253
255};
256
257template<class OperandType>
260 OperandType operand) const
261{
262 return rcp(new DivisionFunction<OperandType>(operand));
263}
264
265
266} // namespace Teuchos
267
268
269#endif // TEUCHOS_STANDARDFUNCTIONOBJECTXMLCONVERTERS_HPP
270
Converts back and forth between XML and FunctionObjects.
Class for converting AdditionFunction objects to and from XML.
RCP< SimpleFunctionObject< OperandType > > getSpecificSimpleFunction(OperandType operand) const
A simple function object that adds a specififed value from the given arguement in the runFunction fun...
Class for converting DivisionFunction objects to and from XML.
RCP< SimpleFunctionObject< OperandType > > getSpecificSimpleFunction(OperandType operand) const
A simple function object that divides a specififed value from the given arguement in the runFunction ...
An abstract base class for converting FunctionObjects to and from XML.
Class for converting MultiplicationFunction objects to and from XML.
RCP< SimpleFunctionObject< OperandType > > getSpecificSimpleFunction(OperandType operand) const
A simple function object that multiplys a specififed value from the given arguement in the runFunctio...
Smart reference counting pointer class for automatic garbage collection.
A simple function object that applies a given operand to a spcified arguement using a specific operat...
virtual void getSpecialSimpleFunctionXMLTraits(const RCP< const SimpleFunctionObject< OperandType > >, XMLObject &) const
Add and extra XML traits that are specific to a certain FuncitonOjbect when converting that function ...
RCP< FunctionObject > convertXML(const XMLObject &xmlObj) const
virtual RCP< SimpleFunctionObject< OperandType > > getSpecificSimpleFunction(OperandType operand) const =0
Gets the specific SimpleFunction to be returned by this converter when converting from XML.
void convertFunctionObject(const RCP< const FunctionObject > functionObject, XMLObject &xmlObj) const
Class for converting SubtractionFunction objects to and from XML.
RCP< SimpleFunctionObject< OperandType > > getSpecificSimpleFunction(OperandType operand) const
A simple function object that subtracts a specififed value from the given arguement in the runFunctio...
Representation of an XML data tree. XMLObject is a ref-counted handle to a XMLObjectImplem object,...
const std::string & getRequired(const std::string &name) const
Get an attribute, throwing an std::exception if it is not found.
void addAttribute(const std::string &name, T value)
Lookup whether or not Doubles are allowed.
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.