EpetraExt 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
49#if defined(EpetraExt_SHOW_DEPRECATED_WARNINGS)
50#ifdef __GNUC__
51#warning "The EpetraExt package is deprecated"
52#endif
53#endif
54
56
57#include <Teuchos_RCP.hpp>
58
59namespace EpetraExt {
60
62
69template<typename T, typename U>
71{
72 public:
73
76
77 typedef T OriginalType;
78 typedef T* OriginalTypePtr;
79 typedef Teuchos::RCP<T> OriginalTypeRCP;
80 typedef T& OriginalTypeRef;
81
82 typedef U NewType;
83 typedef U* NewTypePtr;
84 typedef Teuchos::RCP<U> NewTypeRCP;
85 typedef U& NewTypeRef;
86
88
90 virtual ~Transform() {}
91
94
96
113
115
130 virtual bool fwd() = 0;
131
133
147 virtual bool rvs() = 0;
148
150
154
156
172 virtual bool analyze( OriginalTypeRef orig );
173
175
189
191
205 virtual bool isConstructed();
206
208
209 protected:
210
212
218 : origObj_(0),
219 newObj_(0)
220 {}
221
223
225
226 private:
227 Transform(const Transform<T,U>& src)
228 :origObj_(src.origObj_), newObj_(src.newObj_) {}
229
230 Transform<T,U>& operator=(const Transform<T,U>& src)
231 {
232 //not currently supported
233 abort();
234 return(*this);
235 }
236
237}; // end class Transform
238
239template<typename T,typename U>
240bool
243{
244 origObj_ = &orig;
245 newObj_ = &((*this)( *origObj_ ));
246 return true;
247}
248
249template<typename T,typename U>
252construct()
253{
254 return *newObj_;
255}
256
257template<typename T,typename U>
258bool
261{
262 return ( newObj_ != 0 );
263}
264
265template<typename T, typename U>
267{
268 public:
269 bool fwd() { return true; }
270 bool rvs() { return true; }
271
273};
274
275template<typename T>
276class SameTypeTransform : public Transform<T,T>
277{
278 public:
279 typedef T TransformType;
282
284};
285
286template<typename T>
288{
289 public:
290 bool fwd() { return true; }
291 bool rvs() { return true; }
292
294};
295
296template<typename T>
298{
299 public:
301 operator()
302 ( typename Transform<T,T>::OriginalTypeRef orig )
303 { this->origObj_ = &orig;
304 this->newObj_ = &orig;
305 return orig;
306 }
307
308 virtual ~InPlaceTransform() {}
309};
310
311template<typename T>
313{
314 public:
315 bool fwd() { return true; }
316 bool rvs() { return true; }
317
318 virtual ~ViewTransform() {}
319};
320
321} //namespace EpetraExt
322
323#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.
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.
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.