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 #ifndef _MV_VEC_INDEX_H_
00029 #define _MV_VEC_INDEX_H_
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #include <assert.h>
00044
00045 class MV_VecIndex
00046 {
00047 private:
00048 int start_;
00049 int end_;
00050 char all_;
00051
00052 public:
00053 MV_VecIndex() : start_(0), end_(0), all_(1) {}
00054 MV_VecIndex( int i1) :start_(i1), end_(i1), all_(0) {}
00055 MV_VecIndex( int i1, int i2): start_(i1), end_(i2),
00056 all_(0)
00057 {
00058 assert(i1 <= i2);
00059 }
00060 MV_VecIndex(const MV_VecIndex &s) : start_(s.start_), end_(s.end_),
00061 all_(s.all_){}
00062
00063
00064 int start() const { return (all_==1) ? 0 : start_;}
00065 int end() const { return (all_ ==1) ? 0 : end_;}
00066 int length() const {
00067 return (all_==1) ? 0 : (end_-start_+1);}
00068 int all() const { return all_; }
00069 MV_VecIndex& operator=(const MV_VecIndex& I)
00070 { start_=I.start_; end_ = I.end_; return *this;}
00071 MV_VecIndex operator+(int i)
00072 { return MV_VecIndex(start_ +i, end_ +i); }
00073 MV_VecIndex& operator+=(int i)
00074 { start_ += i; end_ += i; return *this; }
00075 MV_VecIndex operator-(int i)
00076 { return MV_VecIndex(start_ -i, end_ -i); }
00077 MV_VecIndex& operator-=(int i)
00078 { start_ -= i; end_ -= i; return *this; }
00079
00080 };
00081
00082
00083 #endif
00084
00085