How to iterate over const(RedBlackTree)?

Adam D. Ruppe destructionator at gmail.com
Thu Jan 2 06:59:54 PST 2014


On Thursday, 2 January 2014 at 13:30:06 UTC, monarch_dodra wrote:
> Currently, this is not possible. Or if it was, it would have a
> *very* high code cost inside RBT.

It is possible in theory; RBT returns a separate Range type with 
opSlice that is implemented in terms of pointers to node. (This 
is hidden by an alias RBNode!Elem* Node, which gets in the way, 
but if those were inout(RBNode)* or const()* it'd work).

We can have mutable pointers to const data, which would work with 
the range. So opSlice returns a mutable range that points back to 
const data.


But in this case, none of the functions in rbtree use const nor 
inout, and there's some caching (e.g. _left and _right) that I'm 
not sure can work with it at all anyway. In a const node, the 
left and right properties won't work..


More information about the Digitalmars-d mailing list