ucx/comparator.c

Wed, 27 Feb 2013 10:57:40 +0100

author
Mike Becker <universe@uap-core.de>
date
Wed, 27 Feb 2013 10:57:40 +0100
changeset 92
7625a8efcc97
parent 91
91595a45fad6
permissions
-rw-r--r--

added floating point comparators

universe@89 1 #include "comparator.h"
universe@92 2 #include "math.h"
universe@89 3
universe@89 4 int ucx_strcmp(void *s1, void *s2, void *data) {
universe@89 5 return strcmp((char*)s1, (char*)s2);
universe@89 6 }
universe@89 7
universe@89 8 int ucx_strncmp(void *s1, void *s2, void *n) {
universe@89 9 return strncmp((char*)s1, (char*)s2, *((size_t*) n));
universe@89 10 }
universe@89 11
universe@89 12 int ucx_intcmp(void *i1, void *i2, void *data) {
universe@89 13 int a = *((int*) i1);
universe@89 14 int b = *((int*) i2);
universe@89 15 if (a == b) {
universe@89 16 return 0;
universe@89 17 } else {
universe@89 18 return a < b ? -1 : 1;
universe@89 19 }
universe@89 20 }
universe@89 21
universe@92 22 int ucx_floatcmp(void *f1, void *f2, void *epsilon) {
universe@92 23 float a = *((float*) f1);
universe@92 24 float b = *((float*) f2);
universe@92 25 float e = !epsilon ? 1e-6f : *((float*)epsilon);
universe@92 26 if (fabsf(a - b) < e) {
universe@92 27 return 0;
universe@92 28 } else {
universe@92 29 return a < b ? -1 : 1;
universe@92 30 }
universe@92 31 }
universe@92 32
universe@92 33 int ucx_doublecmp(void *d1, void *d2, void *epsilon) {
universe@92 34 double a = *((float*) d1);
universe@92 35 double b = *((float*) d2);
universe@92 36 double e = !epsilon ? 1e-14 : *((double*)epsilon);
universe@92 37 if (fabs(a - b) < e) {
universe@92 38 return 0;
universe@92 39 } else {
universe@92 40 return a < b ? -1 : 1;
universe@92 41 }
universe@92 42 }
universe@92 43
universe@89 44 int ucx_ptrcmp(void *ptr1, void *ptr2, void *data) {
universe@89 45 if (ptr1 == ptr2) {
universe@89 46 return 0;
universe@89 47 } else {
universe@89 48 return ptr1 < ptr2 ? -1 : 1;
universe@89 49 }
universe@89 50 }
universe@91 51
universe@91 52 int ucx_memcmp(void *ptr1, void *ptr2, void *n) {
universe@91 53 return memcmp(ptr1, ptr2, *((size_t*)n));
universe@91 54 }

mercurial