69 #define SORT_TYPE idxpos_type 70 #define SORT_TYPE_SUFFIX idxpos 71 #define SORT_TYPE_CMP_LT(a,b) ((a).idx < (b).idx || ((a).idx == (b).idx && (a).pos < (b).pos)) 72 #define SORT_TYPE_CMP_LE(a,b) ((a).idx < (b).idx || ((a).idx == (b).idx && (a).pos <= (b).pos)) 73 #define SORT_TYPE_CMP_EQ(a,b) ((a).idx == (b).idx && (a).pos == (b).pos) 79 enum { pointer_inc = 64 };
80 unsigned pointer_size;
91 int *v_pos_orig = v_pos;
93 if (!v_pos) v_pos = malloc((
size_t)n *
sizeof(v_pos[0]));
95 if (v_pos != v_pos_orig || reset_pos) {
101 pointer_size = pointer_inc;
103 stackl =
xmalloc((
size_t)pointer_size *
sizeof(stackl[0]));
104 stackr =
xmalloc((
size_t)pointer_size *
sizeof(stackr[0]));
136 if ((v_idx[i] < x_idx) || (v_idx[i] == x_idx && v_pos[i] < x_pos))
144 if ((x_idx < v_idx[j]) || (x_idx == v_idx[j] && x_pos < v_pos[j]))
173 if ( s >= pointer_size ) {
174 pointer_size = pointer_size + pointer_inc;
175 stackl =
xrealloc(stackl, (
size_t)pointer_size *
sizeof(stackl[0]));
176 stackr =
xrealloc(stackr, (
size_t)pointer_size *
sizeof(stackr[0]));
188 if ( s >= pointer_size ) {
189 pointer_size = pointer_size + pointer_inc;
190 stackl =
xrealloc(stackl, (
size_t)pointer_size *
sizeof(stackl[0]));
191 stackr =
xrealloc(stackr, (
size_t)pointer_size *
sizeof(stackr[0]));
205 if (v_pos != v_pos_orig) free(v_pos);
209 #undef SORT_TYPE_SUFFIX 210 #undef SORT_TYPE_CMP_LT 211 #undef SORT_TYPE_CMP_LE 212 #undef SORT_TYPE_CMP_EQ 213 #define SORT_TYPE int 214 #define SORT_TYPE_SUFFIX int 215 #define SORT_TYPE_CMP_LT(a,b) (a < b) 216 #define SORT_TYPE_CMP_LE(a,b) (a <= b) 217 #define SORT_TYPE_CMP_EQ(a,b) (a == b) add versions of standard API functions not returning on error
#define xrealloc(ptr, size)
macros to create quicksort implementations
void xt_quicksort_index(Xt_int *v_idx, int n, int *v_pos, int reset_pos)