1 .float(entity,entity) sort_cmp;
2 .entity sort_next, sort_prev;
4 entity Sort_New(float(entity,entity) cmp)
14 void Sort_Remove(entity sort)
19 next = sort.sort_next;
26 void Sort_Add(entity sort, entity ent)
30 next = sort.sort_next;
33 if(!sort.sort_cmp(next, ent))
36 next = next.sort_next;
39 ent.sort_prev = parent;
40 parent.sort_next = ent;
45 void Sort_Reset(entity sort)
50 float Sort_HasNext(entity sort)
52 return (sort.chain.sort_next != NULL);
55 entity Sort_Next(entity sort)
58 next = sort.chain.sort_next;
61 sort.chain.sort_next = next;
62 next.sort_prev = sort.chain;
63 next.sort_next = NULL;
69 void Sort_Finish(entity sort)
78 sort = next.sort_next;
79 next.sort_next = sort.sort_next;
84 entity Sort_Get(entity sort, float i)
86 for(; sort.sort_next && i > 0; --i)
87 sort = sort.sort_next;
91 #define SORT_SWAP(a,b) \
92 b.sort_prev = a.sort_prev; \
93 a.sort_next = b.sort_next; \
94 if(b.sort_next) b.sort_next.sort_prev = a; \
95 a.sort_prev.sort_next = b; \
99 void Sort_Erase(entity ent)
101 ent.sort_prev.sort_next = ent.sort_next;
103 ent.sort_next.sort_prev = ent.sort_prev;
107 void Sort_RemoveOld(entity sort)
110 for(tmp = sort.sort_next; tmp; tmp = tmp.sort_next)
115 Sort_Erase(tmp.sort_next);