2 #include "../dpdefs/csprogsdefs.qc"
7 //.float(entity,entity) sort_cmp;
8 .entity sort_next, sort_prev;
14 sort.sort_next = world;
19 entity Sort_New(float(entity,entity) cmp)
24 sort.sort_next = world;
29 void Sort_Remove(entity sort)
34 next = sort.sort_next;
41 void Sort_Add(entity sort, entity ent)
45 next = sort.sort_next;
48 if(!sort.sort_cmp(next, ent))
51 next = next.sort_next;
54 ent.sort_prev = parent;
55 parent.sort_next = ent;
60 void Sort_Reset(entity sort)
65 float Sort_HasNext(entity sort)
67 return (sort.chain.sort_next != world);
70 entity Sort_Next(entity sort)
73 next = sort.chain.sort_next;
76 sort.chain.sort_next = next;
77 next.sort_prev = sort.chain;
78 next.sort_next = world;
84 void Sort_Finish(entity sort)
93 sort = next.sort_next;
94 next.sort_next = sort.sort_next;
99 entity Sort_Get(entity sort, float i)
101 for(0; sort.sort_next && i > 0; --i)
102 sort = sort.sort_next;
108 * Swap two neighbours in a sortlist.
109 * @param a FIRST entity
110 * @param b entity after a
112 #define SORT_SWAP(a,b) \
113 b.sort_prev = a.sort_prev; \
114 a.sort_next = b.sort_next; \
115 if(b.sort_next) b.sort_next.sort_prev = a; \
116 if(a.sort_prev) a.sort_prev.sort_next = b; \
121 void Sort_Erase(entity ent)
123 ent.sort_prev.sort_next = ent.sort_next;
125 ent.sort_next.sort_prev = ent.sort_prev;
129 void Sort_RemoveOld(entity sort)
132 for(tmp = sort.sort_next; tmp; tmp = tmp.sort_next)
137 Sort_Erase(tmp.sort_next);