std.container.rbtree as Interval Tree?

James Blachly james.blachly at gmail.com
Tue Feb 5 19:04:14 UTC 2019


On Tuesday, 5 February 2019 at 10:10:44 UTC, RazvanN wrote:
> On Monday, 4 February 2019 at 22:54:01 UTC, James Blachly wrote:
>> I tried to implement an interval tree backed by 
>> std.container.rbtree today and fell flat.
>>
>> [...]
> You can use alias this [1] in your interval element type:
>
> struct IntervalElem
> {
>     size_t start, end;
>     /* ... other declarations */
>     alias start this;
> }
>
> [1] https://dlang.org/spec/class.html#AliasThis


Thanks -- I always seem to forget about `alias this` !
However, I don't think that this helps me to call functions 
expecting type Elem with an integer. At least, it failed in my 
test -- could this be because Elem itself is already an alias?

>> Q2: Would replacing "Elem" with a generic type "T" in the 
>> function signatures for upperBound, lowerBound, and various 
>> related fns like _firstGreater / _firstGreaterEqual solve this 
>> problem?
>>
>> [...]
> Elem is already a generic type. I don't know how you can make 
> it more generic without adding other template parameters to the 
> class declaration (which means reimplementing RBTree from 
> std.container);

Agree, (although I think I would only need to revise only perhaps 
25% of the module in this case) but I definitely wanted to avoid 
this if possible.




More information about the Digitalmars-d-learn mailing list