Subject: Re: [boost] [tree] tree cursors and iterators (was: Reviving the tree library)
From: Cromwell Enage (sponage_at_[hidden])
Date: 2011-05-10 15:11:04


--- On Mon, 5/9/11, Erik Erlandson wrote: > On Fri, 2011-05-06 at 14:38 -0500, Rene Rivera wrote: > > Single sentence: > > > > Cursors provide an abstraction for *all* the possible > > traversals of trees vs. the linear only traversals of > > iterators in a single object making it possible to > > base the expanse of tree algorithms solely on cursors. > > I've been trying to sort out the semantics of tree > cursors.   One thing seems fairly clear: cursors embody > the semantics for what more traditionally are defined as > 'nodes':  A cursor has 'begin()' and 'end()' methods > that refer to the children of that cursor.   The Cursor > concept inherits from the Container concept, since a > cursor (like a "node") is, recursively, a container of > cursors. To me, a cursor is a hierarchical node iterator: an iterator that is itself a range of its children. > Given the above, I get a bit confused about the meaning > of methods like inorder_first().   A cursor, as defined > above, seems to not mesh with any particular traversal > mode.   And the increment operators '++' seem to make > sense only as 'increment to the next sibling.' I couldn't find inorder_first() in the tree proposal. Did you mean inorder::begin(), which is a namespace-level algorithm? And yes, it doesn't look like a cursor is meant to be a drop-in replacement for a breadth-first or depth-first iterator, but that both can be defined in terms of cursors. > I don't know if this is an ambiguity of the design, or > just the documentation, or my incomplete understanding.    The documentation looks sparse, which is probably why Rene Rivera called for improvements to it. HTH, Cromwell D. Enage