template class VFlatVector; template class VVector; /** The T_BaseVector specifies the type of the vector element */ template class T_BaseVector : public S_BaseVector::TSCAL> { public: typedef T TELEM; typedef typename mat_traits::TSCAL TSCAL; // T_BaseVector () throw () { ; } // virtual ~T_BaseVector() throw () { ; } FlatVector FV () const throw() { return FlatVector (this->size, this->Memory()); } FlatVector FV () throw() { return FlatVector (this->size, this->Memory()); } FlatVector FV (const BaseVector & v2) const { return FlatVector (v2.Size(), v2.Memory()); } virtual TempVector Range (int begin, int end) { return TempVector (new VFlatVector (end-begin, &FV()[0]+begin)); } virtual TempVector Range (int begin, int end) const { return TempVector (new VFlatVector (end-begin, &FV()[0]+begin)); } virtual BaseVector * CreateVector () const { return new VVector (this->size); } virtual ostream & Print (ostream & ost) const { ost << "addr = " << &FV()(0) << endl; return (ost << FV() << endl); } }; /** A specific vector based on Vector. */ template class VFlatVector : public T_BaseVector { // int s; T * data; public: typedef typename mat_traits::TSCAL TSCAL; explicit VFlatVector (int as, T * adata) throw(); explicit VFlatVector () throw(); virtual ~VFlatVector() throw(); /* virtual FlatVector FV () const throw(); virtual FlatVector FV () throw(); */ virtual void * Memory () const throw() { return data; } void AssignMemory (int as, void * adata) { this->size = as; data = static_cast (adata); } VFlatVector & operator= (TSCAL s1) { BaseVector::operator= (s1); return *this; } template VFlatVector & operator= (const VVecExpr & v) { BaseVector::operator= (v); return *this; } }; /** A specific vector based on Vector. */ template class VVector : public T_BaseVector { // int s; // T * data; MoveableMem data; public: typedef typename mat_traits::TSCAL TSCAL; explicit VVector (int as); virtual ~VVector() throw(); /* virtual FlatVector FV () const throw(); virtual FlatVector FV () throw(); */ virtual void * Memory () const throw() { return const_cast (static_cast (&data[0])); } void SetSize(int as); VVector & operator= (TSCAL s1) { BaseVector::operator= (s1); return *this; } VVector & operator= (const VVector & v2) { BaseVector::operator= (v2); return *this; } // hierarchical EE T & operator() (int i) { return data[i]; } const T & operator() (int i) const { return data[i]; } template VVector & operator= (const VVecExpr & v) { BaseVector::operator= (v); return *this; } };