00001 #ifndef VECTORI_H
00002 #define VECTORI_H
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 00030 00031 00032
00033
00034
00035 #include "matrix.h"
00042 #define REF_CV(A,I) (((A).D)->m[(I)])
00043 #define THIS_CV(I) (((*this).D)->m[(I)])
00044
00045
00046 #ifdef USE_NAMESPACE_LINAL
00047 namespace LinAl {
00048 #endif
00049
00055 class VectorI:public MatrixC<int>
00056 {
00057 public:
00059 explicit VectorI() : MatrixC<int>() {}
00061 explicit VectorI(const int nr, const int value=0) : MatrixC<int>(nr,1,value) {}
00063 explicit VectorI(const int* A, const int nr) : MatrixC<int>(A,nr,1) {}
00065 VectorI(const VectorI& B) : MatrixC<int>(B) {} ;
00067 ~VectorI() {} ;
00069 VectorI& operator= (const int value)
00070 {this->MatrixC<int>::operator=(value); return *this;}
00072 void resize(const int nr, const int value=0)
00073 {
00074 if (nr==D->nrow) return ;
00075 D=D->get_own_copy() ;
00076 D->m.resize(nr,value) ;
00077 D->nrow=nr ;
00078 }
00080 virtual Ref<int> operator() (const int i, const int) {return MatrixC<int>::operator()(i);}
00082 virtual int operator() (const int i, const int) const {return THIS_CV(i);}
00083 protected:
00085 virtual int* ref(const int i) const {return &THIS_CV(i);}
00087 virtual int read(const int i) const {return THIS_CV(i);}
00089 virtual void write(const int i, const int v) {D=D->get_own_copy();THIS_CV(i)=v;}
00091 virtual void add(const int i, const int v) {D=D->get_own_copy();THIS_CV(i)+=v;}
00093 virtual void sub(const int i, const int v) {D=D->get_own_copy();THIS_CV(i)-=v;}
00095 virtual void mul(const int i, const int v) {D=D->get_own_copy();THIS_CV(i)*=v;}
00097 virtual void div(const int i, const int v) {D=D->get_own_copy();THIS_CV(i)/=v;}
00098 public:
00100 virtual void stream(ostream& s);
00102 int multiply (const VectorI& B) const ;
00103 };
00104 #ifdef USE_NAMESPACE_LINAL
00105 }
00106 #endif
00107 #endif // #ifndef VECTORI_H