RedBlackTree thin wrapper initialization

Chris via Digitalmars-d digitalmars-d at puremagic.com
Wed May 28 02:43:15 PDT 2014


On Wednesday, 28 May 2014 at 08:49:42 UTC, Rene Zwanenburg wrote:
> On Wednesday, 28 May 2014 at 08:37:14 UTC, Chris wrote:
>> On Wednesday, 28 May 2014 at 07:13:37 UTC, BlackEdder wrote:
>>> I'm trying to write a thin wrapper around redblacktree, but 
>>> it seems every object of the class shares the same copy of 
>>> redblacktree. Am I doing something wrong or is this a bug.
>>>
>>> Minimal code example:
>>>
>>> import std.array;
>>> import std.container;
>>> import std.stdio;
>>>
>>> class A {
>>>   auto tree = new RedBlackTree!string();
>>> }
>>>
>>> unittest {
>>>   auto a = new A();
>>>   a.tree.insert( "a" );
>>>   auto b = new A();
>>>   writeln( "Should be empty, but is: ", b.tree.array );
>>>   writeln( "Should be empty, but has length: ", b.tree.length 
>>> );
>>> }
>>>
>>> Which results in the following output:
>>> $ rdmd -unittest rbt.d
>>> Should be empty, but is: ["a"]
>>> Should be empty, but has length: 1
>>>
>>>
>>> I'm using dmd 2.0.65.
>>
>> Have you tried
>>
>> class A {
>>  RedBlackTree!(string) tree;
>>  this() {
>>    tree = new RedBlackTree!string();
>>  }
>> }
>>
>> Maybe in your implementation all instances of class A share 
>> the same underlying instance RedBlackTree, or class 
>> RedBlackTree was designed as a singleton (which would seem odd 
>> to me).
>>
>> PS This question would be better suited for the "D learn" 
>> forum.
>
> Ninja'd ;)
>
> Also, if you want to avoid repeating long type names an alias 
> can help:
>
> class A
> {
>   alias TreeType = RedBlackTree!string;
>
>   TreeType tree;
>
>   // etc etc.
> }
>
> In this case it isn't too bad but some template instantiations 
> can get fairly long.

Tell me about it, I'm in the process of alias'ing my template 
types, cos I've really long type instantiations now like

type = Type!(Type2!(Type3!(int, string), string))();



More information about the Digitalmars-d mailing list