00001
00002
00003
00004
00005 #ifndef PLAYA_VECTORBASEDECL_HPP
00006 #define PLAYA_VECTORBASEDECL_HPP
00007
00008 #include "PlayaDefs.hpp"
00009 #include "PlayaVectorSpaceBaseDecl.hpp"
00010 #include "PlayaDataChunk.hpp"
00011
00012 namespace Playa
00013 {
00014 template <class Scalar> class Vector;
00015
00016
00017
00018
00019
00020 template <class Scalar>
00021 class VectorBase
00022 {
00023 public:
00024
00025 virtual ~VectorBase() {;}
00026
00027
00028 virtual RCP<const VectorSpaceBase<Scalar> > space() const = 0 ;
00029
00030
00031 virtual ConstDataChunk<Scalar> nextConstChunk() const = 0 ;
00032
00033
00034 virtual NonConstDataChunk<Scalar> nextChunk() = 0 ;
00035
00036
00037 virtual bool hasMoreChunks() const = 0 ;
00038
00039
00040 virtual void rewind() const = 0 ;
00041
00042
00043 virtual int numBlocks() const {return 1;}
00044
00045
00046
00047
00048 virtual void update(const Scalar& alpha, const VectorBase<Scalar>* x,
00049 const Scalar& gamma) = 0;
00050
00051
00052
00053
00054 virtual void update(
00055 const Scalar& alpha, const VectorBase<Scalar>* x,
00056 const Scalar& beta, const VectorBase<Scalar>* y,
00057 const Scalar& gamma) = 0 ;
00058
00059
00060 virtual void update(
00061 const Scalar& alpha, const VectorBase<Scalar>* x,
00062 const Scalar& beta, const VectorBase<Scalar>* y,
00063 const Scalar& gamma, const VectorBase<Scalar>* z,
00064 const Scalar& delta) = 0 ;
00065
00066
00067 virtual Scalar dot(const VectorBase<Scalar>* other) const = 0 ;
00068
00069
00070 virtual Scalar norm2() const = 0 ;
00071
00072 };
00073
00074
00075 }
00076
00077 #endif