85 return ncp; |
86 return ncp; |
86 } |
87 } |
87 |
88 |
88 /* COMPARE FUNCTIONS */ |
89 /* COMPARE FUNCTIONS */ |
89 |
90 |
90 int ucx_strcmp(void *s1, void *s2, void *data) { |
91 int ucx_cmp_str(const void *s1, const void *s2, void *data) { |
91 return strcmp((char*)s1, (char*)s2); |
92 return strcmp((const char*)s1, (const char*)s2); |
92 } |
93 } |
93 |
94 |
94 int ucx_strncmp(void *s1, void *s2, void *n) { |
95 int ucx_cmp_strn(const void *s1, const void *s2, void *n) { |
95 return strncmp((char*)s1, (char*)s2, *((size_t*) n)); |
96 return strncmp((const char*)s1, (const char*)s2, *((size_t*) n)); |
96 } |
97 } |
97 |
98 |
98 int ucx_intcmp(void *i1, void *i2, void *data) { |
99 int ucx_cmp_sstr(const void *s1, const void *s2, void *data) { |
99 int a = *((int*) i1); |
100 sstr_t a = *(const sstr_t*) s1; |
100 int b = *((int*) i2); |
101 sstr_t b = *(const sstr_t*) s2; |
101 if (a == b) { |
102 return sstrcmp(a, b); |
102 return 0; |
103 } |
103 } else { |
104 |
104 return a < b ? -1 : 1; |
105 int ucx_cmp_int(const void *i1, const void *i2, void *data) { |
105 } |
106 int a = *((const int*) i1); |
106 } |
107 int b = *((const int*) i2); |
107 |
108 if (a == b) { |
108 int ucx_floatcmp(void *f1, void *f2, void *epsilon) { |
109 return 0; |
109 float a = *((float*) f1); |
110 } else { |
110 float b = *((float*) f2); |
111 return a < b ? -1 : 1; |
|
112 } |
|
113 } |
|
114 |
|
115 int ucx_cmp_longint(const void *i1, const void *i2, void *data) { |
|
116 long int a = *((const long int*) i1); |
|
117 long int b = *((const long int*) i2); |
|
118 if (a == b) { |
|
119 return 0; |
|
120 } else { |
|
121 return a < b ? -1 : 1; |
|
122 } |
|
123 } |
|
124 |
|
125 int ucx_cmp_longlong(const void *i1, const void *i2, void *data) { |
|
126 long long a = *((const long long*) i1); |
|
127 long long b = *((const long long*) i2); |
|
128 if (a == b) { |
|
129 return 0; |
|
130 } else { |
|
131 return a < b ? -1 : 1; |
|
132 } |
|
133 } |
|
134 |
|
135 int ucx_cmp_int16(const void *i1, const void *i2, void *data) { |
|
136 int16_t a = *((const int16_t*) i1); |
|
137 int16_t b = *((const int16_t*) i2); |
|
138 if (a == b) { |
|
139 return 0; |
|
140 } else { |
|
141 return a < b ? -1 : 1; |
|
142 } |
|
143 } |
|
144 |
|
145 int ucx_cmp_int32(const void *i1, const void *i2, void *data) { |
|
146 int32_t a = *((const int32_t*) i1); |
|
147 int32_t b = *((const int32_t*) i2); |
|
148 if (a == b) { |
|
149 return 0; |
|
150 } else { |
|
151 return a < b ? -1 : 1; |
|
152 } |
|
153 } |
|
154 |
|
155 int ucx_cmp_int64(const void *i1, const void *i2, void *data) { |
|
156 int64_t a = *((const int64_t*) i1); |
|
157 int64_t b = *((const int64_t*) i2); |
|
158 if (a == b) { |
|
159 return 0; |
|
160 } else { |
|
161 return a < b ? -1 : 1; |
|
162 } |
|
163 } |
|
164 |
|
165 int ucx_cmp_uint(const void *i1, const void *i2, void *data) { |
|
166 unsigned int a = *((const unsigned int*) i1); |
|
167 unsigned int b = *((const unsigned int*) i2); |
|
168 if (a == b) { |
|
169 return 0; |
|
170 } else { |
|
171 return a < b ? -1 : 1; |
|
172 } |
|
173 } |
|
174 |
|
175 int ucx_cmp_ulongint(const void *i1, const void *i2, void *data) { |
|
176 unsigned long int a = *((const unsigned long int*) i1); |
|
177 unsigned long int b = *((const unsigned long int*) i2); |
|
178 if (a == b) { |
|
179 return 0; |
|
180 } else { |
|
181 return a < b ? -1 : 1; |
|
182 } |
|
183 } |
|
184 |
|
185 int ucx_cmp_ulonglong(const void *i1, const void *i2, void *data) { |
|
186 unsigned long long a = *((const unsigned long long*) i1); |
|
187 unsigned long long b = *((const unsigned long long*) i2); |
|
188 if (a == b) { |
|
189 return 0; |
|
190 } else { |
|
191 return a < b ? -1 : 1; |
|
192 } |
|
193 } |
|
194 |
|
195 int ucx_cmp_uint16(const void *i1, const void *i2, void *data) { |
|
196 uint16_t a = *((const uint16_t*) i1); |
|
197 uint16_t b = *((const uint16_t*) i2); |
|
198 if (a == b) { |
|
199 return 0; |
|
200 } else { |
|
201 return a < b ? -1 : 1; |
|
202 } |
|
203 } |
|
204 |
|
205 int ucx_cmp_uint32(const void *i1, const void *i2, void *data) { |
|
206 uint32_t a = *((const uint32_t*) i1); |
|
207 uint32_t b = *((const uint32_t*) i2); |
|
208 if (a == b) { |
|
209 return 0; |
|
210 } else { |
|
211 return a < b ? -1 : 1; |
|
212 } |
|
213 } |
|
214 |
|
215 int ucx_cmp_uint64(const void *i1, const void *i2, void *data) { |
|
216 uint64_t a = *((const uint64_t*) i1); |
|
217 uint64_t b = *((const uint64_t*) i2); |
|
218 if (a == b) { |
|
219 return 0; |
|
220 } else { |
|
221 return a < b ? -1 : 1; |
|
222 } |
|
223 } |
|
224 |
|
225 intmax_t ucx_dist_int(const void *i1, const void *i2, void *data) { |
|
226 intmax_t a = *((const int*) i1); |
|
227 intmax_t b = *((const int*) i2); |
|
228 return a - b; |
|
229 } |
|
230 |
|
231 intmax_t ucx_dist_longint(const void *i1, const void *i2, void *data) { |
|
232 intmax_t a = *((const long int*) i1); |
|
233 intmax_t b = *((const long int*) i2); |
|
234 return a - b; |
|
235 } |
|
236 |
|
237 intmax_t ucx_dist_longlong(const void *i1, const void *i2, void *data) { |
|
238 intmax_t a = *((const long long*) i1); |
|
239 intmax_t b = *((const long long*) i2); |
|
240 return a - b; |
|
241 } |
|
242 |
|
243 intmax_t ucx_dist_int16(const void *i1, const void *i2, void *data) { |
|
244 intmax_t a = *((const int16_t*) i1); |
|
245 intmax_t b = *((const int16_t*) i2); |
|
246 return a - b; |
|
247 } |
|
248 |
|
249 intmax_t ucx_dist_int32(const void *i1, const void *i2, void *data) { |
|
250 intmax_t a = *((const int32_t*) i1); |
|
251 intmax_t b = *((const int32_t*) i2); |
|
252 return a - b; |
|
253 } |
|
254 |
|
255 intmax_t ucx_dist_int64(const void *i1, const void *i2, void *data) { |
|
256 intmax_t a = *((const int64_t*) i1); |
|
257 intmax_t b = *((const int64_t*) i2); |
|
258 return a - b; |
|
259 } |
|
260 |
|
261 intmax_t ucx_dist_uint(const void *i1, const void *i2, void *data) { |
|
262 uintmax_t a = *((const unsigned int*) i1); |
|
263 uintmax_t b = *((const unsigned int*) i2); |
|
264 return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); |
|
265 } |
|
266 |
|
267 intmax_t ucx_dist_ulongint(const void *i1, const void *i2, void *data) { |
|
268 uintmax_t a = *((const unsigned long int*) i1); |
|
269 uintmax_t b = *((const unsigned long int*) i2); |
|
270 return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); |
|
271 } |
|
272 |
|
273 intmax_t ucx_dist_ulonglong(const void *i1, const void *i2, void *data) { |
|
274 uintmax_t a = *((const unsigned long long*) i1); |
|
275 uintmax_t b = *((const unsigned long long*) i2); |
|
276 return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); |
|
277 } |
|
278 |
|
279 intmax_t ucx_dist_uint16(const void *i1, const void *i2, void *data) { |
|
280 uintmax_t a = *((const uint16_t*) i1); |
|
281 uintmax_t b = *((const uint16_t*) i2); |
|
282 return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); |
|
283 } |
|
284 |
|
285 intmax_t ucx_dist_uint32(const void *i1, const void *i2, void *data) { |
|
286 uintmax_t a = *((const uint32_t*) i1); |
|
287 uintmax_t b = *((const uint32_t*) i2); |
|
288 return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); |
|
289 } |
|
290 |
|
291 intmax_t ucx_dist_uint64(const void *i1, const void *i2, void *data) { |
|
292 uintmax_t a = *((const uint64_t*) i1); |
|
293 uintmax_t b = *((const uint64_t*) i2); |
|
294 return a > b ? (intmax_t)(a - b) : -(intmax_t)(b - a); |
|
295 } |
|
296 |
|
297 int ucx_cmp_float(const void *f1, const void *f2, void *epsilon) { |
|
298 float a = *((const float*) f1); |
|
299 float b = *((const float*) f2); |
111 float e = !epsilon ? 1e-6f : *((float*)epsilon); |
300 float e = !epsilon ? 1e-6f : *((float*)epsilon); |
112 if (fabsf(a - b) < e) { |
301 if (fabsf(a - b) < e) { |
113 return 0; |
302 return 0; |
114 } else { |
303 } else { |
115 return a < b ? -1 : 1; |
304 return a < b ? -1 : 1; |
116 } |
305 } |
117 } |
306 } |
118 |
307 |
119 int ucx_doublecmp(void *d1, void *d2, void *epsilon) { |
308 int ucx_cmp_double(const void *d1, const void *d2, void *epsilon) { |
120 double a = *((float*) d1); |
309 double a = *((const double*) d1); |
121 double b = *((float*) d2); |
310 double b = *((const double*) d2); |
122 double e = !epsilon ? 1e-14 : *((double*)epsilon); |
311 double e = !epsilon ? 1e-14 : *((double*)epsilon); |
123 if (fabs(a - b) < e) { |
312 if (fabs(a - b) < e) { |
124 return 0; |
313 return 0; |
125 } else { |
314 } else { |
126 return a < b ? -1 : 1; |
315 return a < b ? -1 : 1; |
127 } |
316 } |
128 } |
317 } |
129 |
318 |
130 int ucx_ptrcmp(void *ptr1, void *ptr2, void *data) { |
319 int ucx_cmp_ptr(const void *ptr1, const void *ptr2, void *data) { |
131 intptr_t p1 = (intptr_t) ptr1; |
320 const intptr_t p1 = (const intptr_t) ptr1; |
132 intptr_t p2 = (intptr_t) ptr2; |
321 const intptr_t p2 = (const intptr_t) ptr2; |
133 if (p1 == p2) { |
322 if (p1 == p2) { |
134 return 0; |
323 return 0; |
135 } else { |
324 } else { |
136 return p1 < p2 ? -1 : 1; |
325 return p1 < p2 ? -1 : 1; |
137 } |
326 } |
138 } |
327 } |
139 |
328 |
140 int ucx_memcmp(void *ptr1, void *ptr2, void *n) { |
329 int ucx_cmp_mem(const void *ptr1, const void *ptr2, void *n) { |
141 return memcmp(ptr1, ptr2, *((size_t*)n)); |
330 return memcmp(ptr1, ptr2, *((size_t*)n)); |
142 } |
331 } |
143 |
332 |
144 /* PRINTF FUNCTIONS */ |
333 /* PRINTF FUNCTIONS */ |
145 |
334 |