EpetraExt Package Browser (Single Doxygen Collection) Development
Loading...
Searching...
No Matches
EpetraExt_Transform.h
Go to the documentation of this file.
1//@HEADER
2// ***********************************************************************
3//
4// EpetraExt: Epetra Extended - Linear Algebra Services Package
5// Copyright (2011) Sandia Corporation
6//
7// Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
8// the U.S. Government retains certain rights in this software.
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// EpetraExt_Transform.h
44//-----------------------------------------------------------------------
45
46#ifndef EPETRAEXT_TRANSFORM_H
47#define EPETRAEXT_TRANSFORM_H
48
50
51#include <Teuchos_RCP.hpp>
52
53namespace EpetraExt {
54
56
63template<typename T, typename U>
65{
66 public:
67
70
71 typedef T OriginalType;
72 typedef T* OriginalTypePtr;
73 typedef Teuchos::RCP<T> OriginalTypeRCP;
74 typedef T& OriginalTypeRef;
75
76 typedef U NewType;
77 typedef U* NewTypePtr;
78 typedef Teuchos::RCP<U> NewTypeRCP;
79 typedef U& NewTypeRef;
80
82
84 virtual ~Transform() {}
85
88
90
107
109
124 virtual bool fwd() = 0;
125
127
141 virtual bool rvs() = 0;
142
144
148
150
166 virtual bool analyze( OriginalTypeRef orig );
167
169
183
185
199 virtual bool isConstructed();
200
202
203 protected:
204
206
212 : origObj_(0),
213 newObj_(0)
214 {}
215
217
219
220 private:
222 :origObj_(src.origObj_), newObj_(src.newObj_) {}
223
225 {
226 //not currently supported
227 abort();
228 return(*this);
229 }
230
231}; // end class Transform
232
233template<typename T,typename U>
234bool
237{
238 origObj_ = &orig;
239 newObj_ = &((*this)( *origObj_ ));
240 return true;
241}
242
243template<typename T,typename U>
246construct()
247{
248 return *newObj_;
249}
250
251template<typename T,typename U>
252bool
255{
256 return ( newObj_ != 0 );
257}
258
259template<typename T, typename U>
261{
262 public:
263 bool fwd() { return true; }
264 bool rvs() { return true; }
265
267};
268
269template<typename T>
270class SameTypeTransform : public Transform<T,T>
271{
272 public:
273 typedef T TransformType;
276
278};
279
280template<typename T>
282{
283 public:
284 bool fwd() { return true; }
285 bool rvs() { return true; }
286
288};
289
290template<typename T>
292{
293 public:
295 operator()
296 ( typename Transform<T,T>::OriginalTypeRef orig )
297 { this->origObj_ = &orig;
298 this->newObj_ = &orig;
299 return orig;
300 }
301
302 virtual ~InPlaceTransform() {}
303};
304
305template<typename T>
307{
308 public:
309 bool fwd() { return true; }
310 bool rvs() { return true; }
311
312 virtual ~ViewTransform() {}
313};
314
315} //namespace EpetraExt
316
317#endif //EPETRAEXT_TRANSFORM_H
bool rvs()
Reverse transfer of data from new object created in the operator() method call to the orig object inp...
bool fwd()
Forward transfer of data from orig object input in the operator() method call to the new object creat...
bool rvs()
Reverse transfer of data from new object created in the operator() method call to the orig object inp...
bool fwd()
Forward transfer of data from orig object input in the operator() method call to the new object creat...
Base Class for all Epetra Transform Operators.
Teuchos::RCP< T > OriginalTypeRCP
Transform()
Default constructor, protected to allow only derived classes to use.
Transform< T, U > & operator=(const Transform< T, U > &src)
virtual bool rvs()=0
Reverse transfer of data from new object created in the operator() method call to the orig object inp...
Teuchos::RCP< U > NewTypeRCP
virtual bool analyze(OriginalTypeRef orig)
Initial analysis phase of transform.
Transform(const Transform< T, U > &src)
virtual NewTypeRef construct()
Construction of new object as a result of the transform.
virtual bool isConstructed()
Check for whether transformed object has been constructed.
virtual bool fwd()=0
Forward transfer of data from orig object input in the operator() method call to the new object creat...
virtual NewTypeRef operator()(OriginalTypeRef orig)=0
Analysis of transform operation on original object and construction of new object.
bool fwd()
Forward transfer of data from orig object input in the operator() method call to the new object creat...
bool rvs()
Reverse transfer of data from new object created in the operator() method call to the orig object inp...
EpetraExt::BlockCrsMatrix: A class for constructing a distributed block matrix.