Max 5 API Reference
00001 /* 00002 jit.tree.c 00003 00004 Copyright 2001-2005 - Cycling '74 00005 Joshua Kit Clayton jkc@cycling74.com 00006 00007 */ 00008 00009 #include "jit.common.h" 00010 #include "jit.linklist.h" 00011 #include "jit.tree.h" 00012 00013 void *_jit_tree_class=NULL; 00014 void *_jit_tree_node_class=NULL; 00015 00016 t_jit_err jit_tree_init(void); 00017 void jit_tree_node_addinterface(t_class *c); 00018 00019 00020 t_jit_err jit_tree_init() 00021 { 00022 _jit_tree_class = jit_class_new("jit_tree",(method)jit_tree_new,(method)jit_tree_free, 00023 sizeof(t_jit_tree),A_CANT,0L); //A_CANT = untyped 00024 00025 jit_tree_node_addinterface(_jit_tree_class); 00026 00027 jit_class_register(_jit_tree_class); 00028 00029 _jit_tree_node_class = jit_class_new("jit_tree_node",(method)jit_tree_node_new,(method)jit_tree_node_free, 00030 sizeof(t_jit_tree_node),A_CANT,0L); //A_CANT = untyped 00031 00032 jit_tree_node_addinterface(_jit_tree_node_class); 00033 00034 jit_class_register(_jit_tree_node_class); 00035 00036 return JIT_ERR_NONE; 00037 } 00038 00039 void jit_tree_node_addinterface(t_class *c) 00040 { 00041 jit_class_addmethod(c, (method)jit_tree_node_thing, "thing", A_CANT, 0L); 00042 jit_class_addmethod(c, (method)jit_tree_node_getthing, "getthing", A_CANT, 0L); 00043 jit_class_addmethod(c, (method)jit_tree_node_getparent, "getparent", A_CANT, 0L); 00044 jit_class_addmethod(c, (method)jit_tree_node_getchild, "getchild", A_CANT, 0L); 00045 jit_class_addmethod(c, (method)jit_tree_node_getchildcount, "getchildcount", A_CANT, 0L); 00046 jit_class_addmethod(c, (method)jit_tree_node_getchildren, "getchildren", A_CANT, 0L); 00047 jit_class_addmethod(c, (method)jit_tree_node_insertchild, "insertchild", A_CANT, 0L); 00048 jit_class_addmethod(c, (method)jit_tree_node_appendchild, "appendchild", A_CANT, 0L); 00049 jit_class_addmethod(c, (method)jit_tree_node_deletechild, "deletechild", A_CANT, 0L); 00050 jit_class_addmethod(c, (method)jit_tree_node_replacechild, "replacechild", A_CANT, 0L); 00051 jit_class_addmethod(c, (method)jit_tree_node_replacechild, "replacechuckchild", A_CANT, 0L); 00052 jit_class_addmethod(c, (method)jit_tree_node_chuckchild, "chuckchild", A_CANT, 0L); 00053 00054 jit_class_addmethod(c, (method)jit_tree_node_clear, "clear", A_CANT, 0L); 00055 jit_class_addmethod(c, (method)jit_tree_node_chuck, "chuck", A_CANT, 0L); 00056 jit_class_addmethod(c, (method)jit_tree_node_methodall, "methodall", A_CANT, 0L); 00057 jit_class_addmethod(c, (method)jit_tree_node_methodchild, "methodchild", A_CANT, 0L); 00058 } 00059 00060 00061 t_jit_tree *jit_tree_new(void) 00062 { 00063 t_jit_tree *x; 00064 00065 if (x = (t_jit_tree *)jit_object_alloc(_jit_tree_class)) { 00066 x->node.parent = NULL; 00067 x->node.thing = NULL; 00068 x->node.children = NULL; 00069 x->lock = NULL; //could use later 00070 } 00071 return x; 00072 } 00073 00074 void jit_tree_free(t_jit_tree *x) 00075 { 00076 jit_tree_node_clear((t_jit_tree_node *)x); 00077 } 00078 00079 t_jit_tree_node *jit_tree_node_new(t_jit_object *thing) 00080 { 00081 t_jit_tree_node *x; 00082 00083 if (x = (t_jit_tree_node *)jit_object_alloc(_jit_tree_node_class)) { 00084 x->parent = NULL; 00085 x->thing = thing; 00086 x->children = NULL; 00087 } 00088 return x; 00089 } 00090 00091 void jit_tree_node_free(t_jit_tree_node *x) 00092 { 00093 jit_tree_node_clear((t_jit_tree_node *)x); 00094 x->parent = NULL; 00095 } 00096 00097 void jit_tree_node_clear(t_jit_tree_node *x) 00098 { 00099 if (x->children) 00100 jit_object_free(x->children); 00101 x->children = NULL; 00102 if (x->thing) { 00103 jit_object_free((t_jit_object *)x->thing); 00104 x->thing = NULL; 00105 } 00106 } 00107 00108 void jit_tree_node_chuck(t_jit_tree_node *x) 00109 { 00110 if (x->children) { 00111 jit_linklist_methodall(x->children,_jit_sym_chuck); 00112 jit_linklist_chuck(x->children); 00113 x->children = NULL; 00114 } 00115 x->thing = NULL; 00116 x->parent = NULL; 00117 jit_object_free((t_jit_object *)x); 00118 } 00119 00120 void jit_tree_node_methodall(t_jit_tree_node *x, t_symbol *s, ...) 00121 { 00122 if (x->children) { 00123 jit_linklist_methodall(x->children,_jit_sym_methodall,s,*((t_stack_splat *)(((char *)(&s))+4))); 00124 if (x->thing) 00125 jit_object_method(x->thing,s,*((t_stack_splat *)(((char *)(&s))+4))); 00126 } 00127 } 00128 00129 void jit_tree_node_methodchild(t_jit_tree_node *x, long i, t_symbol *s, ...) 00130 { 00131 if (x->children) { 00132 jit_linklist_methodindex(x->children,i,s,*((t_stack_splat *)(((char *)(&s))+4))); 00133 } 00134 } 00135 00136 void jit_tree_node_thing(t_jit_tree_node *x, t_jit_object *thing) 00137 { 00138 x->thing = thing; 00139 } 00140 00141 t_jit_object *jit_tree_node_getthing(t_jit_tree_node *x) 00142 { 00143 return x->thing; 00144 } 00145 00146 t_jit_tree_node *jit_tree_node_getparent(t_jit_tree_node *x) 00147 { 00148 return (t_jit_tree_node *)x->parent; 00149 } 00150 00151 t_jit_tree_node *jit_tree_node_getchild(t_jit_tree_node *x, long index) 00152 { 00153 if (x->children) 00154 return (t_jit_tree_node *)jit_linklist_getindex(x->children,index); 00155 else 00156 return NULL; 00157 } 00158 00159 long jit_tree_node_getchildcount(t_jit_tree_node *x) 00160 { 00161 if (x->children) 00162 return jit_linklist_getsize(x->children); 00163 else 00164 return 0; 00165 } 00166 00167 t_jit_linklist *jit_tree_node_getchildren(t_jit_tree_node *x) 00168 { 00169 return x->children; 00170 } 00171 00172 void jit_tree_node_insertchild(t_jit_tree_node *x, t_jit_tree_node *o, long index) 00173 { 00174 if (!x->children) 00175 x->children = (t_jit_linklist *) jit_linklist_new(); 00176 if (x->children&&o) { 00177 o->parent = x; 00178 jit_linklist_insertindex(x->children,o,index); 00179 } 00180 } 00181 00182 void jit_tree_node_appendchild(t_jit_tree_node *x, t_jit_tree_node *o) 00183 { 00184 if (!x->children) 00185 x->children = (t_jit_linklist *) jit_linklist_new(); 00186 if (x->children&&o) { 00187 o->parent = x; 00188 jit_linklist_append(x->children,o); 00189 } 00190 } 00191 00192 void jit_tree_node_replacechild(t_jit_tree_node *x, t_jit_tree_node *o, long index) 00193 { 00194 if (!x->children) 00195 x->children = (t_jit_linklist *) jit_linklist_new(); 00196 if (x->children&&o) { 00197 o->parent = x; 00198 jit_tree_node_deletechild(x,index); 00199 jit_linklist_insertindex(x->children,o,index); 00200 } 00201 } 00202 00203 void jit_tree_node_replacechuckchild(t_jit_tree_node *x, t_jit_tree_node *o, long index) 00204 { 00205 if (x->children) { 00206 jit_tree_node_chuckchild(x,index); 00207 jit_linklist_insertindex(x->children,o,index); 00208 } 00209 } 00210 00211 void jit_tree_node_replaceremovechild(t_jit_tree_node *x, t_jit_tree_node *o, long index) 00212 { 00213 if (x->children&&o) { 00214 o->parent = x; 00215 jit_tree_node_removechild(x,index); 00216 jit_linklist_insertindex(x->children,o,index); 00217 } 00218 } 00219 00220 void jit_tree_node_deletechild(t_jit_tree_node *x, long index) 00221 { 00222 t_jit_tree_node *child; 00223 if (x->children) { 00224 if (child=(t_jit_tree_node *)jit_linklist_getindex(x->children,index)) 00225 child->parent = NULL; 00226 jit_linklist_deleteindex(x->children,index); 00227 } 00228 } 00229 00230 void jit_tree_node_chuckchild(t_jit_tree_node *x, long index) 00231 { 00232 t_jit_tree_node *child; 00233 if (x->children) { 00234 if (child=(t_jit_tree_node *)jit_linklist_getindex(x->children,index)) 00235 child->parent = NULL; 00236 jit_linklist_methodindex(x->children,index,_jit_sym_chuck); 00237 jit_linklist_deleteindex(x->children,index); 00238 } 00239 } 00240 00241 void jit_tree_node_removechild(t_jit_tree_node *x, long index) 00242 { 00243 t_jit_tree_node *child; 00244 if (x->children) { 00245 if (child=(t_jit_tree_node *)jit_linklist_getindex(x->children,index)) 00246 child->parent = NULL; 00247 jit_linklist_chuckindex(x->children,index); 00248 } 00249 } 00250
Copyright © 2008, Cycling '74