%PDF- %PDF-
| Direktori : /proc/self/root/backups/router/usr/local/lib/perl5/site_perl/mach/5.36/sys/ |
| Current File : //proc/self/root/backups/router/usr/local/lib/perl5/site_perl/mach/5.36/sys/arb.ph |
require '_h2ph_pre.ph';
no warnings qw(redefine misc);
unless(defined(&_SYS_ARB_H_)) {
eval 'sub _SYS_ARB_H_ () {1;}' unless defined(&_SYS_ARB_H_);
require 'sys/cdefs.ph';
eval 'sub ARB_NULLIDX () {-1;}' unless defined(&ARB_NULLIDX);
eval 'sub ARB_NULLCOL () {-1;}' unless defined(&ARB_NULLCOL);
eval 'sub ARB_BLACK () {0;}' unless defined(&ARB_BLACK);
eval 'sub ARB_RED () {1;}' unless defined(&ARB_RED);
eval 'sub ARB_NEGINF () {-1;}' unless defined(&ARB_NEGINF);
eval 'sub ARB_INF () {1;}' unless defined(&ARB_INF);
eval 'sub ARB_HEAD {
my($name, $type, $idxbits) = @_;
eval q(\'struct name\' { \'int\'$idxbits &_t &arb_curnodes; \'int\'$idxbits &_t &arb_maxnodes; \'int\'$idxbits &_t &arb_root_idx; \'int\'$idxbits &_t &arb_free_idx; \'int\'$idxbits &_t &arb_min_idx; \'int\'$idxbits &_t &arb_max_idx; \'struct type\' $arb_nodes[]; });
}' unless defined(&ARB_HEAD);
eval 'sub ARB8_HEAD {
my($name, $type) = @_;
eval q( &ARB_HEAD($name, $type, 8));
}' unless defined(&ARB8_HEAD);
eval 'sub ARB16_HEAD {
my($name, $type) = @_;
eval q( &ARB_HEAD($name, $type, 16));
}' unless defined(&ARB16_HEAD);
eval 'sub ARB32_HEAD {
my($name, $type) = @_;
eval q( &ARB_HEAD($name, $type, 32));
}' unless defined(&ARB32_HEAD);
eval 'sub ARB_ALLOCSIZE {
my($head, $maxn, $x) = @_;
eval q(($sizeof{$head} + ($maxn) * $sizeof{$x}));
}' unless defined(&ARB_ALLOCSIZE);
eval 'sub ARB_INITIALIZER {
my($name, $maxn) = @_;
eval q(({ 0, $maxn, &ARB_NULLIDX, &ARB_NULLIDX, &ARB_NULLIDX, &ARB_NULLIDX }));
}' unless defined(&ARB_INITIALIZER);
eval 'sub ARB_INIT {
my($x, $field, $head, $maxn) = @_;
eval q(($head)-> &arb_curnodes = 0; ($head)-> &arb_maxnodes = ($maxn); ($head)-> &arb_root_idx = ($head)-> &arb_free_idx = ($head)-> &arb_min_idx = ($head)-> &arb_max_idx = &ARB_NULLIDX; &ARB_ARRFOREACH_REVWCOND($x, $field, $head, &ARB_RETURNFREE($head, $x, $field)));
}' unless defined(&ARB_INIT);
eval 'sub ARB_ENTRY {
my($idxbits) = @_;
eval q(\'struct struct\' { \'int\'$idxbits &_t &arbe_parent_idx; \'int\'$idxbits &_t &arbe_left_idx; \'int\'$idxbits &_t &arbe_right_idx; &int8_t &arbe_color; });
}' unless defined(&ARB_ENTRY);
eval 'sub ARB8_ENTRY () {
eval q( &ARB_ENTRY(8));
}' unless defined(&ARB8_ENTRY);
eval 'sub ARB16_ENTRY () {
eval q( &ARB_ENTRY(16));
}' unless defined(&ARB16_ENTRY);
eval 'sub ARB32_ENTRY () {
eval q( &ARB_ENTRY(32));
}' unless defined(&ARB32_ENTRY);
eval 'sub ARB_ENTRYINIT {
my($elm, $field) = @_;
eval q( &do { ($elm)-> ($field->{arbe_parent_idx}) = ($elm)-> ($field->{arbe_left_idx}) = ($elm)-> ($field->{arbe_right_idx}) = &ARB_NULLIDX; ($elm)-> ($field->{arbe_color}) = &ARB_NULLCOL; } &while ( 0));
}' unless defined(&ARB_ENTRYINIT);
eval 'sub ARB_ELMTYPE {
my($head) = @_;
eval q( &__typeof(($head)-> $arb_nodes[0]));
}' unless defined(&ARB_ELMTYPE);
eval 'sub ARB_NODES {
my($head) = @_;
eval q(($head)-> &arb_nodes);
}' unless defined(&ARB_NODES);
eval 'sub ARB_MAXNODES {
my($head) = @_;
eval q(($head)-> &arb_maxnodes);
}' unless defined(&ARB_MAXNODES);
eval 'sub ARB_CURNODES {
my($head) = @_;
eval q(($head)-> &arb_curnodes);
}' unless defined(&ARB_CURNODES);
eval 'sub ARB_EMPTY {
my($head) = @_;
eval q((($head)-> &arb_curnodes == 0));
}' unless defined(&ARB_EMPTY);
eval 'sub ARB_FULL {
my($head) = @_;
eval q((($head)-> &arb_curnodes >= ($head)-> &arb_maxnodes));
}' unless defined(&ARB_FULL);
eval 'sub ARB_CNODE {
my($head, $idx) = @_;
eval q((((( &intptr_t)($idx) <= &ARB_NULLIDX) || (($idx) >= &ARB_MAXNODES($head))) ? &NULL : (( &const &ARB_ELMTYPE($head))( &ARB_NODES($head) + ($idx)))));
}' unless defined(&ARB_CNODE);
eval 'sub ARB_NODE {
my($head, $idx) = @_;
eval q(( &__DECONST( &ARB_ELMTYPE($head), &ARB_CNODE($head, $idx))));
}' unless defined(&ARB_NODE);
eval 'sub ARB_ROOT {
my($head) = @_;
eval q( &ARB_NODE($head, &ARB_ROOTIDX($head)));
}' unless defined(&ARB_ROOT);
eval 'sub ARB_LEFT {
my($head, $elm, $field) = @_;
eval q( &ARB_NODE($head, &ARB_LEFTIDX($elm, $field)));
}' unless defined(&ARB_LEFT);
eval 'sub ARB_RIGHT {
my($head, $elm, $field) = @_;
eval q( &ARB_NODE($head, &ARB_RIGHTIDX($elm, $field)));
}' unless defined(&ARB_RIGHT);
eval 'sub ARB_PARENT {
my($head, $elm, $field) = @_;
eval q( &ARB_NODE($head, &ARB_PARENTIDX($elm, $field)));
}' unless defined(&ARB_PARENT);
eval 'sub ARB_FREEIDX {
my($head) = @_;
eval q(($head)-> &arb_free_idx);
}' unless defined(&ARB_FREEIDX);
eval 'sub ARB_ROOTIDX {
my($head) = @_;
eval q(($head)-> &arb_root_idx);
}' unless defined(&ARB_ROOTIDX);
eval 'sub ARB_MINIDX {
my($head) = @_;
eval q(($head)-> &arb_min_idx);
}' unless defined(&ARB_MINIDX);
eval 'sub ARB_MAXIDX {
my($head) = @_;
eval q(($head)-> &arb_max_idx);
}' unless defined(&ARB_MAXIDX);
eval 'sub ARB_SELFIDX {
my($head, $elm) = @_;
eval q((($elm) ? (( &intptr_t)(((( &const &uint8_t *)($elm)) - (( &const &uint8_t *) &ARB_NODES($head))) / $sizeof{($elm)})) : ( &intptr_t) &ARB_NULLIDX));
}' unless defined(&ARB_SELFIDX);
eval 'sub ARB_LEFTIDX {
my($elm, $field) = @_;
eval q(($elm)-> ($field->{arbe_left_idx}));
}' unless defined(&ARB_LEFTIDX);
eval 'sub ARB_RIGHTIDX {
my($elm, $field) = @_;
eval q(($elm)-> ($field->{arbe_right_idx}));
}' unless defined(&ARB_RIGHTIDX);
eval 'sub ARB_PARENTIDX {
my($elm, $field) = @_;
eval q(($elm)-> ($field->{arbe_parent_idx}));
}' unless defined(&ARB_PARENTIDX);
eval 'sub ARB_COLOR {
my($elm, $field) = @_;
eval q(($elm)-> ($field->{arbe_color}));
}' unless defined(&ARB_COLOR);
eval 'sub ARB_PREVFREE {
my($head, $elm, $field) = @_;
eval q( &ARB_NODE($head, &ARB_PREVFREEIDX($elm, $field)));
}' unless defined(&ARB_PREVFREE);
eval 'sub ARB_PREVFREEIDX {
my($elm, $field) = @_;
eval q( &ARB_LEFTIDX($elm, $field));
}' unless defined(&ARB_PREVFREEIDX);
eval 'sub ARB_NEXTFREE {
my($head, $elm, $field) = @_;
eval q( &ARB_NODE($head, &ARB_NEXTFREEIDX($elm, $field)));
}' unless defined(&ARB_NEXTFREE);
eval 'sub ARB_NEXTFREEIDX {
my($elm, $field) = @_;
eval q( &ARB_RIGHTIDX($elm, $field));
}' unless defined(&ARB_NEXTFREEIDX);
eval 'sub ARB_ISFREE {
my($elm, $field) = @_;
eval q(( &ARB_COLOR($elm, $field) == &ARB_NULLCOL));
}' unless defined(&ARB_ISFREE);
eval 'sub ARB_SET {
my($head, $elm, $parent, $field) = @_;
eval q( &do { &ARB_PARENTIDX($elm, $field) = $parent ? &ARB_SELFIDX($head, $parent) : &ARB_NULLIDX; &ARB_LEFTIDX($elm, $field) = &ARB_RIGHTIDX($elm, $field) = &ARB_NULLIDX; &ARB_COLOR($elm, $field) = &ARB_RED; } &while ( 0));
}' unless defined(&ARB_SET);
eval 'sub ARB_SET_BLACKRED {
my($black, $red, $field) = @_;
eval q( &do { &ARB_COLOR($black, $field) = &ARB_BLACK; &ARB_COLOR($red, $field) = &ARB_RED; } &while ( 0));
}' unless defined(&ARB_SET_BLACKRED);
unless(defined(&ARB_AUGMENT)) {
eval 'sub ARB_AUGMENT {
my($x) = @_;
eval q( &do {} &while (0));
}' unless defined(&ARB_AUGMENT);
}
eval 'sub ARB_ROTATE_LEFT {
my($head, $elm, $tmp, $field) = @_;
eval q( &do { &__typeof( &ARB_RIGHTIDX($elm, $field)) &_tmpidx; ($tmp) = &ARB_RIGHT($head, $elm, $field); &_tmpidx = &ARB_RIGHTIDX($elm, $field); &ARB_RIGHTIDX($elm, $field) = &ARB_LEFTIDX($tmp, $field); &if ( &ARB_RIGHTIDX($elm, $field) != &ARB_NULLIDX) { &ARB_PARENTIDX( &ARB_LEFT($head, $tmp, $field), $field) = &ARB_SELFIDX($head, $elm); } &ARB_AUGMENT($elm); &ARB_PARENTIDX($tmp, $field) = &ARB_PARENTIDX($elm, $field); &if ( &ARB_PARENTIDX($tmp, $field) != &ARB_NULLIDX) { &if ( &ARB_SELFIDX($head, $elm) == &ARB_LEFTIDX( &ARB_PARENT($head, $elm, $field), $field)) &ARB_LEFTIDX( &ARB_PARENT($head, $elm, $field), $field) = &_tmpidx; &else &ARB_RIGHTIDX( &ARB_PARENT($head, $elm, $field), $field) = &_tmpidx; } &else &ARB_ROOTIDX($head) = &_tmpidx; &ARB_LEFTIDX($tmp, $field) = &ARB_SELFIDX($head, $elm); &ARB_PARENTIDX($elm, $field) = &_tmpidx; &ARB_AUGMENT($tmp); &if ( &ARB_PARENTIDX($tmp, $field) != &ARB_NULLIDX) &ARB_AUGMENT( &ARB_PARENT($head, $tmp, $field)); } &while ( 0));
}' unless defined(&ARB_ROTATE_LEFT);
eval 'sub ARB_ROTATE_RIGHT {
my($head, $elm, $tmp, $field) = @_;
eval q( &do { &__typeof( &ARB_LEFTIDX($elm, $field)) &_tmpidx; ($tmp) = &ARB_LEFT($head, $elm, $field); &_tmpidx = &ARB_LEFTIDX($elm, $field); &ARB_LEFTIDX($elm, $field) = &ARB_RIGHTIDX($tmp, $field); &if ( &ARB_LEFTIDX($elm, $field) != &ARB_NULLIDX) { &ARB_PARENTIDX( &ARB_RIGHT($head, $tmp, $field), $field) = &ARB_SELFIDX($head, $elm); } &ARB_AUGMENT($elm); &ARB_PARENTIDX($tmp, $field) = &ARB_PARENTIDX($elm, $field); &if ( &ARB_PARENTIDX($tmp, $field) != &ARB_NULLIDX) { &if ( &ARB_SELFIDX($head, $elm) == &ARB_LEFTIDX( &ARB_PARENT($head, $elm, $field), $field)) &ARB_LEFTIDX( &ARB_PARENT($head, $elm, $field), $field) = &_tmpidx; &else &ARB_RIGHTIDX( &ARB_PARENT($head, $elm, $field), $field) = &_tmpidx; } &else &ARB_ROOTIDX($head) = &_tmpidx; &ARB_RIGHTIDX($tmp, $field) = &ARB_SELFIDX($head, $elm); &ARB_PARENTIDX($elm, $field) = &_tmpidx; &ARB_AUGMENT($tmp); &if ( &ARB_PARENTIDX($tmp, $field) != &ARB_NULLIDX) &ARB_AUGMENT( &ARB_PARENT($head, $tmp, $field)); } &while ( 0));
}' unless defined(&ARB_ROTATE_RIGHT);
eval 'sub ARB_RETURNFREE {
my($head, $elm, $field) = @_;
eval q(({ &ARB_COLOR($elm, $field) = &ARB_NULLCOL; &ARB_NEXTFREEIDX($elm, $field) = &ARB_FREEIDX($head); &ARB_FREEIDX($head) = &ARB_SELFIDX($head, $elm); $elm; }));
}' unless defined(&ARB_RETURNFREE);
eval 'sub ARB_GETFREEAT {
my($head, $field, $fidx) = @_;
eval q(({ &__typeof( &ARB_NODE($head, 0)) &_elm, &_prevelm; \'int\' &_idx = $fidx; &if ( &ARB_FREEIDX($head) == &ARB_NULLIDX && ! &ARB_FULL($head)) { &ARB_ARRFOREACH_REVERSE( &_elm, $field, $head) { &if ( &ARB_ISFREE( &_elm, $field)) &ARB_RETURNFREE($head, &_elm, $field); } } &_elm = &_prevelm = &ARB_NODE($head, &ARB_FREEIDX($head)); &for (; &_idx > 0 && &_elm != &NULL; &_idx--, &_prevelm = &_elm) &_elm = &ARB_NODE($head, &ARB_NEXTFREEIDX( &_elm, $field)); &if ( &_elm) { &if ($fidx == 0) &ARB_FREEIDX($head) = &ARB_NEXTFREEIDX( &_elm, $field); &else &ARB_NEXTFREEIDX( &_prevelm, $field) = &ARB_NEXTFREEIDX( &_elm, $field); } &_elm; }));
}' unless defined(&ARB_GETFREEAT);
eval 'sub ARB_GETFREE {
my($head, $field) = @_;
eval q( &ARB_GETFREEAT($head, $field, 0));
}' unless defined(&ARB_GETFREE);
eval 'sub ARB_PROTOTYPE {
my($name, $type, $field, $cmp) = @_;
eval q( &ARB_PROTOTYPE_INTERNAL($name, $type, $field, $cmp,));
}' unless defined(&ARB_PROTOTYPE);
eval 'sub ARB_PROTOTYPE_STATIC {
my($name, $type, $field, $cmp) = @_;
eval q( &ARB_PROTOTYPE_INTERNAL($name, $type, $field, $cmp, &__unused &static));
}' unless defined(&ARB_PROTOTYPE_STATIC);
eval 'sub ARB_PROTOTYPE_INTERNAL {
my($name, $type, $field, $cmp, $attr) = @_;
eval q( &ARB_PROTOTYPE_INSERT_COLOR($name, $type, $attr); &ARB_PROTOTYPE_REMOVE_COLOR($name, $type, $attr); &ARB_PROTOTYPE_INSERT($name, $type, $attr); &ARB_PROTOTYPE_REMOVE($name, $type, $attr); &ARB_PROTOTYPE_CFIND($name, $type, $attr); &ARB_PROTOTYPE_FIND($name, $type, $attr); &ARB_PROTOTYPE_NFIND($name, $type, $attr); &ARB_PROTOTYPE_CNEXT($name, $type, $attr); &ARB_PROTOTYPE_NEXT($name, $type, $attr); &ARB_PROTOTYPE_CPREV($name, $type, $attr); &ARB_PROTOTYPE_PREV($name, $type, $attr); &ARB_PROTOTYPE_CMINMAX($name, $type, $attr); &ARB_PROTOTYPE_MINMAX($name, $type, $attr); &ARB_PROTOTYPE_REINSERT($name, $type, $attr););
}' unless defined(&ARB_PROTOTYPE_INTERNAL);
eval 'sub ARB_PROTOTYPE_INSERT_COLOR {
my($name, $type, $attr) = @_;
eval q($attr &void $name &_ARB_INSERT_COLOR(\'struct name\' *, \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_INSERT_COLOR);
eval 'sub ARB_PROTOTYPE_REMOVE_COLOR {
my($name, $type, $attr) = @_;
eval q($attr &void $name &_ARB_REMOVE_COLOR(\'struct name\' *, \'struct type\' *, \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_REMOVE_COLOR);
eval 'sub ARB_PROTOTYPE_REMOVE {
my($name, $type, $attr) = @_;
eval q($attr \'struct type\' *$name &_ARB_REMOVE(\'struct name\' *, \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_REMOVE);
eval 'sub ARB_PROTOTYPE_INSERT {
my($name, $type, $attr) = @_;
eval q($attr \'struct type\' *$name &_ARB_INSERT(\'struct name\' *, \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_INSERT);
eval 'sub ARB_PROTOTYPE_CFIND {
my($name, $type, $attr) = @_;
eval q($attr &const \'struct type\' *$name &_ARB_CFIND( &const \'struct name\' *, &const \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_CFIND);
eval 'sub ARB_PROTOTYPE_FIND {
my($name, $type, $attr) = @_;
eval q($attr \'struct type\' *$name &_ARB_FIND( &const \'struct name\' *, &const \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_FIND);
eval 'sub ARB_PROTOTYPE_NFIND {
my($name, $type, $attr) = @_;
eval q($attr \'struct type\' *$name &_ARB_NFIND(\'struct name\' *, \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_NFIND);
eval 'sub ARB_PROTOTYPE_CNFIND {
my($name, $type, $attr) = @_;
eval q($attr &const \'struct type\' *$name &_ARB_CNFIND( &const \'struct name\' *, &const \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_CNFIND);
eval 'sub ARB_PROTOTYPE_CNEXT {
my($name, $type, $attr) = @_;
eval q($attr &const \'struct type\' *$name &_ARB_CNEXT( &const \'struct name\' * &head, &const \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_CNEXT);
eval 'sub ARB_PROTOTYPE_NEXT {
my($name, $type, $attr) = @_;
eval q($attr \'struct type\' *$name &_ARB_NEXT( &const \'struct name\' *, &const \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_NEXT);
eval 'sub ARB_PROTOTYPE_CPREV {
my($name, $type, $attr) = @_;
eval q($attr &const \'struct type\' *$name &_ARB_CPREV( &const \'struct name\' *, &const \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_CPREV);
eval 'sub ARB_PROTOTYPE_PREV {
my($name, $type, $attr) = @_;
eval q($attr \'struct type\' *$name &_ARB_PREV( &const \'struct name\' *, &const \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_PREV);
eval 'sub ARB_PROTOTYPE_CMINMAX {
my($name, $type, $attr) = @_;
eval q($attr &const \'struct type\' *$name &_ARB_CMINMAX( &const \'struct name\' *, \'int\'));
}' unless defined(&ARB_PROTOTYPE_CMINMAX);
eval 'sub ARB_PROTOTYPE_MINMAX {
my($name, $type, $attr) = @_;
eval q($attr \'struct type\' *$name &_ARB_MINMAX( &const \'struct name\' *, \'int\'));
}' unless defined(&ARB_PROTOTYPE_MINMAX);
eval 'sub ARB_PROTOTYPE_REINSERT {
my($name, $type, $attr) = @_;
eval q($attr \'struct type\' *$name &_ARB_REINSERT(\'struct name\' *, \'struct type\' *));
}' unless defined(&ARB_PROTOTYPE_REINSERT);
eval 'sub ARB_GENERATE {
my($name, $type, $field, $cmp) = @_;
eval q( &ARB_GENERATE_INTERNAL($name, $type, $field, $cmp,));
}' unless defined(&ARB_GENERATE);
eval 'sub ARB_GENERATE_STATIC {
my($name, $type, $field, $cmp) = @_;
eval q( &ARB_GENERATE_INTERNAL($name, $type, $field, $cmp, &__unused &static));
}' unless defined(&ARB_GENERATE_STATIC);
eval 'sub ARB_GENERATE_INTERNAL {
my($name, $type, $field, $cmp, $attr) = @_;
eval q( &ARB_GENERATE_INSERT_COLOR($name, $type, $field, $attr) &ARB_GENERATE_REMOVE_COLOR($name, $type, $field, $attr) &ARB_GENERATE_INSERT($name, $type, $field, $cmp, $attr) &ARB_GENERATE_REMOVE($name, $type, $field, $attr) &ARB_GENERATE_CFIND($name, $type, $field, $cmp, $attr) &ARB_GENERATE_FIND($name, $type, $field, $cmp, $attr) &ARB_GENERATE_CNEXT($name, $type, $field, $attr) &ARB_GENERATE_NEXT($name, $type, $field, $attr) &ARB_GENERATE_CPREV($name, $type, $field, $attr) &ARB_GENERATE_PREV($name, $type, $field, $attr) &ARB_GENERATE_CMINMAX($name, $type, $field, $attr) &ARB_GENERATE_MINMAX($name, $type, $field, $attr) &ARB_GENERATE_REINSERT($name, $type, $field, $cmp, $attr));
}' unless defined(&ARB_GENERATE_INTERNAL);
eval 'sub ARB_GENERATE_INSERT_COLOR {
my($name, $type, $field, $attr) = @_;
eval q($attr &void $name &_ARB_INSERT_COLOR(\'struct name\' * &head, \'struct type\' * &elm) { \'struct type\' * &parent, * &gparent, * &tmp; &while (( &parent = &ARB_PARENT( &head, &elm, $field)) != &NULL && &ARB_COLOR( &parent, $field) == &ARB_RED) { &gparent = &ARB_PARENT( &head, &parent, $field); &if ( &parent == &ARB_LEFT( &head, &gparent, $field)) { &tmp = &ARB_RIGHT( &head, &gparent, $field); &if ( &tmp && &ARB_COLOR( &tmp, $field) == &ARB_RED) { &ARB_COLOR( &tmp, $field) = &ARB_BLACK; &ARB_SET_BLACKRED( &parent, &gparent, $field); &elm = &gparent; &continue; } &if ( &ARB_RIGHT( &head, &parent, $field) == &elm) { &ARB_ROTATE_LEFT( &head, &parent, &tmp, $field); &tmp = &parent; &parent = &elm; &elm = &tmp; } &ARB_SET_BLACKRED( &parent, &gparent, $field); &ARB_ROTATE_RIGHT( &head, &gparent, &tmp, $field); } &else { &tmp = &ARB_LEFT( &head, &gparent, $field); &if ( &tmp && &ARB_COLOR( &tmp, $field) == &ARB_RED) { &ARB_COLOR( &tmp, $field) = &ARB_BLACK; &ARB_SET_BLACKRED( &parent, &gparent, $field); &elm = &gparent; &continue; } &if ( &ARB_LEFT( &head, &parent, $field) == &elm) { &ARB_ROTATE_RIGHT( &head, &parent, &tmp, $field); &tmp = &parent; &parent = &elm; &elm = &tmp; } &ARB_SET_BLACKRED( &parent, &gparent, $field); &ARB_ROTATE_LEFT( &head, &gparent, &tmp, $field); } } &ARB_COLOR( &ARB_ROOT( &head), $field) = &ARB_BLACK; });
}' unless defined(&ARB_GENERATE_INSERT_COLOR);
eval 'sub ARB_GENERATE_REMOVE_COLOR {
my($name, $type, $field, $attr) = @_;
eval q($attr &void $name &_ARB_REMOVE_COLOR(\'struct name\' * &head, \'struct type\' * &parent, \'struct type\' * &elm) { \'struct type\' * &tmp; &while (( &elm == &NULL || &ARB_COLOR( &elm, $field) == &ARB_BLACK) && &elm != &ARB_ROOT( &head)) { &if ( &ARB_LEFT( &head, &parent, $field) == &elm) { &tmp = &ARB_RIGHT( &head, &parent, $field); &if ( &ARB_COLOR( &tmp, $field) == &ARB_RED) { &ARB_SET_BLACKRED( &tmp, &parent, $field); &ARB_ROTATE_LEFT( &head, &parent, &tmp, $field); &tmp = &ARB_RIGHT( &head, &parent, $field); } &if (( &ARB_LEFT( &head, &tmp, $field) == &NULL || &ARB_COLOR( &ARB_LEFT( &head, &tmp, $field), $field) == &ARB_BLACK) && ( &ARB_RIGHT( &head, &tmp, $field) == &NULL || &ARB_COLOR( &ARB_RIGHT( &head, &tmp, $field), $field) == &ARB_BLACK)) { &ARB_COLOR( &tmp, $field) = &ARB_RED; &elm = &parent; &parent = &ARB_PARENT( &head, &elm, $field); } &else { &if ( &ARB_RIGHT( &head, &tmp, $field) == &NULL || &ARB_COLOR( &ARB_RIGHT( &head, &tmp, $field), $field) == &ARB_BLACK) { \'struct type\' * &oleft; &if (( &oleft = &ARB_LEFT( &head, &tmp, $field)) != &NULL) &ARB_COLOR( &oleft, $field) = &ARB_BLACK; &ARB_COLOR( &tmp, $field) = &ARB_RED; &ARB_ROTATE_RIGHT( &head, &tmp, &oleft, $field); &tmp = &ARB_RIGHT( &head, &parent, $field); } &ARB_COLOR( &tmp, $field) = &ARB_COLOR( &parent, $field); &ARB_COLOR( &parent, $field) = &ARB_BLACK; &if ( &ARB_RIGHT( &head, &tmp, $field)) &ARB_COLOR( &ARB_RIGHT( &head, &tmp, $field), $field) = &ARB_BLACK; &ARB_ROTATE_LEFT( &head, &parent, &tmp, $field); &elm = &ARB_ROOT( &head); &break; } } &else { &tmp = &ARB_LEFT( &head, &parent, $field); &if ( &ARB_COLOR( &tmp, $field) == &ARB_RED) { &ARB_SET_BLACKRED( &tmp, &parent, $field); &ARB_ROTATE_RIGHT( &head, &parent, &tmp, $field); &tmp = &ARB_LEFT( &head, &parent, $field); } &if (( &ARB_LEFT( &head, &tmp, $field) == &NULL || &ARB_COLOR( &ARB_LEFT( &head, &tmp, $field), $field) == &ARB_BLACK) && ( &ARB_RIGHT( &head, &tmp, $field) == &NULL || &ARB_COLOR( &ARB_RIGHT( &head, &tmp, $field), $field) == &ARB_BLACK)) { &ARB_COLOR( &tmp, $field) = &ARB_RED; &elm = &parent; &parent = &ARB_PARENT( &head, &elm, $field); } &else { &if ( &ARB_LEFT( &head, &tmp, $field) == &NULL || &ARB_COLOR( &ARB_LEFT( &head, &tmp, $field), $field) == &ARB_BLACK) { \'struct type\' * &oright; &if (( &oright = &ARB_RIGHT( &head, &tmp, $field)) != &NULL) &ARB_COLOR( &oright, $field) = &ARB_BLACK; &ARB_COLOR( &tmp, $field) = &ARB_RED; &ARB_ROTATE_LEFT( &head, &tmp, &oright, $field); &tmp = &ARB_LEFT( &head, &parent, $field); } &ARB_COLOR( &tmp, $field) = &ARB_COLOR( &parent, $field); &ARB_COLOR( &parent, $field) = &ARB_BLACK; &if ( &ARB_LEFT( &head, &tmp, $field)) &ARB_COLOR( &ARB_LEFT( &head, &tmp, $field), $field) = &ARB_BLACK; &ARB_ROTATE_RIGHT( &head, &parent, &tmp, $field); &elm = &ARB_ROOT( &head); &break; } } } &if ( &elm) &ARB_COLOR( &elm, $field) = &ARB_BLACK; });
}' unless defined(&ARB_GENERATE_REMOVE_COLOR);
eval 'sub ARB_GENERATE_REMOVE {
my($name, $type, $field, $attr) = @_;
eval q($attr \'struct type\' * $name &_ARB_REMOVE(\'struct name\' * &head, \'struct type\' * &elm) { \'struct type\' * &child, * &parent, * &old = &elm; \'int\' &color; &if ( &ARB_LEFT( &head, &elm, $field) == &NULL) &child = &ARB_RIGHT( &head, &elm, $field); &else &if ( &ARB_RIGHT( &head, &elm, $field) == &NULL) &child = &ARB_LEFT( &head, &elm, $field); &else { \'struct type\' * &left; &elm = &ARB_RIGHT( &head, &elm, $field); &while (( &left = &ARB_LEFT( &head, &elm, $field)) != &NULL) &elm = &left; &child = &ARB_RIGHT( &head, &elm, $field); &parent = &ARB_PARENT( &head, &elm, $field); &color = &ARB_COLOR( &elm, $field); &if ( &child) &ARB_PARENTIDX( &child, $field) = &ARB_SELFIDX( &head, &parent); &if ( &parent) { &if ( &ARB_LEFT( &head, &parent, $field) == &elm) &ARB_LEFTIDX( &parent, $field) = &ARB_SELFIDX( &head, &child); &else &ARB_RIGHTIDX( &parent, $field) = &ARB_SELFIDX( &head, &child); &ARB_AUGMENT( &parent); } &else &ARB_ROOTIDX( &head) = &ARB_SELFIDX( &head, &child); &if ( &ARB_PARENT( &head, &elm, $field) == &old) &parent = &elm; ( &elm)->$field = ( &old)->$field; &if ( &ARB_PARENT( &head, &old, $field)) { &if ( &ARB_LEFT( &head, &ARB_PARENT( &head, &old, $field), $field) == &old) &ARB_LEFTIDX( &ARB_PARENT( &head, &old, $field), $field) = &ARB_SELFIDX( &head, &elm); &else &ARB_RIGHTIDX( &ARB_PARENT( &head, &old, $field), $field) = &ARB_SELFIDX( &head, &elm); &ARB_AUGMENT( &ARB_PARENT( &head, &old, $field)); } &else &ARB_ROOTIDX( &head) = &ARB_SELFIDX( &head, &elm); &ARB_PARENTIDX( &ARB_LEFT( &head, &old, $field), $field) = &ARB_SELFIDX( &head, &elm); &if ( &ARB_RIGHT( &head, &old, $field)) &ARB_PARENTIDX( &ARB_RIGHT( &head, &old, $field), $field) = &ARB_SELFIDX( &head, &elm); &if ( &parent) { &left = &parent; &do { &ARB_AUGMENT( &left); } &while (( &left = &ARB_PARENT( &head, &left, $field)) != &NULL); } &goto &color; } &parent = &ARB_PARENT( &head, &elm, $field); &color = &ARB_COLOR( &elm, $field); &if ( &child) &ARB_PARENTIDX( &child, $field) = &ARB_SELFIDX( &head, &parent); &if ( &parent) { &if ( &ARB_LEFT( &head, &parent, $field) == &elm) &ARB_LEFTIDX( &parent, $field) = &ARB_SELFIDX( &head, &child); &else &ARB_RIGHTIDX( &parent, $field) = &ARB_SELFIDX( &head, &child); &ARB_AUGMENT( &parent); } &else &ARB_ROOTIDX( &head) = &ARB_SELFIDX( &head, &child); &color: &if ( &color == &ARB_BLACK) $name &_ARB_REMOVE_COLOR( &head, &parent, &child); &ARB_CURNODES( &head) -= 1; &if ( &ARB_MINIDX( &head) == &ARB_SELFIDX( &head, &old)) &ARB_MINIDX( &head) = &ARB_PARENTIDX( &old, $field); &if ( &ARB_MAXIDX( &head) == &ARB_SELFIDX( &head, &old)) &ARB_MAXIDX( &head) = &ARB_PARENTIDX( &old, $field); &ARB_RETURNFREE( &head, &old, $field); &return ( &old); });
}' unless defined(&ARB_GENERATE_REMOVE);
eval 'sub ARB_GENERATE_INSERT {
my($name, $type, $field, $cmp, $attr) = @_;
eval q($attr \'struct type\' * $name &_ARB_INSERT(\'struct name\' * &head, \'struct type\' * &elm) { \'struct type\' * &tmp; \'struct type\' * &parent = &NULL; \'int\' &comp = 0; &tmp = &ARB_ROOT( &head); &while ( &tmp) { &parent = &tmp; &comp = ($cmp)( &elm, &parent); &if ( &comp < 0) &tmp = &ARB_LEFT( &head, &tmp, $field); &else &if ( &comp > 0) &tmp = &ARB_RIGHT( &head, &tmp, $field); &else &return ( &tmp); } &ARB_SET( &head, &elm, &parent, $field); &if ( &parent != &NULL) { &if ( &comp < 0) &ARB_LEFTIDX( &parent, $field) = &ARB_SELFIDX( &head, &elm); &else &ARB_RIGHTIDX( &parent, $field) = &ARB_SELFIDX( &head, &elm); &ARB_AUGMENT( &parent); } &else &ARB_ROOTIDX( &head) = &ARB_SELFIDX( &head, &elm); $name &_ARB_INSERT_COLOR( &head, &elm); &ARB_CURNODES( &head) += 1; &if ( &ARB_MINIDX( &head) == &ARB_NULLIDX || ( &ARB_PARENTIDX( &elm, $field) == &ARB_MINIDX( &head) && &ARB_LEFTIDX( &parent, $field) == &ARB_SELFIDX( &head, &elm))) &ARB_MINIDX( &head) = &ARB_SELFIDX( &head, &elm); &if ( &ARB_MAXIDX( &head) == &ARB_NULLIDX || ( &ARB_PARENTIDX( &elm, $field) == &ARB_MAXIDX( &head) && &ARB_RIGHTIDX( &parent, $field) == &ARB_SELFIDX( &head, &elm))) &ARB_MAXIDX( &head) = &ARB_SELFIDX( &head, &elm); &return ( &NULL); });
}' unless defined(&ARB_GENERATE_INSERT);
eval 'sub ARB_GENERATE_CFIND {
my($name, $type, $field, $cmp, $attr) = @_;
eval q($attr &const \'struct type\' * $name &_ARB_CFIND( &const \'struct name\' * &head, &const \'struct type\' * &elm) { &const \'struct type\' * &tmp = &ARB_ROOT( &head); \'int\' ∁ &while ( &tmp) { &comp = $cmp( &elm, &tmp); &if ( &comp < 0) &tmp = &ARB_LEFT( &head, &tmp, $field); &else &if ( &comp > 0) &tmp = &ARB_RIGHT( &head, &tmp, $field); &else &return ( &tmp); } &return ( &NULL); });
}' unless defined(&ARB_GENERATE_CFIND);
eval 'sub ARB_GENERATE_FIND {
my($name, $type, $field, $cmp, $attr) = @_;
eval q($attr \'struct type\' * $name &_ARB_FIND( &const \'struct name\' * &head, &const \'struct type\' * &elm) { &return ( &__DECONST(\'struct type\' *, $name &_ARB_CFIND( &head, &elm))); });
}' unless defined(&ARB_GENERATE_FIND);
eval 'sub ARB_GENERATE_CNFIND {
my($name, $type, $field, $cmp, $attr) = @_;
eval q($attr &const \'struct type\' * $name &_ARB_CNFIND( &const \'struct name\' * &head, &const \'struct type\' * &elm) { &const \'struct type\' * &tmp = &ARB_ROOT( &head); &const \'struct type\' * &res = &NULL; \'int\' ∁ &while ( &tmp) { &comp = $cmp( &elm, &tmp); &if ( &comp < 0) { &res = &tmp; &tmp = &ARB_LEFT( &head, &tmp, $field); } &else &if ( &comp > 0) &tmp = &ARB_RIGHT( &head, &tmp, $field); &else &return ( &tmp); } &return ( &res); });
}' unless defined(&ARB_GENERATE_CNFIND);
eval 'sub ARB_GENERATE_NFIND {
my($name, $type, $field, $cmp, $attr) = @_;
eval q($attr \'struct type\' * $name &_ARB_NFIND( &const \'struct name\' * &head, &const \'struct type\' * &elm) { &return ( &__DECONST(\'struct type\' *, $name &_ARB_CNFIND( &head, &elm))); });
}' unless defined(&ARB_GENERATE_NFIND);
eval 'sub ARB_GENERATE_CNEXT {
my($name, $type, $field, $attr) = @_;
eval q($attr &const \'struct type\' * $name &_ARB_CNEXT( &const \'struct name\' * &head, &const \'struct type\' * &elm) { &if ( &ARB_RIGHT( &head, &elm, $field)) { &elm = &ARB_RIGHT( &head, &elm, $field); &while ( &ARB_LEFT( &head, &elm, $field)) &elm = &ARB_LEFT( &head, &elm, $field); } &else { &if ( &ARB_PARENT( &head, &elm, $field) && ( &elm == &ARB_LEFT( &head, &ARB_PARENT( &head, &elm, $field), $field))) &elm = &ARB_PARENT( &head, &elm, $field); &else { &while ( &ARB_PARENT( &head, &elm, $field) && ( &elm == &ARB_RIGHT( &head, &ARB_PARENT( &head, &elm, $field), $field))) &elm = &ARB_PARENT( &head, &elm, $field); &elm = &ARB_PARENT( &head, &elm, $field); } } &return ( &elm); });
}' unless defined(&ARB_GENERATE_CNEXT);
eval 'sub ARB_GENERATE_NEXT {
my($name, $type, $field, $attr) = @_;
eval q($attr \'struct type\' * $name &_ARB_NEXT( &const \'struct name\' * &head, &const \'struct type\' * &elm) { &return ( &__DECONST(\'struct type\' *, $name &_ARB_CNEXT( &head, &elm))); });
}' unless defined(&ARB_GENERATE_NEXT);
eval 'sub ARB_GENERATE_CPREV {
my($name, $type, $field, $attr) = @_;
eval q($attr &const \'struct type\' * $name &_ARB_CPREV( &const \'struct name\' * &head, &const \'struct type\' * &elm) { &if ( &ARB_LEFT( &head, &elm, $field)) { &elm = &ARB_LEFT( &head, &elm, $field); &while ( &ARB_RIGHT( &head, &elm, $field)) &elm = &ARB_RIGHT( &head, &elm, $field); } &else { &if ( &ARB_PARENT( &head, &elm, $field) && ( &elm == &ARB_RIGHT( &head, &ARB_PARENT( &head, &elm, $field), $field))) &elm = &ARB_PARENT( &head, &elm, $field); &else { &while ( &ARB_PARENT( &head, &elm, $field) && ( &elm == &ARB_LEFT( &head, &ARB_PARENT( &head, &elm, $field), $field))) &elm = &ARB_PARENT( &head, &elm, $field); &elm = &ARB_PARENT( &head, &elm, $field); } } &return ( &elm); });
}' unless defined(&ARB_GENERATE_CPREV);
eval 'sub ARB_GENERATE_PREV {
my($name, $type, $field, $attr) = @_;
eval q($attr \'struct type\' * $name &_ARB_PREV( &const \'struct name\' * &head, &const \'struct type\' * &elm) { &return ( &__DECONST(\'struct type\' *, $name &_ARB_CPREV( &head, &elm))); });
}' unless defined(&ARB_GENERATE_PREV);
eval 'sub ARB_GENERATE_CMINMAX {
my($name, $type, $field, $attr) = @_;
eval q($attr &const \'struct type\' * $name &_ARB_CMINMAX( &const \'struct name\' * &head, \'int\' &val) { &const \'struct type\' * &tmp = &ARB_EMPTY( &head) ? &NULL : &ARB_ROOT( &head); &const \'struct type\' * &parent = &NULL; &while ( &tmp) { &parent = &tmp; &if ( &val < 0) &tmp = &ARB_LEFT( &head, &tmp, $field); &else &tmp = &ARB_RIGHT( &head, &tmp, $field); } &return ( &__DECONST(\'struct type\' *, &parent)); });
}' unless defined(&ARB_GENERATE_CMINMAX);
eval 'sub ARB_GENERATE_MINMAX {
my($name, $type, $field, $attr) = @_;
eval q($attr \'struct type\' * $name &_ARB_MINMAX( &const \'struct name\' * &head, \'int\' &val) { &return ( &__DECONST(\'struct type\' *, $name &_ARB_CMINMAX( &head, &val))); });
}' unless defined(&ARB_GENERATE_MINMAX);
eval 'sub ARB_GENERATE_REINSERT {
my($name, $type, $field, $cmp, $attr) = @_;
eval q($attr \'struct type\' * $name &_ARB_REINSERT(\'struct name\' * &head, \'struct type\' * &elm) { \'struct type\' * &cmpelm; &if ((( &cmpelm = &ARB_PREV($name, &head, &elm)) != &NULL && ($cmp)( &cmpelm, &elm) >= 0) || (( &cmpelm = &ARB_NEXT($name, &head, &elm)) != &NULL && ($cmp)( &elm, &cmpelm) >= 0)) { &ARB_REMOVE($name, &head, &elm); &elm = &ARB_GETFREE( &head, $field); &return ( &ARB_INSERT($name, &head, &elm)); } &return ( &NULL); });
}' unless defined(&ARB_GENERATE_REINSERT);
eval 'sub ARB_INSERT {
my($name, $x, $y) = @_;
eval q($name &_ARB_INSERT($x, $y));
}' unless defined(&ARB_INSERT);
eval 'sub ARB_REMOVE {
my($name, $x, $y) = @_;
eval q($name &_ARB_REMOVE($x, $y));
}' unless defined(&ARB_REMOVE);
eval 'sub ARB_CFIND {
my($name, $x, $y) = @_;
eval q($name &_ARB_CFIND($x, $y));
}' unless defined(&ARB_CFIND);
eval 'sub ARB_FIND {
my($name, $x, $y) = @_;
eval q($name &_ARB_FIND($x, $y));
}' unless defined(&ARB_FIND);
eval 'sub ARB_CNFIND {
my($name, $x, $y) = @_;
eval q($name &_ARB_CNFIND($x, $y));
}' unless defined(&ARB_CNFIND);
eval 'sub ARB_NFIND {
my($name, $x, $y) = @_;
eval q($name &_ARB_NFIND($x, $y));
}' unless defined(&ARB_NFIND);
eval 'sub ARB_CNEXT {
my($name, $x, $y) = @_;
eval q($name &_ARB_CNEXT($x, $y));
}' unless defined(&ARB_CNEXT);
eval 'sub ARB_NEXT {
my($name, $x, $y) = @_;
eval q($name &_ARB_NEXT($x, $y));
}' unless defined(&ARB_NEXT);
eval 'sub ARB_CPREV {
my($name, $x, $y) = @_;
eval q($name &_ARB_CPREV($x, $y));
}' unless defined(&ARB_CPREV);
eval 'sub ARB_PREV {
my($name, $x, $y) = @_;
eval q($name &_ARB_PREV($x, $y));
}' unless defined(&ARB_PREV);
eval 'sub ARB_CMIN {
my($name, $x) = @_;
eval q(( &ARB_MINIDX($x) == &ARB_NULLIDX ? $name &_ARB_CMINMAX($x, &ARB_NEGINF) : &ARB_CNODE($x, &ARB_MINIDX($x))));
}' unless defined(&ARB_CMIN);
eval 'sub ARB_MIN {
my($name, $x) = @_;
eval q(( &ARB_MINIDX($x) == &ARB_NULLIDX ? $name &_ARB_MINMAX($x, &ARB_NEGINF) : &ARB_NODE($x, &ARB_MINIDX($x))));
}' unless defined(&ARB_MIN);
eval 'sub ARB_CMAX {
my($name, $x) = @_;
eval q(( &ARB_MAXIDX($x) == &ARB_NULLIDX ? $name &_ARB_CMINMAX($x, &ARB_INF) : &ARB_CNODE($x, &ARB_MAXIDX($x))));
}' unless defined(&ARB_CMAX);
eval 'sub ARB_MAX {
my($name, $x) = @_;
eval q(( &ARB_MAXIDX($x) == &ARB_NULLIDX ? $name &_ARB_MINMAX($x, &ARB_INF) : &ARB_NODE($x, &ARB_MAXIDX($x))));
}' unless defined(&ARB_MAX);
eval 'sub ARB_REINSERT {
my($name, $x, $y) = @_;
eval q($name &_ARB_REINSERT($x, $y));
}' unless defined(&ARB_REINSERT);
eval 'sub ARB_FOREACH {
my($x, $name, $head) = @_;
eval q( &for (($x) = &ARB_MIN($name, $head); ($x) != &NULL; ($x) = $name &_ARB_NEXT($head, $x)));
}' unless defined(&ARB_FOREACH);
eval 'sub ARB_FOREACH_FROM {
my($x, $name, $y) = @_;
eval q( &for (($x) = ($y); (($x) != &NULL) && (($y) = $name &_ARB_NEXT($x), ($x) != &NULL); ($x) = ($y)));
}' unless defined(&ARB_FOREACH_FROM);
eval 'sub ARB_FOREACH_SAFE {
my($x, $name, $head, $y) = @_;
eval q( &for (($x) = &ARB_MIN($name, $head); (($x) != &NULL) && (($y) = $name &_ARB_NEXT($x), ($x) != &NULL); ($x) = ($y)));
}' unless defined(&ARB_FOREACH_SAFE);
eval 'sub ARB_FOREACH_REVERSE {
my($x, $name, $head) = @_;
eval q( &for (($x) = &ARB_MAX($name, $head); ($x) != &NULL; ($x) = $name &_ARB_PREV($x)));
}' unless defined(&ARB_FOREACH_REVERSE);
eval 'sub ARB_FOREACH_REVERSE_FROM {
my($x, $name, $y) = @_;
eval q( &for (($x) = ($y); (($x) != &NULL) && (($y) = $name &_ARB_PREV($x), ($x) != &NULL); ($x) = ($y)));
}' unless defined(&ARB_FOREACH_REVERSE_FROM);
eval 'sub ARB_FOREACH_REVERSE_SAFE {
my($x, $name, $head, $y) = @_;
eval q( &for (($x) = &ARB_MAX($name, $head); (($x) != &NULL) && (($y) = $name &_ARB_PREV($x), ($x) != &NULL); ($x) = ($y)));
}' unless defined(&ARB_FOREACH_REVERSE_SAFE);
eval 'sub ARB_ARRFOREACH {
my($x, $field, $head) = @_;
eval q( &for (($x) = &ARB_NODES($head); &ARB_SELFIDX($head, $x) < &ARB_MAXNODES($head); ($x)++));
}' unless defined(&ARB_ARRFOREACH);
eval 'sub ARB_ARRFOREACH_REVWCOND {
my($x, $field, $head, $extracond) = @_;
eval q( &for (($x) = &ARB_NODES($head) + ( &ARB_MAXNODES($head) - 1); ($x) >= &ARB_NODES($head) && ($extracond); ($x)--));
}' unless defined(&ARB_ARRFOREACH_REVWCOND);
eval 'sub ARB_ARRFOREACH_REVERSE {
my($x, $field, $head) = @_;
eval q( &ARB_ARRFOREACH_REVWCOND($x, $field, $head, 1));
}' unless defined(&ARB_ARRFOREACH_REVERSE);
eval 'sub ARB_RESET_TREE {
my($head, $name, $maxn) = @_;
eval q(*($head) = &ARB_INITIALIZER($name, $maxn));
}' unless defined(&ARB_RESET_TREE);
}
1;