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 #ifndef THYRA_PRODUCT_VECTOR_BASE_HPP
00030 #define THYRA_PRODUCT_VECTOR_BASE_HPP
00031
00032
00033 #include "Thyra_ProductMultiVectorBase.hpp"
00034
00035
00036 namespace Thyra {
00037
00038
00073 template<class Scalar>
00074 class ProductVectorBase
00075 : virtual public VectorBase<Scalar>
00076 , virtual public ProductMultiVectorBase<Scalar>
00077 {
00078 public:
00079
00101 virtual RCP<VectorBase<Scalar> >
00102 getNonconstVectorBlock(const int k) = 0;
00103
00115 virtual RCP<const VectorBase<Scalar> >
00116 getVectorBlock(const int k) const = 0;
00117
00118 };
00119
00120
00126 template<class Scalar>
00127 inline
00128 RCP<Thyra::ProductVectorBase<Scalar> >
00129 nonconstProductVectorBase(
00130 const RCP<Thyra::VectorBase<Scalar> > &v
00131 )
00132 {
00133 return Teuchos::rcp_dynamic_cast<Thyra::ProductVectorBase<Scalar> >(v, true);
00134 }
00135
00136
00142 template<class Scalar>
00143 inline
00144 RCP<const Thyra::ProductVectorBase<Scalar> >
00145 productVectorBase(
00146 const RCP<const Thyra::VectorBase<Scalar> > &v
00147 )
00148 {
00149 return Teuchos::rcp_dynamic_cast<const Thyra::ProductVectorBase<Scalar> >(v, true);
00150 }
00151
00152
00153 }
00154
00155 #endif // THYRA_PRODUCT_VECTOR_BASE_HPP