TNode

template TNode (
T
string prefix = ""
string suffix = ""
) {}

Members

Interfaces

TNode
interface TNode
Undocumented in source.

Examples

static class Test : TNode!(Test,"pre_","Suff")
{
    mixin pre_TNodeHelperSuff!(true,true,true);

    string name;
    this( string name ) { this.name = name; }

    void append( string kk )
    {
        name ~= kk;
        foreach( ch; pre_childsSuff )
            ch.append( kk );
    }
}

auto e0 = new Test("a");
auto e1 = new Test("b");
auto e2 = new Test("c");
auto e3 = new Test("d");

e1.pre_parentSuff = e0;
e2.pre_parentSuff = e1;

e0.append( "ok" );

e1.pre_attachChildsSuff( e3 );

assert( e0.pre_childsSuff == [ e1 ] );
assert( e0.name == "aok" );
assert( e1.name == "bok" );
assert( e3.name == "d" );
assert( e3.pre_parentSuff == e1 );
static class Test : TNode!(Test,"a_"), TNode!(Test,"b_")
{
    mixin a_TNodeHelper!(true,true,true);
    mixin b_TNodeHelper!(true,true,true);

    string name;
    this( string name ) { this.name = name; }

    void append( string kk )
    {
        name ~= kk;
        foreach( ch; b_childs )
            ch.append( kk );
    }
}

auto e0 = new Test("e0");
auto e1 = new Test("e1");
auto e2 = new Test("e2");
auto e3 = new Test("e3");

e2.a_parent = e0;
e2.b_parent = e1;

e0.append( "ok" );

assert( e0.name == "e0ok" );
assert( e2.name == "e2" );
static interface Node : TNode!Node
{
    mixin template NodeHelper() { mixin TNodeHelper!true; }
    void inc_self();

    final void inc()
    {
        inc_self();
        foreach( ch; childs )
            ch.inc();
    }
}

static class Test : Node
{
    mixin NodeHelper;

    int i;
    this( int i ) { this.i = i; }
    void inc_self() { i++; }
}

auto a0 = new Test(10);
auto a1 = new Test(15);
a0.attachChilds( a1 );

a0.inc();

assert( a0.i == 11 );
assert( a1.i == 16 );
static class Test : TNode!Test { mixin TNodeHelper!(true, true, true); }

auto a0 = new Test;
auto a1 = new Test;
auto a2 = new Test;

assert( a0.parent is null );
assert( a1.parent is null );
assert( a2.parent is null );

a0.attachChilds( a1 );
a1.attachChilds( a2 );

assert( a0.childs.length == 1 );
assert( a1.childs.length == 1 );

assert( mustExcept!TNodeCycleException({ a2.attachChilds(a0); }) );
assert( mustExcept!TNodeNullChildException({ a2.attachChilds(null); }) );

Meta