10 #ifndef TPETRA_TRANSFORM_HPP
11 #define TPETRA_TRANSFORM_HPP
16 #include <Teuchos_RCP.hpp>
17 #include <Teuchos_GlobalMPISession.hpp>
29 template <
typename T,
typename U>
35 using OriginalType = Teuchos::RCP<T>;
36 using OriginalConstType = Teuchos::RCP<const T>;
37 using NewType = Teuchos::RCP<U>;
38 using NewConstType = Teuchos::RCP<const U>;
52 virtual NewType
operator()(
const OriginalType& orig) = 0;
59 virtual void fwd() = 0;
66 virtual void rvs() = 0;
83 virtual void analyze(
const OriginalType& orig);
106 : origObj_(Teuchos::null)
107 , newObj_(Teuchos::null) {}
109 OriginalType origObj_;
114 : origObj_(src.origObj_)
115 , newObj_(src.newObj_) {}
117 Transform<T, U>& operator=(
const Transform<T, U>& src) {
119 Teuchos::GlobalMPISession::abort();
125 template <
typename T,
typename U>
129 newObj_ = Teuchos::rcp_dynamic_cast<U>(origObj_);
133 template <
typename T,
typename U>
134 typename Transform<T, U>::NewType
140 template <
typename T,
typename U>
143 return (newObj_ != Teuchos::null);
146 template <
typename T,
typename U>
147 class StructuralTransform :
public Transform<T, U> {
149 void fwd() {
return; }
150 void rvs() {
return; }
152 virtual ~StructuralTransform() =
default;
155 template <
typename T>
156 class SameTypeTransform :
public Transform<T, T> {
158 using TransformType = Teuchos::RCP<T>;
160 virtual ~SameTypeTransform() =
default;
163 template <
typename T>
164 class StructuralSameTypeTransform :
public SameTypeTransform<T> {
166 void fwd() {
return; }
167 void rvs() {
return; }
169 virtual ~StructuralSameTypeTransform() =
default;
187 template <
typename T>
188 class ViewTransform :
public SameTypeTransform<T> {
190 void fwd() {
return; }
191 void rvs() {
return; }
193 virtual ~ViewTransform() =
default;
198 #endif // TPETRA_TRANSFORM_HPP