#ifndef Vec1D_h #define Vec1D_h /* arrange -3 -2 -1 0 +1 +2 indeces array vec1D v(6,-3); v(-3) = val1; v(-2) = val2; ... v[2] = val6 */ class vec1D //16 bit MMX aligned array { public: vec1D(unsigned int size = 1, int offset = 0, const float* data = 0); vec1D(const vec1D& v); ~vec1D(); inline int first() const; //return first index into array m_data[0] inline int last() const; //return last index into array m_data[size-1] inline unsigned int size() const; //total size of array inline const float* data() const; //return m_data pointer inline const float* data(int i) const; //return m_data pointer inline float& operator()(int x); //operator m_data[x] inline float operator()(int x) const; //const operator m_data[x] for funcs( const vec1D& v ) inline float& operator[](int x); //operator m_data[x] inline float operator[](int x) const; //const operator m_data[x] for funcs( const vec1D& v ) inline const vec1D& operator=(const vec1D& v); //operator = private: int m_offset; int m_last; unsigned int m_size; float* m_data; void init(const vec1D& v); void close(); }; inline int vec1D::first() const { return m_offset; } inline int vec1D::last() const { return m_last; } inline unsigned int vec1D::size() const { return m_size; } inline float& vec1D::operator()(int x) { return m_data[x]; } inline float vec1D::operator()(int x) const { return m_data[x]; } inline float& vec1D::operator[](int x) { return m_data[x]; } inline float vec1D::operator[](int x) const { return m_data[x]; } inline const vec1D& vec1D::operator=(const vec1D& v) { if (this != &v) init(v); return *this; } inline const float* vec1D::data() const { return &m_data[first()]; } inline const float* vec1D::data(int i) const { return &m_data[i]; } #endif