/* Some basic iterator stuff */ namespace { template struct ListEntry { ListEntry* prev, *next; T val; }; template class ListIter { ListEntry* entry; public: ListIter(ListEntry* entry) : entry(entry) {} T& operator*() const { return entry->val; } ListIter& operator++() { entry = entry->next; return *this; } ListIter operator++(int) { ListIter cpy = *this; ++(*this); return cpy; } }; }