universe@94: #include "utils.h" universe@92: #include "math.h" universe@89: universe@94: /* COPY FUCNTIONS */ universe@94: void* ucx_strcpy(void* s, void* data) { universe@94: char *str = (char*) s; universe@94: size_t n = 1+strlen(str); universe@94: char *cpy = (char*) malloc(n); universe@94: memcpy(cpy, str, n); universe@94: return cpy; universe@94: } universe@94: universe@94: void* ucx_memcpy(void* m, void* n) { universe@94: size_t k = *((size_t*)n); universe@94: void *cpy = malloc(k); universe@94: memcpy(cpy, m, k); universe@94: return cpy; universe@94: } universe@94: universe@94: /* COMPARE FUNCTION */ universe@94: universe@89: int ucx_strcmp(void *s1, void *s2, void *data) { universe@89: return strcmp((char*)s1, (char*)s2); universe@89: } universe@89: universe@89: int ucx_strncmp(void *s1, void *s2, void *n) { universe@89: return strncmp((char*)s1, (char*)s2, *((size_t*) n)); universe@89: } universe@89: universe@89: int ucx_intcmp(void *i1, void *i2, void *data) { universe@89: int a = *((int*) i1); universe@89: int b = *((int*) i2); universe@89: if (a == b) { universe@89: return 0; universe@89: } else { universe@89: return a < b ? -1 : 1; universe@89: } universe@89: } universe@89: universe@92: int ucx_floatcmp(void *f1, void *f2, void *epsilon) { universe@92: float a = *((float*) f1); universe@92: float b = *((float*) f2); universe@92: float e = !epsilon ? 1e-6f : *((float*)epsilon); universe@92: if (fabsf(a - b) < e) { universe@92: return 0; universe@92: } else { universe@92: return a < b ? -1 : 1; universe@92: } universe@92: } universe@92: universe@92: int ucx_doublecmp(void *d1, void *d2, void *epsilon) { universe@92: double a = *((float*) d1); universe@92: double b = *((float*) d2); universe@92: double e = !epsilon ? 1e-14 : *((double*)epsilon); universe@92: if (fabs(a - b) < e) { universe@92: return 0; universe@92: } else { universe@92: return a < b ? -1 : 1; universe@92: } universe@92: } universe@92: universe@89: int ucx_ptrcmp(void *ptr1, void *ptr2, void *data) { universe@89: if (ptr1 == ptr2) { universe@89: return 0; universe@89: } else { universe@89: return ptr1 < ptr2 ? -1 : 1; universe@89: } universe@89: } universe@91: universe@91: int ucx_memcmp(void *ptr1, void *ptr2, void *n) { universe@91: return memcmp(ptr1, ptr2, *((size_t*)n)); universe@91: }