ucx/utils.c

Wed, 27 Feb 2013 11:48:29 +0100

author
Mike Becker <universe@uap-core.de>
date
Wed, 27 Feb 2013 11:48:29 +0100
changeset 94
57ea041df22f
parent 92
ucx/comparator.c@7625a8efcc97
child 103
08018864fb91
permissions
-rw-r--r--

renamed comparator to utils module and added copy functions

universe@94 1 #include "utils.h"
universe@92 2 #include "math.h"
universe@89 3
universe@94 4 /* COPY FUCNTIONS */
universe@94 5 void* ucx_strcpy(void* s, void* data) {
universe@94 6 char *str = (char*) s;
universe@94 7 size_t n = 1+strlen(str);
universe@94 8 char *cpy = (char*) malloc(n);
universe@94 9 memcpy(cpy, str, n);
universe@94 10 return cpy;
universe@94 11 }
universe@94 12
universe@94 13 void* ucx_memcpy(void* m, void* n) {
universe@94 14 size_t k = *((size_t*)n);
universe@94 15 void *cpy = malloc(k);
universe@94 16 memcpy(cpy, m, k);
universe@94 17 return cpy;
universe@94 18 }
universe@94 19
universe@94 20 /* COMPARE FUNCTION */
universe@94 21
universe@89 22 int ucx_strcmp(void *s1, void *s2, void *data) {
universe@89 23 return strcmp((char*)s1, (char*)s2);
universe@89 24 }
universe@89 25
universe@89 26 int ucx_strncmp(void *s1, void *s2, void *n) {
universe@89 27 return strncmp((char*)s1, (char*)s2, *((size_t*) n));
universe@89 28 }
universe@89 29
universe@89 30 int ucx_intcmp(void *i1, void *i2, void *data) {
universe@89 31 int a = *((int*) i1);
universe@89 32 int b = *((int*) i2);
universe@89 33 if (a == b) {
universe@89 34 return 0;
universe@89 35 } else {
universe@89 36 return a < b ? -1 : 1;
universe@89 37 }
universe@89 38 }
universe@89 39
universe@92 40 int ucx_floatcmp(void *f1, void *f2, void *epsilon) {
universe@92 41 float a = *((float*) f1);
universe@92 42 float b = *((float*) f2);
universe@92 43 float e = !epsilon ? 1e-6f : *((float*)epsilon);
universe@92 44 if (fabsf(a - b) < e) {
universe@92 45 return 0;
universe@92 46 } else {
universe@92 47 return a < b ? -1 : 1;
universe@92 48 }
universe@92 49 }
universe@92 50
universe@92 51 int ucx_doublecmp(void *d1, void *d2, void *epsilon) {
universe@92 52 double a = *((float*) d1);
universe@92 53 double b = *((float*) d2);
universe@92 54 double e = !epsilon ? 1e-14 : *((double*)epsilon);
universe@92 55 if (fabs(a - b) < e) {
universe@92 56 return 0;
universe@92 57 } else {
universe@92 58 return a < b ? -1 : 1;
universe@92 59 }
universe@92 60 }
universe@92 61
universe@89 62 int ucx_ptrcmp(void *ptr1, void *ptr2, void *data) {
universe@89 63 if (ptr1 == ptr2) {
universe@89 64 return 0;
universe@89 65 } else {
universe@89 66 return ptr1 < ptr2 ? -1 : 1;
universe@89 67 }
universe@89 68 }
universe@91 69
universe@91 70 int ucx_memcmp(void *ptr1, void *ptr2, void *n) {
universe@91 71 return memcmp(ptr1, ptr2, *((size_t*)n));
universe@91 72 }

mercurial