class Iter

Defined at line 128 of file ../../src/developer/debug/zxdb/symbols/dwarf_abstract_child_iterator.h

This would be most naturally expressed as a coroutine with pseudocode that looks like this:

Die cur_die = concrete;

set

<Die

> seen_origin_dies;

while (cur_die) {

// Go through the children at this level

for (Die child : cur_die.children()) {

if (!seen_origin_dies_.contains(child))

YIELD child;

seen_origin_dies.insert(child.abstract_origin());

}

// Move up one level in the abstract origin hierarchy.

cur_die = cur_die.abstract_origin();

}

The logic here represents this loop in "unrolled" for as a single C++ iterator.

Public Methods

void Iter ()

Default-constructed one indicates the end. Computing the true end for this iterator requires

going through all of the abstract origins is slow, expecially since this is only used to

compute the loop termination. By ensuring that "everything clear" indicates end(), we can

save this work.

Defined at line 134 of file ../../src/developer/debug/zxdb/symbols/dwarf_abstract_child_iterator.h

const Die & operator* ()

Defined at line 141 of file ../../src/developer/debug/zxdb/symbols/dwarf_abstract_child_iterator.h

const Die * operator-> ()

Defined at line 142 of file ../../src/developer/debug/zxdb/symbols/dwarf_abstract_child_iterator.h

bool operator== (const Iter & other)

Defined at line 143 of file ../../src/developer/debug/zxdb/symbols/dwarf_abstract_child_iterator.h

bool operator!= (const Iter & other)

Defined at line 144 of file ../../src/developer/debug/zxdb/symbols/dwarf_abstract_child_iterator.h

const Iter & operator++ ()

Defined at line 145 of file ../../src/developer/debug/zxdb/symbols/dwarf_abstract_child_iterator.h

void Iter (const Die & concrete)

Takes the concrete DIE as a parameter to iterate over its children.

See DwarfAbstractChildIteratorBase constructor below for the parameters;

Defined at line 222 of file ../../src/developer/debug/zxdb/symbols/dwarf_abstract_child_iterator.h