little polish of hashtable

This commit is contained in:
Joachim Schoeberl 2025-01-04 12:09:38 +01:00
parent eefeca571b
commit 0b480f1eab

View File

@ -842,6 +842,8 @@ namespace ngcore
ar & size & mask & used; ar & size & mask & used;
} }
class EndIterator { };
class Iterator class Iterator
{ {
const ClosedHashTable & tab; const ClosedHashTable & tab;
@ -858,24 +860,21 @@ namespace ngcore
while (nr < tab.Size() && !tab.UsedPos(nr)) nr++; while (nr < tab.Size() && !tab.UsedPos(nr)) nr++;
return *this; return *this;
} }
bool operator!= (const Iterator & it2) { return nr != it2.nr; }
auto operator* () const bool operator!= (EndIterator & it2) { return nr != tab.Size(); }
{
T_HASH hash; auto operator* () const { return tab.GetBoth(nr); }
T val;
tab.GetData(nr, hash,val);
return std::make_pair(hash,val);
}
}; };
Iterator begin() const { return Iterator(*this, 0); } Iterator begin() const { return Iterator(*this, 0); }
Iterator end() const { return Iterator(*this, Size()); } EndIterator end() const { return EndIterator(); }
}; };
template <class T_HASH, class T> template <class T_HASH, class T>
ostream & operator<< (ostream & ost, ostream & operator<< (ostream & ost,
const ClosedHashTable<T_HASH,T> & tab) const ClosedHashTable<T_HASH,T> & tab)
{ {
/*
for (size_t i = 0; i < tab.Size(); i++) for (size_t i = 0; i < tab.Size(); i++)
if (tab.UsedPos(i)) if (tab.UsedPos(i))
{ {
@ -884,6 +883,9 @@ namespace ngcore
tab.GetData (i, key, val); tab.GetData (i, key, val);
ost << key << ": " << val << ", "; ost << key << ": " << val << ", ";
} }
*/
for (auto [key,val] : tab)
ost << key << ": " << val << ", ";
return ost; return ost;
} }