typedef DSNodeIterator<NodeTy> _Self;
DSNodeIterator(NodeTy *N) : Node(N), Offset(0) {} // begin iterator
- DSNodeIterator(NodeTy *N, bool) // Create end iterator
- : Node(N) {
- Offset = (N->getSize()+((1 << DS::PointerShift)-1)) &
- ~((1 << DS::PointerShift)-1);
+ DSNodeIterator(NodeTy *N, bool) : Node(N) { // Create end iterator
+ Offset = N->getNumLinks() << DS::PointerShift;
+ if (Offset == 0 && Node->getForwardNode() &&
+ Node->isDeadNode()) // Model Forward link
+ Offset += DS::PointerSize;
}
public:
DSNodeIterator(const DSNodeHandle &NH)
}
pointer operator*() const {
- return Node->getLink(Offset).getNode();
+ if (Node->isDeadNode())
+ return Node->getForwardNode();
+ else
+ return Node->getLink(Offset).getNode();
}
pointer operator->() const { return operator*(); }