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); }) );