30 #ifndef VEC_ITERATOR_H
31 #define VEC_ITERATOR_H
38 template <
class IT,
class NT>
39 class VectorLocalIterator
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());
119 void Set(
const IT loc_idx,
const NT& val)
121 v.arr[loc_idx] = val;
125 template <
class IT,
class NT>
126 class SparseVectorLocalIterator:
public VectorLocalIterator<IT, NT>
129 FullyDistSpVec<IT, NT>&
v;
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)
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);
IT LocalToGlobal(IT loc_idx) const
void Set(const IT loc_idx, const NT &val)
FullyDistVec< IT, NT > & v
DenseVectorLocalIterator(FullyDistVec< IT, NT > &in_v)
IT GlobalToLocal(IT gbl_idx) const
void Append(const IT loc_idx, const NT &val)
IT GlobalToLocal(IT gbl_idx) const
IT LocalToGlobal(IT loc_idx) const
SparseVectorLocalIterator(FullyDistSpVec< IT, NT > &in_v)
FullyDistSpVec< IT, NT > & v
void Set(const IT loc_idx, const NT &val)
virtual IT GlobalToLocal(IT gbl_idx) const =0
virtual void Set(const IT loc_idx, const NT &val)=0
virtual ~VectorLocalIterator()
virtual bool NextTo(IT loc_idx)=0
virtual IT LocalToGlobal(IT loc_idx) const =0
virtual NT & GetValue() const =0
virtual IT GetLocIndex() const =0