13 typedef std::vector<objref> v;
14 typedef std::map<short,v> vv;
21 objref_eq(GraphID_t i): ID(i) {}
22 bool operator()(
const objref& x) {
return x.ID==ID;}
26 objref& at(GraphID_t i)
29 v::iterator elem=find_if(bin.begin(),bin.end(),objref_eq(i));
32 bin.push_back(objref(i));
38 objref at(GraphID_t i)
const 40 const v& bin=data[h(i)];
41 v::const_iterator elem=find_if(bin.begin(),bin.end(),objref_eq(i));
53 template <
class ret,
class v_it,
class vv_it>
58 void incr() {i2++;
if (i2==i1->second.end()) {i1++; i2=i1->second.begin();}}
59 void decr() {
if (i2==i1->second.begin()) {i1--; i2=i1->second.end();} i2--;}
62 iter(
const iter& x): i1(x.i1), i2(x.i2) {}
63 iter(
const vv_it& x,
const v_it& y):
65 iter operator++(
int) {
iter r=*
this; incr();
return r;}
66 iter operator++() {incr();
return *
this;}
67 iter operator--(
int) {
iter r=*
this; decr();
return r;}
68 iter operator--() {decr();
return *
this;}
69 bool operator==(
const iter& x)
const {
return i1==x.i1 && i2==x.i2 ;}
70 bool operator!=(
const iter& x)
const {
return !(x==*
this);}
71 ret& operator*() {
return *i2;}
72 ret* operator->() {
return &*i2;}
79 return iterator(data.begin(), data.begin()->second.begin());}
80 iterator end() {
return iterator(data.end(),data.end()->second.begin());}
81 const_iterator begin()
const {
82 return const_iterator(data.begin(), data.begin()->second.begin());}
83 const_iterator end()
const {
84 return const_iterator(data.end(),data.end()->second.begin());}
85 typedef GraphID_t size_type;
86 size_type size()
const 89 for (vv::const_iterator i=data.begin(); i!=data.end(); i++)
93 void clear() {data.clear();}