00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "Thyra_MultiVectorBase.hpp"
00030
00031 #ifndef THYRA_EXPLICIT_MULTI_VECTOR_VIEW_HPP
00032 #define THYRA_EXPLICIT_MULTI_VECTOR_VIEW_HPP
00033
00034 namespace Thyra {
00035
00040 template<class Scalar>
00041 class ExplicitMultiVectorView {
00042 public:
00044 ExplicitMultiVectorView(
00045 const MultiVectorBase<Scalar>& mv, const Range1D &rowRng = Range1D(), const Range1D &colRng = Range1D()
00046 )
00047 : mv_(mv) { mv_.getSubMultiVector(rowRng,colRng,&smv_); }
00049 ~ExplicitMultiVectorView() { mv_.freeSubMultiVector(&smv_); }
00051 const RTOpPack::SubMultiVectorT<Scalar>& smv() const { return smv_; }
00053 RTOp_index_type globalOffset() const { return smv_.globalOffset(); }
00055 RTOp_index_type subDim() const { return smv_.subDim(); }
00057 RTOp_index_type colOffset() const { return smv_.colOffset(); }
00059 RTOp_index_type numSubCols() const { return smv_.numSubCols(); }
00061 const Scalar* values() const { return smv_.values(); }
00063 RTOp_index_type leadingDim() const { return smv_.leadingDim(); }
00065 const Scalar& operator()(RTOp_index_type i,RTOp_index_type j) const { return smv_(i,j); }
00066 private:
00067 const MultiVectorBase<Scalar> &mv_;
00068 RTOpPack::SubMultiVectorT<Scalar> smv_;
00069
00070 ExplicitMultiVectorView();
00071 ExplicitMultiVectorView(const ExplicitMultiVectorView<Scalar>&);
00072 ExplicitMultiVectorView<Scalar>& operator==(const ExplicitMultiVectorView<Scalar>&);
00073 };
00074
00079 template<class Scalar>
00080 class ExplicitMutableMultiVectorView {
00081 public:
00083 ExplicitMutableMultiVectorView(
00084 MultiVectorBase<Scalar>& mv, const Range1D &rowRng = Range1D(), const Range1D &colRng = Range1D()
00085 )
00086 : mv_(mv) { mv_.getSubMultiVector(rowRng,colRng,&smv_); }
00088 ~ExplicitMutableMultiVectorView() { mv_.commitSubMultiVector(&smv_); }
00090 const RTOpPack::MutableSubMultiVectorT<Scalar>& smv() const { return smv_; }
00092 RTOp_index_type globalOffset() const { return smv_.globalOffset(); }
00094 RTOp_index_type subDim() const { return smv_.subDim(); }
00096 RTOp_index_type colOffset() const { return smv_.colOffset(); }
00098 RTOp_index_type numSubCols() const { return smv_.numSubCols(); }
00100 Scalar* values() const { return smv_.values(); }
00102 RTOp_index_type leadingDim() const { return smv_.leadingDim(); }
00104 Scalar& operator()(RTOp_index_type i,RTOp_index_type j) { return smv_(i,j); }
00105 private:
00106 MultiVectorBase<Scalar> &mv_;
00107 RTOpPack::MutableSubMultiVectorT<Scalar> smv_;
00108
00109 ExplicitMutableMultiVectorView();
00110 ExplicitMutableMultiVectorView(const ExplicitMutableMultiVectorView<Scalar>&);
00111 ExplicitMutableMultiVectorView<Scalar>& operator==(const ExplicitMutableMultiVectorView<Scalar>&);
00112 };
00113
00114 }
00115
00116 #endif // THYRA_EXPLICIT_MULTI_VECTOR_VIEW_HPP