30 #ifndef VEC_ITERATOR_H 31 #define VEC_ITERATOR_H 38 template <
class IT,
class NT>
47 virtual bool Next() = 0;
48 virtual bool NextTo(IT loc_idx) = 0;
53 virtual void Del() = 0;
55 virtual void Set(
const IT loc_idx,
const NT& val) = 0;
58 template <
class IT,
class NT>
70 return v.LengthUntil() + loc_idx;
76 v.Owner(gbl_idx, ret);
84 bool exists = ((unsigned)iter_idx < v.arr.size());
93 return iter_idx > 0 && (unsigned)iter_idx < v.arr.size();
98 return iter_idx >= 0 && (unsigned)iter_idx < v.arr.size();
103 if ((
unsigned)iter_idx < v.arr.size())
111 return v.arr[iter_idx];
119 void Set(
const IT loc_idx,
const NT& val)
121 v.arr[loc_idx] = val;
125 template <
class IT,
class NT>
135 if (v.ind.size() == 0)
141 return v.LengthUntil() + loc_idx;
147 v.Owner(gbl_idx, ret);
154 bool exists = ((unsigned)iter_idx < v.ind.size());
162 typename std::vector<IT>::iterator iter = std::lower_bound(v.ind.begin()+iter_idx, v.ind.end(), loc_idx);
163 if(iter == v.ind.end())
168 else if (loc_idx < *iter)
170 iter_idx = iter - v.ind.begin();
175 iter_idx = iter - v.ind.begin();
182 return iter_idx >= 0 && (unsigned)iter_idx < v.ind.size();
190 return v.ind[iter_idx];
195 return v.num[iter_idx];
200 v.ind.erase(v.ind.begin()+iter_idx);
201 v.num.erase(v.num.begin()+iter_idx);
202 if ((
unsigned)iter_idx >= v.ind.size())
206 void Set(
const IT loc_idx,
const NT& val)
217 typename std::vector<IT>::iterator iter = std::lower_bound(v.ind.begin(), v.ind.end(), loc_idx);
218 if(iter == v.ind.end())
220 v.ind.push_back(loc_idx);
221 v.num.push_back(val);
223 else if (loc_idx < *iter)
227 v.num.insert(v.num.begin() + (iter-v.ind.begin()), val);
228 v.ind.insert(iter, loc_idx);
232 *(v.num.begin() + (iter-v.ind.begin())) = val;
236 void Append(
const IT loc_idx,
const NT& val)
238 v.ind.push_back(loc_idx);
239 v.num.push_back(val);
virtual IT LocalToGlobal(IT loc_idx) const =0
IT GlobalToLocal(IT gbl_idx) const
virtual bool NextTo(IT loc_idx)=0
FullyDistSpVec< IT, NT > & v
virtual void Set(const IT loc_idx, const NT &val)=0
DenseVectorLocalIterator(FullyDistVec< IT, NT > &in_v)
virtual NT & GetValue() const =0
virtual IT GetLocIndex() const =0
void Set(const IT loc_idx, const NT &val)
IT LocalToGlobal(IT loc_idx) const
SparseVectorLocalIterator(FullyDistSpVec< IT, NT > &in_v)
FullyDistVec< IT, NT > & v
void Append(const IT loc_idx, const NT &val)
virtual IT GlobalToLocal(IT gbl_idx) const =0
IT LocalToGlobal(IT loc_idx) const
void Set(const IT loc_idx, const NT &val)
virtual ~VectorLocalIterator()
IT GlobalToLocal(IT gbl_idx) const