/* autogenerated - do not edit */
#include <jim.h>
int Jim_treeInit(Jim_Interp *interp)
{
	if (Jim_PackageProvide(interp, "tree", "1.0", JIM_ERRMSG)) return JIM_ERR;
	return Jim_EvalSource(interp, "tree.tcl", 1, "\n"
"\n"
"\n"
"\n"
"\n"
"package require oo\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"\n"
"class tree {\n"
"	tree {root {}}\n"
"	parents {root {}}\n"
"	children {root {}}\n"
"	nodeid 0\n"
"}\n"
"\n"
"\n"
"tree method depth {node} {\n"
"	set depth 0\n"
"	while {$node ne \"root\"} {\n"
"		incr depth\n"
"		set node [dict get $parents $node]\n"
"	}\n"
"	return $depth\n"
"}\n"
"\n"
"tree method parent {node} {\n"
"	dict get $parents $node\n"
"}\n"
"\n"
"tree method children {node} {\n"
"	dict get $children $node\n"
"}\n"
"\n"
"tree method numchildren {node} {\n"
"	llength [dict get $children $node]\n"
"}\n"
"\n"
"tree method next {node} {\n"
"\n"
"	set siblings [dict get $children [dict get $parents $node]]\n"
"\n"
"	set i [lsearch $siblings $node]\n"
"	incr i\n"
"	lindex $siblings $i\n"
"}\n"
"\n"
"tree method set {node key value} {\n"
"	dict set tree $node $key $value\n"
"	return $value\n"
"}\n"
"\n"
"tree method get {node key} {\n"
"	dict get $tree $node $key\n"
"}\n"
"\n"
"tree method keyexists {node key} {\n"
"	dict exists $tree $node $key\n"
"}\n"
"\n"
"tree method getall {node} {\n"
"	dict get $tree $node\n"
"}\n"
"\n"
"tree method insert {node {index end}} {\n"
"\n"
"\n"
"	set childname [incr nodeid]\n"
"	dict set tree $childname {}\n"
"\n"
"\n"
"	dict set children $childname {}\n"
"\n"
"\n"
"	dict set parents $childname $node\n"
"\n"
"\n"
"	set nodes [dict get $children $node]\n"
"	dict set children $node [linsert $nodes $index $childname]\n"
"\n"
"	return $childname\n"
"}\n"
"\n"
"tree method delete {node} {\n"
"	if {$node eq \"root\"} {\n"
"		return -code error \"can't delete root node\"\n"
"	}\n"
"	$self walk $node dfs {action subnode} {\n"
"		if {$action eq \"exit\"} {\n"
"\n"
"			dict unset tree $subnode\n"
"\n"
"			set parent [$self parent $subnode]\n"
"			if {$parent ne \"\"} {\n"
"				set siblings [dict get $children $parent]\n"
"				set i [lsearch $siblings $subnode]\n"
"				dict set children $parent [lreplace $siblings $i $i]\n"
"			}\n"
"		}\n"
"	}\n"
"}\n"
"\n"
"\n"
"tree method lappend {node key args} {\n"
"	if {[dict exists $tree $node $key]} {\n"
"		set result [dict get $tree $node $key]\n"
"	}\n"
"	lappend result {*}$args\n"
"	dict set tree $node $key $result\n"
"	return $result\n"
"}\n"
"\n"
"\n"
"\n"
"tree method walk {node type vars code} {\n"
"\n"
"	lassign $vars actionvar namevar\n"
"\n"
"	set n $node\n"
"\n"
"	if {$type ne \"child\"} {\n"
"		upvar 2 $namevar name $actionvar action\n"
"\n"
"\n"
"		set name $node\n"
"		set action enter\n"
"\n"
"		uplevel 2 $code\n"
"	}\n"
"\n"
"	if {$type eq \"dfs\"} {\n"
"\n"
"		foreach child [$self children $n] {\n"
"			uplevel 2 [list $self walk $child $type $vars $code]\n"
"		}\n"
"	} elseif {$type ne \"none\"} {\n"
"\n"
"		foreach child [$self children $n] {\n"
"			uplevel 2 [list $self walk $child none $vars $code]\n"
"		}\n"
"\n"
"\n"
"		foreach child [$self children $n] {\n"
"			uplevel 2 [list $self walk $child child $vars $code]\n"
"		}\n"
"	}\n"
"\n"
"	if {$type ne \"child\"} {\n"
"\n"
"		set name $node\n"
"		set action exit\n"
"\n"
"		uplevel 2 $code\n"
"	}\n"
"}\n"
"\n"
"tree method dump {} {\n"
"	$self walk root dfs {action n} {\n"
"		set indent [string repeat \"  \" [$self depth $n]]\n"
"		if {$action eq \"enter\"} {\n"
"			puts \"$indent$n ([$self getall $n])\"\n"
"		}\n"
"	}\n"
"	puts \"\"\n"
"}\n");
}
