fc2c29b3047f5b1fb621be0fd2e8660557a551d8
[sdk] / compiler / bootstrap / ecere / bootstrap / CustomAVLTree.c
1 /* Code generated from eC source file: CustomAVLTree.ec */
2 #if defined(_WIN32)
3 #define __runtimePlatform 1
4 #elif defined(__APPLE__)
5 #define __runtimePlatform 3
6 #else
7 #define __runtimePlatform 2
8 #endif
9 #if defined(__GNUC__)
10 typedef long long int64;
11 typedef unsigned long long uint64;
12 #ifndef _WIN32
13 #define __declspec(x)
14 #endif
15 #elif defined(__TINYC__)
16 #include <stdarg.h>
17 #define __builtin_va_list va_list
18 #define __builtin_va_start va_start
19 #define __builtin_va_end va_end
20 #ifdef _WIN32
21 #define strcasecmp stricmp
22 #define strncasecmp strnicmp
23 #define __declspec(x) __attribute__((x))
24 #else
25 #define __declspec(x)
26 #endif
27 typedef long long int64;
28 typedef unsigned long long uint64;
29 #else
30 typedef __int64 int64;
31 typedef unsigned __int64 uint64;
32 #endif
33 #ifdef __BIG_ENDIAN__
34 #define __ENDIAN_PAD(x) (8 - (x))
35 #else
36 #define __ENDIAN_PAD(x) 0
37 #endif
38 #include <stdint.h>
39 #include <sys/types.h>
40 extern int __ecereVMethodID_class_OnCompare;
41
42 extern int __ecereVMethodID_class_OnCopy;
43
44 struct __ecereNameSpace__ecere__com__CustomAVLTree
45 {
46 struct __ecereNameSpace__ecere__com__AVLNode * root;
47 int count;
48 } __attribute__ ((gcc_struct));
49
50 struct __ecereNameSpace__ecere__sys__BTNode;
51
52 struct __ecereNameSpace__ecere__sys__OldList
53 {
54 void *  first;
55 void *  last;
56 int count;
57 unsigned int offset;
58 unsigned int circ;
59 } __attribute__ ((gcc_struct));
60
61 struct __ecereNameSpace__ecere__com__DataValue
62 {
63 union
64 {
65 char c;
66 unsigned char uc;
67 short s;
68 unsigned short us;
69 int i;
70 unsigned int ui;
71 void *  p;
72 float f;
73 double d;
74 long long i64;
75 uint64 ui64;
76 } __attribute__ ((gcc_struct)) __anon1;
77 } __attribute__ ((gcc_struct));
78
79 struct __ecereNameSpace__ecere__com__SerialBuffer
80 {
81 unsigned char *  _buffer;
82 unsigned int count;
83 unsigned int _size;
84 unsigned int pos;
85 } __attribute__ ((gcc_struct));
86
87 extern void *  __ecereNameSpace__ecere__com__eSystem_New(unsigned int size);
88
89 extern void *  __ecereNameSpace__ecere__com__eSystem_New0(unsigned int size);
90
91 extern void *  __ecereNameSpace__ecere__com__eSystem_Renew(void *  memory, unsigned int size);
92
93 extern void *  __ecereNameSpace__ecere__com__eSystem_Renew0(void *  memory, unsigned int size);
94
95 extern void __ecereNameSpace__ecere__com__eSystem_Delete(void *  memory);
96
97 struct __ecereNameSpace__ecere__com__IteratorPointer;
98
99 struct __ecereNameSpace__ecere__com__ClassTemplateParameter;
100
101 int __ecereVMethodID_class_OnFree;
102
103 struct __ecereNameSpace__ecere__com__Property;
104
105 extern void __ecereNameSpace__ecere__com__eInstance_Watch(void *  instance, struct __ecereNameSpace__ecere__com__Property * _property, void *  object, void (*  callback)(void * , void * ));
106
107 static __attribute__((unused)) struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__com__AVLNode_prev, * __ecerePropM___ecereNameSpace__ecere__com__AVLNode_prev;
108
109 static __attribute__((unused)) struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__com__AVLNode_next, * __ecerePropM___ecereNameSpace__ecere__com__AVLNode_next;
110
111 static __attribute__((unused)) struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__com__AVLNode_minimum, * __ecerePropM___ecereNameSpace__ecere__com__AVLNode_minimum;
112
113 static __attribute__((unused)) struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__com__AVLNode_maximum, * __ecerePropM___ecereNameSpace__ecere__com__AVLNode_maximum;
114
115 static __attribute__((unused)) struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__com__AVLNode_count, * __ecerePropM___ecereNameSpace__ecere__com__AVLNode_count;
116
117 static __attribute__((unused)) struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__com__AVLNode_depthProp, * __ecerePropM___ecereNameSpace__ecere__com__AVLNode_depthProp;
118
119 static __attribute__((unused)) struct __ecereNameSpace__ecere__com__Property * __ecereProp___ecereNameSpace__ecere__com__AVLNode_balanceFactor, * __ecerePropM___ecereNameSpace__ecere__com__AVLNode_balanceFactor;
120
121 struct __ecereNameSpace__ecere__com__AVLNode
122 {
123 struct __ecereNameSpace__ecere__com__AVLNode * parent, * left, * right;
124 int depth;
125 uint64 key;
126 } __attribute__ ((gcc_struct));
127
128 struct __ecereNameSpace__ecere__com__Class;
129
130 struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum(struct __ecereNameSpace__ecere__com__AVLNode * this);
131
132 struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum(struct __ecereNameSpace__ecere__com__AVLNode * this);
133
134 int __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_count(struct __ecereNameSpace__ecere__com__AVLNode * this);
135
136 int __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_depthProp(struct __ecereNameSpace__ecere__com__AVLNode * this);
137
138 int __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(struct __ecereNameSpace__ecere__com__AVLNode * this);
139
140 struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_prev(struct __ecereNameSpace__ecere__com__AVLNode * this);
141
142 struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_next(struct __ecereNameSpace__ecere__com__AVLNode * this);
143
144 struct __ecereNameSpace__ecere__com__Instance
145 {
146 void * *  _vTbl;
147 struct __ecereNameSpace__ecere__com__Class * _class;
148 int _refCount;
149 } __attribute__ ((gcc_struct));
150
151 extern long long __ecereNameSpace__ecere__com__eClass_GetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name);
152
153 extern void __ecereNameSpace__ecere__com__eClass_SetProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, long long value);
154
155 extern struct __ecereNameSpace__ecere__com__Property * __ecereNameSpace__ecere__com__eClass_AddProperty(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  dataType, void *  setStmt, void *  getStmt, int declMode);
156
157 extern void __ecereNameSpace__ecere__com__eClass_DoneAddingTemplateParameters(struct __ecereNameSpace__ecere__com__Class * base);
158
159 struct __ecereNameSpace__ecere__com__Property
160 {
161 struct __ecereNameSpace__ecere__com__Property * prev;
162 struct __ecereNameSpace__ecere__com__Property * next;
163 const char *  name;
164 unsigned int isProperty;
165 int memberAccess;
166 int id;
167 struct __ecereNameSpace__ecere__com__Class * _class;
168 const char *  dataTypeString;
169 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
170 struct __ecereNameSpace__ecere__com__Instance * dataType;
171 void (*  Set)(void * , int);
172 int (*  Get)(void * );
173 unsigned int (*  IsSet)(void * );
174 void *  data;
175 void *  symbol;
176 int vid;
177 unsigned int conversion;
178 unsigned int watcherOffset;
179 const char *  category;
180 unsigned int compiled;
181 unsigned int selfWatchable;
182 unsigned int isWatchable;
183 } __attribute__ ((gcc_struct));
184
185 extern void __ecereNameSpace__ecere__com__eInstance_FireSelfWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
186
187 extern void __ecereNameSpace__ecere__com__eInstance_SetMethod(struct __ecereNameSpace__ecere__com__Instance * instance, const char *  name, void *  function);
188
189 extern void __ecereNameSpace__ecere__com__eInstance_IncRef(struct __ecereNameSpace__ecere__com__Instance * instance);
190
191 extern void __ecereNameSpace__ecere__com__eInstance_StopWatching(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property, struct __ecereNameSpace__ecere__com__Instance * object);
192
193 extern void __ecereNameSpace__ecere__com__eInstance_FireWatchers(struct __ecereNameSpace__ecere__com__Instance * instance, struct __ecereNameSpace__ecere__com__Property * _property);
194
195 int __ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove;
196
197 struct __ecereNameSpace__ecere__sys__BinaryTree;
198
199 struct __ecereNameSpace__ecere__sys__BinaryTree
200 {
201 struct __ecereNameSpace__ecere__sys__BTNode * root;
202 int count;
203 int (*  CompareKey)(struct __ecereNameSpace__ecere__sys__BinaryTree * tree, uintptr_t a, uintptr_t b);
204 void (*  FreeKey)(void *  key);
205 } __attribute__ ((gcc_struct));
206
207 struct __ecereNameSpace__ecere__com__DataMember;
208
209 struct __ecereNameSpace__ecere__com__DataMember
210 {
211 struct __ecereNameSpace__ecere__com__DataMember * prev;
212 struct __ecereNameSpace__ecere__com__DataMember * next;
213 const char *  name;
214 unsigned int isProperty;
215 int memberAccess;
216 int id;
217 struct __ecereNameSpace__ecere__com__Class * _class;
218 const char *  dataTypeString;
219 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
220 struct __ecereNameSpace__ecere__com__Instance * dataType;
221 int type;
222 int offset;
223 int memberID;
224 struct __ecereNameSpace__ecere__sys__OldList members;
225 struct __ecereNameSpace__ecere__sys__BinaryTree membersAlpha;
226 int memberOffset;
227 short structAlignment;
228 short pointerAlignment;
229 } __attribute__ ((gcc_struct));
230
231 extern struct __ecereNameSpace__ecere__com__DataMember * __ecereNameSpace__ecere__com__eClass_AddDataMember(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, unsigned int size, unsigned int alignment, int declMode);
232
233 struct __ecereNameSpace__ecere__com__Method;
234
235 struct __ecereNameSpace__ecere__com__ClassTemplateArgument
236 {
237 union
238 {
239 struct
240 {
241 const char *  dataTypeString;
242 struct __ecereNameSpace__ecere__com__Class * dataTypeClass;
243 } __attribute__ ((gcc_struct)) __anon1;
244 struct __ecereNameSpace__ecere__com__DataValue expression;
245 struct
246 {
247 const char *  memberString;
248 union
249 {
250 struct __ecereNameSpace__ecere__com__DataMember * member;
251 struct __ecereNameSpace__ecere__com__Property * prop;
252 struct __ecereNameSpace__ecere__com__Method * method;
253 } __attribute__ ((gcc_struct)) __anon1;
254 } __attribute__ ((gcc_struct)) __anon2;
255 } __attribute__ ((gcc_struct)) __anon1;
256 } __attribute__ ((gcc_struct));
257
258 struct __ecereNameSpace__ecere__com__Method
259 {
260 const char *  name;
261 struct __ecereNameSpace__ecere__com__Method * parent;
262 struct __ecereNameSpace__ecere__com__Method * left;
263 struct __ecereNameSpace__ecere__com__Method * right;
264 int depth;
265 int (*  function)();
266 int vid;
267 int type;
268 struct __ecereNameSpace__ecere__com__Class * _class;
269 void *  symbol;
270 const char *  dataTypeString;
271 struct __ecereNameSpace__ecere__com__Instance * dataType;
272 int memberAccess;
273 } __attribute__ ((gcc_struct));
274
275 extern struct __ecereNameSpace__ecere__com__Method * __ecereNameSpace__ecere__com__eClass_AddMethod(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, const char *  type, void *  function, int declMode);
276
277 extern struct __ecereNameSpace__ecere__com__ClassTemplateParameter * __ecereNameSpace__ecere__com__eClass_AddTemplateParameter(struct __ecereNameSpace__ecere__com__Class * _class, const char *  name, int type, const void *  info, struct __ecereNameSpace__ecere__com__ClassTemplateArgument * defaultArg);
278
279 struct __ecereNameSpace__ecere__com__Module;
280
281 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_FindClass(struct __ecereNameSpace__ecere__com__Instance * module, const char *  name);
282
283 extern struct __ecereNameSpace__ecere__com__Instance * __thisModule;
284
285 extern struct __ecereNameSpace__ecere__com__Class * __ecereNameSpace__ecere__com__eSystem_RegisterClass(int type, const char *  name, const char *  baseName, int size, int sizeClass, unsigned int (*  Constructor)(void * ), void (*  Destructor)(void * ), struct __ecereNameSpace__ecere__com__Instance * module, int declMode, int inheritanceAccess);
286
287 struct __ecereNameSpace__ecere__com__NameSpace;
288
289 struct __ecereNameSpace__ecere__com__NameSpace
290 {
291 const char *  name;
292 struct __ecereNameSpace__ecere__com__NameSpace *  btParent;
293 struct __ecereNameSpace__ecere__com__NameSpace *  left;
294 struct __ecereNameSpace__ecere__com__NameSpace *  right;
295 int depth;
296 struct __ecereNameSpace__ecere__com__NameSpace *  parent;
297 struct __ecereNameSpace__ecere__sys__BinaryTree nameSpaces;
298 struct __ecereNameSpace__ecere__sys__BinaryTree classes;
299 struct __ecereNameSpace__ecere__sys__BinaryTree defines;
300 struct __ecereNameSpace__ecere__sys__BinaryTree functions;
301 } __attribute__ ((gcc_struct));
302
303 struct __ecereNameSpace__ecere__com__Class
304 {
305 struct __ecereNameSpace__ecere__com__Class * prev;
306 struct __ecereNameSpace__ecere__com__Class * next;
307 const char *  name;
308 int offset;
309 int structSize;
310 void * *  _vTbl;
311 int vTblSize;
312 unsigned int (*  Constructor)(void * );
313 void (*  Destructor)(void * );
314 int offsetClass;
315 int sizeClass;
316 struct __ecereNameSpace__ecere__com__Class * base;
317 struct __ecereNameSpace__ecere__sys__BinaryTree methods;
318 struct __ecereNameSpace__ecere__sys__BinaryTree members;
319 struct __ecereNameSpace__ecere__sys__BinaryTree prop;
320 struct __ecereNameSpace__ecere__sys__OldList membersAndProperties;
321 struct __ecereNameSpace__ecere__sys__BinaryTree classProperties;
322 struct __ecereNameSpace__ecere__sys__OldList derivatives;
323 int memberID;
324 int startMemberID;
325 int type;
326 struct __ecereNameSpace__ecere__com__Instance * module;
327 struct __ecereNameSpace__ecere__com__NameSpace *  nameSpace;
328 const char *  dataTypeString;
329 struct __ecereNameSpace__ecere__com__Instance * dataType;
330 int typeSize;
331 int defaultAlignment;
332 void (*  Initialize)();
333 int memberOffset;
334 struct __ecereNameSpace__ecere__sys__OldList selfWatchers;
335 const char *  designerClass;
336 unsigned int noExpansion;
337 const char *  defaultProperty;
338 unsigned int comRedefinition;
339 int count;
340 int isRemote;
341 unsigned int internalDecl;
342 void *  data;
343 unsigned int computeSize;
344 short structAlignment;
345 short pointerAlignment;
346 int destructionWatchOffset;
347 unsigned int fixed;
348 struct __ecereNameSpace__ecere__sys__OldList delayedCPValues;
349 int inheritanceAccess;
350 const char *  fullName;
351 void *  symbol;
352 struct __ecereNameSpace__ecere__sys__OldList conversions;
353 struct __ecereNameSpace__ecere__sys__OldList templateParams;
354 struct __ecereNameSpace__ecere__com__ClassTemplateArgument *  templateArgs;
355 struct __ecereNameSpace__ecere__com__Class * templateClass;
356 struct __ecereNameSpace__ecere__sys__OldList templatized;
357 int numParams;
358 unsigned int isInstanceClass;
359 unsigned int byValueSystemClass;
360 } __attribute__ ((gcc_struct));
361
362 struct __ecereNameSpace__ecere__com__Application
363 {
364 int argc;
365 const char * *  argv;
366 int exitCode;
367 unsigned int isGUIApp;
368 struct __ecereNameSpace__ecere__sys__OldList allModules;
369 char *  parsedCommand;
370 struct __ecereNameSpace__ecere__com__NameSpace systemNameSpace;
371 } __attribute__ ((gcc_struct));
372
373 static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__AVLNode;
374
375 static struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__CustomAVLTree;
376
377 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__IteratorPointer;
378
379 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass_uint64;
380
381 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Instance;
382
383 extern struct __ecereNameSpace__ecere__com__Class * __ecereClass___ecereNameSpace__ecere__com__Module;
384
385 struct __ecereNameSpace__ecere__com__Module
386 {
387 struct __ecereNameSpace__ecere__com__Instance * application;
388 struct __ecereNameSpace__ecere__sys__OldList classes;
389 struct __ecereNameSpace__ecere__sys__OldList defines;
390 struct __ecereNameSpace__ecere__sys__OldList functions;
391 struct __ecereNameSpace__ecere__sys__OldList modules;
392 struct __ecereNameSpace__ecere__com__Instance * prev;
393 struct __ecereNameSpace__ecere__com__Instance * next;
394 const char *  name;
395 void *  library;
396 void *  Unload;
397 int importType;
398 int origImportType;
399 struct __ecereNameSpace__ecere__com__NameSpace privateNameSpace;
400 struct __ecereNameSpace__ecere__com__NameSpace publicNameSpace;
401 } __attribute__ ((gcc_struct));
402
403 struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_prev(struct __ecereNameSpace__ecere__com__AVLNode * this)
404 {
405 if(this->left)
406 return __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum(this->left);
407 while(this)
408 {
409 if(this->parent && this == this->parent->right)
410 return this->parent;
411 else
412 this = this->parent;
413 }
414 return this;
415 }
416
417 struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_next(struct __ecereNameSpace__ecere__com__AVLNode * this)
418 {
419 struct __ecereNameSpace__ecere__com__AVLNode * right = this->right;
420
421 if(right)
422 return __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum(right);
423 while(this)
424 {
425 struct __ecereNameSpace__ecere__com__AVLNode * parent = this->parent;
426
427 if(parent && this == parent->left)
428 return parent;
429 else
430 this = parent;
431 }
432 return (((void *)0));
433 }
434
435 struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum(struct __ecereNameSpace__ecere__com__AVLNode * this)
436 {
437 while(this->left)
438 this = this->left;
439 return this;
440 }
441
442 struct __ecereNameSpace__ecere__com__AVLNode * __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum(struct __ecereNameSpace__ecere__com__AVLNode * this)
443 {
444 while(this->right)
445 this = this->right;
446 return this;
447 }
448
449 int __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_count(struct __ecereNameSpace__ecere__com__AVLNode * this)
450 {
451 return 1 + (this->left ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_count(this->left) : 0) + (this->right ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_count(this->right) : 0);
452 }
453
454 int __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_depthProp(struct __ecereNameSpace__ecere__com__AVLNode * this)
455 {
456 int leftDepth = this->left ? (__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_depthProp(this->left) + 1) : 0;
457 int rightDepth = this->right ? (__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_depthProp(this->right) + 1) : 0;
458
459 return ((leftDepth > rightDepth) ? leftDepth : rightDepth);
460 }
461
462 struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Find(struct __ecereNameSpace__ecere__com__AVLNode * this, struct __ecereNameSpace__ecere__com__Class * Tclass, const uint64 key)
463 {
464 while(this)
465 {
466 int result;
467 unsigned char * a, * b;
468
469 if((Tclass->type == 1000 && !Tclass->byValueSystemClass) || Tclass->type == 2 || Tclass->type == 4 || Tclass->type == 3)
470 {
471 a = (unsigned char *)&key;
472 a += __ENDIAN_PAD(Tclass->typeSize);
473 }
474 else
475 a = (unsigned char *)(uintptr_t)key;
476 if((Tclass->type == 1000 && !Tclass->byValueSystemClass) || Tclass->type == 2 || Tclass->type == 4 || Tclass->type == 3 || Tclass->type == 1)
477 {
478 b = (unsigned char *)&this->key;
479 b += __ENDIAN_PAD((Tclass->type == 1) ? sizeof(void *) : Tclass->typeSize);
480 }
481 else
482 b = (unsigned char *)(uintptr_t)*(uint64 *)(&this->key);
483 result = ((int (*)(void *, void *, void *))(void *)Tclass->_vTbl[__ecereVMethodID_class_OnCompare])(Tclass, a, b);
484 if(result < 0)
485 this = this->left;
486 else if(result > 0)
487 this = this->right;
488 else
489 break;
490 }
491 return this;
492 }
493
494 void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwap(struct __ecereNameSpace__ecere__com__AVLNode * this, struct __ecereNameSpace__ecere__com__AVLNode * swap)
495 {
496 if(swap->left)
497 {
498 swap->left->parent = swap->parent;
499 if(swap == swap->parent->left)
500 swap->parent->left = swap->left;
501 else if(swap == swap->parent->right)
502 swap->parent->right = swap->left;
503 swap->left = (((void *)0));
504 }
505 if(swap->right)
506 {
507 swap->right->parent = swap->parent;
508 if(swap == swap->parent->left)
509 swap->parent->left = swap->right;
510 else if(swap == swap->parent->right)
511 swap->parent->right = swap->right;
512 swap->right = (((void *)0));
513 }
514 if(swap == swap->parent->left)
515 swap->parent->left = (((void *)0));
516 else if(swap == swap->parent->right)
517 swap->parent->right = (((void *)0));
518 {
519 struct __ecereNameSpace__ecere__com__AVLNode * n;
520
521 for(n = swap->parent; n; n = n->parent)
522 {
523 int __simpleStruct0, __simpleStruct1;
524 int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
525
526 if(newDepth == n->depth)
527 break;
528 n->depth = newDepth;
529 if(n == this)
530 break;
531 }
532 }
533 swap->left = this->left;
534 if(this->left)
535 this->left->parent = swap;
536 swap->right = this->right;
537 if(this->right)
538 this->right->parent = swap;
539 swap->parent = this->parent;
540 this->left = (((void *)0));
541 this->right = (((void *)0));
542 if(this->parent)
543 {
544 if(this == this->parent->left)
545 this->parent->left = swap;
546 else if(this == this->parent->right)
547 this->parent->right = swap;
548 }
549 }
550
551 int __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(struct __ecereNameSpace__ecere__com__AVLNode * this)
552 {
553 int leftDepth = this->left ? (this->left->depth + 1) : 0;
554 int rightDepth = this->right ? (this->right->depth + 1) : 0;
555
556 return rightDepth - leftDepth;
557 }
558
559 void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateRight(struct __ecereNameSpace__ecere__com__AVLNode * this)
560 {
561 int __simpleStruct2, __simpleStruct3;
562 int __simpleStruct0, __simpleStruct1;
563
564 if(this->parent)
565 {
566 if(this == this->parent->left)
567 this->parent->left = this->left;
568 else if(this == this->parent->right)
569 this->parent->right = this->left;
570 }
571 this->left->parent = this->parent;
572 this->parent = this->left;
573 this->left = this->parent->right;
574 if(this->left)
575 this->left->parent = this;
576 this->parent->right = this;
577 this->depth = (__simpleStruct0 = this->left ? (this->left->depth + 1) : 0, __simpleStruct1 = this->right ? (this->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
578 this->parent->depth = (__simpleStruct2 = this->parent->left ? (this->parent->left->depth + 1) : 0, __simpleStruct3 = this->parent->right ? (this->parent->right->depth + 1) : 0, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
579 {
580 struct __ecereNameSpace__ecere__com__AVLNode * n;
581
582 for(n = this->parent->parent; n; n = n->parent)
583 {
584 int __simpleStruct0, __simpleStruct1;
585 int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
586
587 if(newDepth == n->depth)
588 break;
589 n->depth = newDepth;
590 }
591 }
592 }
593
594 void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateLeft(struct __ecereNameSpace__ecere__com__AVLNode * this)
595 {
596 int __simpleStruct2, __simpleStruct3;
597 int __simpleStruct0, __simpleStruct1;
598
599 if(this->parent)
600 {
601 if(this == this->parent->right)
602 this->parent->right = this->right;
603 else if(this == this->parent->left)
604 this->parent->left = this->right;
605 }
606 this->right->parent = this->parent;
607 this->parent = this->right;
608 this->right = this->parent->left;
609 if(this->right)
610 this->right->parent = this;
611 this->parent->left = this;
612 this->depth = (__simpleStruct0 = this->left ? (this->left->depth + 1) : 0, __simpleStruct1 = this->right ? (this->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
613 this->parent->depth = (__simpleStruct2 = this->parent->left ? (this->parent->left->depth + 1) : 0, __simpleStruct3 = this->parent->right ? (this->parent->right->depth + 1) : 0, (__simpleStruct2 > __simpleStruct3) ? __simpleStruct2 : __simpleStruct3);
614 {
615 struct __ecereNameSpace__ecere__com__AVLNode * n;
616
617 for(n = this->parent->parent; n; n = n->parent)
618 {
619 int __simpleStruct0, __simpleStruct1;
620 int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
621
622 if(newDepth == n->depth)
623 break;
624 n->depth = newDepth;
625 }
626 }
627 }
628
629 struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_GetFirst(struct __ecereNameSpace__ecere__com__Instance * this)
630 {
631 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
632
633 return (struct __ecereNameSpace__ecere__com__IteratorPointer *)(__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum(((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root)))) : (((void *)0)));
634 }
635
636 struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_GetLast(struct __ecereNameSpace__ecere__com__Instance * this)
637 {
638 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
639
640 return (struct __ecereNameSpace__ecere__com__IteratorPointer *)(__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum(((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root)))) : (((void *)0)));
641 }
642
643 struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_GetPrev(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * node)
644 {
645 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
646
647 return (void *)(__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_prev(((struct __ecereNameSpace__ecere__com__AVLNode *)node)));
648 }
649
650 struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_GetNext(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * node)
651 {
652 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
653
654 return (void *)(__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_next(((struct __ecereNameSpace__ecere__com__AVLNode *)node)));
655 }
656
657 struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_GetData(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * node)
658 {
659 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
660
661 return (struct __ecereNameSpace__ecere__com__AVLNode *)node;
662 }
663
664 unsigned int __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_SetData(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * node, uint64 data)
665 {
666 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
667
668 return 0;
669 }
670
671 struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Find(struct __ecereNameSpace__ecere__com__Instance * this, uint64 value)
672 {
673 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
674
675 return (struct __ecereNameSpace__ecere__com__IteratorPointer *)((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(value)));
676 }
677
678 unsigned int __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Add(struct __ecereNameSpace__ecere__com__AVLNode * this, struct __ecereNameSpace__ecere__com__Class * Tclass, struct __ecereNameSpace__ecere__com__AVLNode * node)
679 {
680 if(!Tclass)
681 Tclass = __ecereClass_uint64;
682 while(1)
683 {
684 int result;
685 unsigned char * a, * b;
686
687 if((Tclass->type == 1000 && !Tclass->byValueSystemClass) || Tclass->type == 2 || Tclass->type == 4 || Tclass->type == 3 || Tclass->type == 1)
688 {
689 a = (unsigned char *)&node->key;
690 b = (unsigned char *)&this->key;
691 a += __ENDIAN_PAD((Tclass->type == 1) ? sizeof(void *) : Tclass->typeSize);
692 b += __ENDIAN_PAD((Tclass->type == 1) ? sizeof(void *) : Tclass->typeSize);
693 }
694 else
695 {
696 a = (unsigned char *)(uintptr_t)*(uint64 *)(&node->key);
697 b = (unsigned char *)(uintptr_t)*(uint64 *)(&this->key);
698 }
699 result = ((int (*)(void *, void *, void *))(void *)Tclass->_vTbl[__ecereVMethodID_class_OnCompare])(Tclass, a, b);
700 if(!result)
701 {
702 return 0;
703 }
704 else if(result > 0)
705 {
706 if(this->right)
707 this = this->right;
708 else
709 {
710 node->parent = this;
711 this->right = node;
712 node->depth = 0;
713 {
714 struct __ecereNameSpace__ecere__com__AVLNode * n;
715
716 for(n = this; n; n = n->parent)
717 {
718 int __simpleStruct0, __simpleStruct1;
719 int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
720
721 if(newDepth == n->depth)
722 break;
723 n->depth = newDepth;
724 }
725 }
726 return 1;
727 }
728 }
729 else
730 {
731 if(this->left)
732 this = this->left;
733 else
734 {
735 node->parent = this;
736 this->left = node;
737 node->depth = 0;
738 {
739 struct __ecereNameSpace__ecere__com__AVLNode * n;
740
741 for(n = this; n; n = n->parent)
742 {
743 int __simpleStruct0, __simpleStruct1;
744 int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
745
746 if(newDepth == n->depth)
747 break;
748 n->depth = newDepth;
749 }
750 }
751 return 1;
752 }
753 }
754 }
755 }
756
757 void __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Delete(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * _item)
758 {
759 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
760 struct __ecereNameSpace__ecere__com__AVLNode * item = (struct __ecereNameSpace__ecere__com__AVLNode *)_item;
761
762 ((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__ecereClass___ecereNameSpace__ecere__com__CustomAVLTree->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(this, _item);
763 (((void (* )(void *  _class, void *  data))((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[3].__anon1.__anon1.dataTypeClass->_vTbl[__ecereVMethodID_class_OnFree])(((struct __ecereNameSpace__ecere__com__Instance * )(char * )this)->_class->templateArgs[3].__anon1.__anon1.dataTypeClass, ((void * )((uintptr_t)(item)))), item = 0);
764 }
765
766 void __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Free(struct __ecereNameSpace__ecere__com__Instance * this)
767 {
768 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
769 struct __ecereNameSpace__ecere__com__AVLNode * item;
770
771 while((item = ((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root)))))
772 {
773 ((void (*)(struct __ecereNameSpace__ecere__com__Instance *, struct __ecereNameSpace__ecere__com__IteratorPointer * it))__ecereClass___ecereNameSpace__ecere__com__CustomAVLTree->_vTbl[__ecereVMethodID___ecereNameSpace__ecere__com__Container_Remove])(this, (void *)(((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(item)))));
774 (((void (* )(void *  _class, void *  data))((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[3].__anon1.__anon1.dataTypeClass->_vTbl[__ecereVMethodID_class_OnFree])(((struct __ecereNameSpace__ecere__com__Instance * )(char * )this)->_class->templateArgs[3].__anon1.__anon1.dataTypeClass, ((void * )((uintptr_t)(item)))), item = 0);
775 }
776 }
777
778 void __ecereUnregisterModule_CustomAVLTree(struct __ecereNameSpace__ecere__com__Instance * module)
779 {
780
781 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_prev = (void *)0;
782 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_next = (void *)0;
783 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_minimum = (void *)0;
784 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_maximum = (void *)0;
785 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_count = (void *)0;
786 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_depthProp = (void *)0;
787 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_balanceFactor = (void *)0;
788 }
789
790 void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_DoubleRotateRight(struct __ecereNameSpace__ecere__com__AVLNode * this)
791 {
792 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateLeft(this->left);
793 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateRight(this);
794 }
795
796 void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_DoubleRotateLeft(struct __ecereNameSpace__ecere__com__AVLNode * this)
797 {
798 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateRight(this->right);
799 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateLeft(this);
800 }
801
802 struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(struct __ecereNameSpace__ecere__com__AVLNode * this)
803 {
804 while(1)
805 {
806 int factor = __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(this);
807
808 if(factor < -1)
809 {
810 if(__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(this->left) == 1)
811 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_DoubleRotateRight(this);
812 else
813 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateRight(this);
814 }
815 else if(factor > 1)
816 {
817 if(__ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor(this->right) == -1)
818 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_DoubleRotateLeft(this);
819 else
820 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_SingleRotateLeft(this);
821 }
822 if(this->parent)
823 this = this->parent;
824 else
825 return this;
826 }
827 }
828
829 struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwapLeft(struct __ecereNameSpace__ecere__com__AVLNode * this)
830 {
831 struct __ecereNameSpace__ecere__com__AVLNode * swap = this->left ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum(this->left) : this->right;
832 struct __ecereNameSpace__ecere__com__AVLNode * swapParent = (((void *)0));
833
834 if(swap)
835 {
836 swapParent = swap->parent;
837 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwap(this, swap);
838 }
839 if(this->parent)
840 {
841 if(this == this->parent->left)
842 this->parent->left = (((void *)0));
843 else if(this == this->parent->right)
844 this->parent->right = (((void *)0));
845 }
846 {
847 struct __ecereNameSpace__ecere__com__AVLNode * n;
848
849 for(n = swap ? swap : this->parent; n; n = n->parent)
850 {
851 int __simpleStruct0, __simpleStruct1;
852 int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
853
854 if(newDepth == n->depth && n != swap)
855 break;
856 n->depth = newDepth;
857 }
858 }
859 if(swapParent && swapParent != this)
860 return __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(swapParent);
861 else if(swap)
862 return __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(swap);
863 else if(this->parent)
864 return __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(this->parent);
865 else
866 return (((void *)0));
867 }
868
869 struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwapRight(struct __ecereNameSpace__ecere__com__AVLNode * this)
870 {
871 struct __ecereNameSpace__ecere__com__AVLNode * result;
872 struct __ecereNameSpace__ecere__com__AVLNode * swap = this->right ? __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum(this->right) : this->left;
873 struct __ecereNameSpace__ecere__com__AVLNode * swapParent = (((void *)0));
874
875 if(swap)
876 {
877 swapParent = swap->parent;
878 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwap(this, swap);
879 }
880 if(this->parent)
881 {
882 if(this == this->parent->left)
883 this->parent->left = (((void *)0));
884 else if(this == this->parent->right)
885 this->parent->right = (((void *)0));
886 }
887 {
888 struct __ecereNameSpace__ecere__com__AVLNode * n;
889
890 for(n = swap ? swap : this->parent; n; n = n->parent)
891 {
892 int __simpleStruct0, __simpleStruct1;
893 int newDepth = (__simpleStruct0 = n->left ? (n->left->depth + 1) : 0, __simpleStruct1 = n->right ? (n->right->depth + 1) : 0, (__simpleStruct0 > __simpleStruct1) ? __simpleStruct0 : __simpleStruct1);
894
895 if(newDepth == n->depth && n != swap)
896 break;
897 n->depth = newDepth;
898 }
899 }
900 if(swapParent && swapParent != this)
901 result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(swapParent);
902 else if(swap)
903 result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(swap);
904 else if(this->parent)
905 result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(this->parent);
906 else
907 result = (((void *)0));
908 return result;
909 }
910
911 struct __ecereNameSpace__ecere__com__IteratorPointer * __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Add(struct __ecereNameSpace__ecere__com__Instance * this, uint64 node)
912 {
913 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
914
915 if(!((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root))))
916 __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root = ((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(node)));
917 else
918 {
919 struct __ecereNameSpace__ecere__com__Class * Tclass = ((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[3].__anon1.__anon1.dataTypeClass->templateArgs[0].__anon1.__anon1.dataTypeClass;
920
921 if(!Tclass)
922 {
923 Tclass = ((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[3].__anon1.__anon1.dataTypeClass->templateArgs[0].__anon1.__anon1.dataTypeClass = __ecereNameSpace__ecere__com__eSystem_FindClass(((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application, ((struct __ecereNameSpace__ecere__com__Instance *)(char *)this)->_class->templateArgs[3].__anon1.__anon1.dataTypeClass->templateArgs[0].__anon1.__anon1.dataTypeString);
924 }
925 if(__ecereMethod___ecereNameSpace__ecere__com__AVLNode_Add(((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root))), Tclass, ((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(node)))))
926 __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Rebalance(((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(node))));
927 else
928 return (((void *)0));
929 }
930 __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->count++;
931 return (struct __ecereNameSpace__ecere__com__IteratorPointer *)((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(node)));
932 }
933
934 void __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Remove(struct __ecereNameSpace__ecere__com__Instance * this, struct __ecereNameSpace__ecere__com__IteratorPointer * node)
935 {
936 __attribute__((unused)) struct __ecereNameSpace__ecere__com__CustomAVLTree * __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree = (struct __ecereNameSpace__ecere__com__CustomAVLTree *)(this ? (((char *)this) + 0 + sizeof(struct __ecereNameSpace__ecere__com__Instance)) : 0);
937 struct __ecereNameSpace__ecere__com__AVLNode * parent = ((struct __ecereNameSpace__ecere__com__AVLNode *)node)->parent;
938
939 if(parent || ((struct __ecereNameSpace__ecere__com__AVLNode *)((uintptr_t)(__ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root))) == (struct __ecereNameSpace__ecere__com__AVLNode *)node)
940 {
941 __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->root = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_RemoveSwapRight(((struct __ecereNameSpace__ecere__com__AVLNode *)node));
942 __ecerePointer___ecereNameSpace__ecere__com__CustomAVLTree->count--;
943 ((struct __ecereNameSpace__ecere__com__AVLNode *)node)->parent = (((void *)0));
944 }
945 }
946
947 void __ecereRegisterModule_CustomAVLTree(struct __ecereNameSpace__ecere__com__Instance * module)
948 {
949 struct __ecereNameSpace__ecere__com__ClassTemplateArgument __simpleStruct0 =
950 {
951
952 .__anon1 = {
953
954 .__anon1 = {
955 .dataTypeString = "uint64"
956 }
957 }
958 };
959 struct __ecereNameSpace__ecere__com__Class __attribute__((unused)) * class;
960
961 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(5, "ecere::com::AVLNode", "ecere::com::IteratorPointer", sizeof(struct __ecereNameSpace__ecere__com__AVLNode), 0, (void *)0, (void *)0, module, 4, 1);
962 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class)
963 __ecereClass___ecereNameSpace__ecere__com__AVLNode = class;
964 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Find", "thisclass Find(ecere::com::Class Tclass, const T key)", __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Find, 1);
965 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "__ecerePrivateData0", "byte[32]", 32, 1, 2);
966 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "key", "T", 8, 8, 1);
967 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_prev = __ecereNameSpace__ecere__com__eClass_AddProperty(class, "prev", "thisclass", 0, __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_prev, 1);
968 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application)
969 __ecereProp___ecereNameSpace__ecere__com__AVLNode_prev = __ecerePropM___ecereNameSpace__ecere__com__AVLNode_prev, __ecerePropM___ecereNameSpace__ecere__com__AVLNode_prev = (void *)0;
970 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_next = __ecereNameSpace__ecere__com__eClass_AddProperty(class, "next", "thisclass", 0, __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_next, 1);
971 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application)
972 __ecereProp___ecereNameSpace__ecere__com__AVLNode_next = __ecerePropM___ecereNameSpace__ecere__com__AVLNode_next, __ecerePropM___ecereNameSpace__ecere__com__AVLNode_next = (void *)0;
973 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_minimum = __ecereNameSpace__ecere__com__eClass_AddProperty(class, "minimum", "thisclass", 0, __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_minimum, 1);
974 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application)
975 __ecereProp___ecereNameSpace__ecere__com__AVLNode_minimum = __ecerePropM___ecereNameSpace__ecere__com__AVLNode_minimum, __ecerePropM___ecereNameSpace__ecere__com__AVLNode_minimum = (void *)0;
976 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_maximum = __ecereNameSpace__ecere__com__eClass_AddProperty(class, "maximum", "thisclass", 0, __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_maximum, 1);
977 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application)
978 __ecereProp___ecereNameSpace__ecere__com__AVLNode_maximum = __ecerePropM___ecereNameSpace__ecere__com__AVLNode_maximum, __ecerePropM___ecereNameSpace__ecere__com__AVLNode_maximum = (void *)0;
979 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_count = __ecereNameSpace__ecere__com__eClass_AddProperty(class, "count", "int", 0, __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_count, 1);
980 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application)
981 __ecereProp___ecereNameSpace__ecere__com__AVLNode_count = __ecerePropM___ecereNameSpace__ecere__com__AVLNode_count, __ecerePropM___ecereNameSpace__ecere__com__AVLNode_count = (void *)0;
982 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_depthProp = __ecereNameSpace__ecere__com__eClass_AddProperty(class, "depthProp", "int", 0, __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_depthProp, 1);
983 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application)
984 __ecereProp___ecereNameSpace__ecere__com__AVLNode_depthProp = __ecerePropM___ecereNameSpace__ecere__com__AVLNode_depthProp, __ecerePropM___ecereNameSpace__ecere__com__AVLNode_depthProp = (void *)0;
985 __ecerePropM___ecereNameSpace__ecere__com__AVLNode_balanceFactor = __ecereNameSpace__ecere__com__eClass_AddProperty(class, "balanceFactor", "int", 0, __ecereProp___ecereNameSpace__ecere__com__AVLNode_Get_balanceFactor, 2);
986 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application)
987 __ecereProp___ecereNameSpace__ecere__com__AVLNode_balanceFactor = __ecerePropM___ecereNameSpace__ecere__com__AVLNode_balanceFactor, __ecerePropM___ecereNameSpace__ecere__com__AVLNode_balanceFactor = (void *)0;
988 __ecereNameSpace__ecere__com__eClass_AddTemplateParameter(class, "T", 0, 0, (((void *)0)));
989 __ecereNameSpace__ecere__com__eClass_DoneAddingTemplateParameters(class);
990 if(class)
991 class->fixed = (unsigned int)1;
992 class = __ecereNameSpace__ecere__com__eSystem_RegisterClass(0, "ecere::com::CustomAVLTree", "ecere::com::Container<BT>", sizeof(struct __ecereNameSpace__ecere__com__CustomAVLTree), 0, (void *)0, (void *)0, module, 4, 1);
993 if(((struct __ecereNameSpace__ecere__com__Module *)(((char *)module + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application == ((struct __ecereNameSpace__ecere__com__Module *)(((char *)__thisModule + sizeof(struct __ecereNameSpace__ecere__com__Instance))))->application && class)
994 __ecereClass___ecereNameSpace__ecere__com__CustomAVLTree = class;
995 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "GetFirst", 0, __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_GetFirst, 1);
996 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "GetLast", 0, __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_GetLast, 1);
997 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "GetPrev", 0, __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_GetPrev, 1);
998 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "GetNext", 0, __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_GetNext, 1);
999 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "GetData", 0, __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_GetData, 1);
1000 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "SetData", 0, __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_SetData, 1);
1001 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Add", 0, __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Add, 1);
1002 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Remove", 0, __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Remove, 1);
1003 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Find", 0, __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Find, 1);
1004 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Free", 0, __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Free, 1);
1005 __ecereNameSpace__ecere__com__eClass_AddMethod(class, "Delete", 0, __ecereMethod___ecereNameSpace__ecere__com__CustomAVLTree_Delete, 1);
1006 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "root", "BT", sizeof(void *), 0xF000F000, 1);
1007 __ecereNameSpace__ecere__com__eClass_AddDataMember(class, "count", "int", 4, 4, 1);
1008 __ecereNameSpace__ecere__com__eClass_AddTemplateParameter(class, "BT", 0, "ecere::com::AVLNode", (((void *)0)));
1009 __ecereNameSpace__ecere__com__eClass_AddTemplateParameter(class, "KT", 0, 0, &__simpleStruct0);
1010 __ecereNameSpace__ecere__com__eClass_DoneAddingTemplateParameters(class);
1011 if(class)
1012 class->fixed = (unsigned int)1;
1013 }
1014
1015 struct __ecereNameSpace__ecere__com__AVLNode *  __ecereMethod___ecereNameSpace__ecere__com__AVLNode_FindAll(struct __ecereNameSpace__ecere__com__AVLNode *  this, const uint64 key);
1016
1017 struct __ecereNameSpace__ecere__com__AVLNode * __ecereMethod___ecereNameSpace__ecere__com__AVLNode_FindAll(struct __ecereNameSpace__ecere__com__AVLNode * this, const uint64 key)
1018 {
1019 struct __ecereNameSpace__ecere__com__AVLNode * result = (((void *)0));
1020
1021 if(this->key == key)
1022 result = this;
1023 if(!result && this->left)
1024 result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_FindAll(this->left, key);
1025 if(!result && this->right)
1026 result = __ecereMethod___ecereNameSpace__ecere__com__AVLNode_FindAll(this->right, key);
1027 return result;
1028 }
1029
1030 void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Free(struct __ecereNameSpace__ecere__com__AVLNode *  this);
1031
1032 void __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Free(struct __ecereNameSpace__ecere__com__AVLNode * this)
1033 {
1034 if(this->left)
1035 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Free(this->left);
1036 if(this->right)
1037 __ecereMethod___ecereNameSpace__ecere__com__AVLNode_Free(this->right);
1038 ((this ? (__ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor ? __ecereClass___ecereNameSpace__ecere__com__AVLNode->Destructor((void *)this) : 0, __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor ? __ecereClass___ecereNameSpace__ecere__com__IteratorPointer->Destructor((void *)this) : 0, __ecereNameSpace__ecere__com__eSystem_Delete(this)) : 0), this = 0);
1039 }
1040