src/compare.c

Sat, 05 Nov 2022 17:50:04 +0100

author
Mike Becker <universe@uap-core.de>
date
Sat, 05 Nov 2022 17:50:04 +0100
changeset 601
95ba6014041b
child 631
406376e64fd8
permissions
-rw-r--r--

add compare functions

universe@601 1 /*
universe@601 2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
universe@601 3 *
universe@601 4 * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved.
universe@601 5 *
universe@601 6 * Redistribution and use in source and binary forms, with or without
universe@601 7 * modification, are permitted provided that the following conditions are met:
universe@601 8 *
universe@601 9 * 1. Redistributions of source code must retain the above copyright
universe@601 10 * notice, this list of conditions and the following disclaimer.
universe@601 11 *
universe@601 12 * 2. Redistributions in binary form must reproduce the above copyright
universe@601 13 * notice, this list of conditions and the following disclaimer in the
universe@601 14 * documentation and/or other materials provided with the distribution.
universe@601 15 *
universe@601 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
universe@601 17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
universe@601 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
universe@601 19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
universe@601 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
universe@601 21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
universe@601 22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
universe@601 23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
universe@601 24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
universe@601 25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
universe@601 26 * POSSIBILITY OF SUCH DAMAGE.
universe@601 27 */
universe@601 28
universe@601 29 #include "cx/compare.h"
universe@601 30
universe@601 31 #include <stdint.h>
universe@601 32 #include <math.h>
universe@601 33
universe@601 34 int cx_cmp_int(void const *i1, void const *i2) {
universe@601 35 int a = *((const int*) i1);
universe@601 36 int b = *((const int*) i2);
universe@601 37 if (a == b) {
universe@601 38 return 0;
universe@601 39 } else {
universe@601 40 return a < b ? -1 : 1;
universe@601 41 }
universe@601 42 }
universe@601 43
universe@601 44 int cx_cmp_longint(void const *i1, void const *i2) {
universe@601 45 long int a = *((const long int*) i1);
universe@601 46 long int b = *((const long int*) i2);
universe@601 47 if (a == b) {
universe@601 48 return 0;
universe@601 49 } else {
universe@601 50 return a < b ? -1 : 1;
universe@601 51 }
universe@601 52 }
universe@601 53
universe@601 54 int cx_cmp_longlong(void const *i1, void const *i2) {
universe@601 55 long long a = *((const long long*) i1);
universe@601 56 long long b = *((const long long*) i2);
universe@601 57 if (a == b) {
universe@601 58 return 0;
universe@601 59 } else {
universe@601 60 return a < b ? -1 : 1;
universe@601 61 }
universe@601 62 }
universe@601 63
universe@601 64 int cx_cmp_int16(void const *i1, void const *i2) {
universe@601 65 int16_t a = *((const int16_t*) i1);
universe@601 66 int16_t b = *((const int16_t*) i2);
universe@601 67 if (a == b) {
universe@601 68 return 0;
universe@601 69 } else {
universe@601 70 return a < b ? -1 : 1;
universe@601 71 }
universe@601 72 }
universe@601 73
universe@601 74 int cx_cmp_int32(void const *i1, void const *i2) {
universe@601 75 int32_t a = *((const int32_t*) i1);
universe@601 76 int32_t b = *((const int32_t*) i2);
universe@601 77 if (a == b) {
universe@601 78 return 0;
universe@601 79 } else {
universe@601 80 return a < b ? -1 : 1;
universe@601 81 }
universe@601 82 }
universe@601 83
universe@601 84 int cx_cmp_int64(void const *i1, void const *i2) {
universe@601 85 int64_t a = *((const int64_t*) i1);
universe@601 86 int64_t b = *((const int64_t*) i2);
universe@601 87 if (a == b) {
universe@601 88 return 0;
universe@601 89 } else {
universe@601 90 return a < b ? -1 : 1;
universe@601 91 }
universe@601 92 }
universe@601 93
universe@601 94 int cx_cmp_uint(void const *i1, void const *i2) {
universe@601 95 unsigned int a = *((const unsigned int*) i1);
universe@601 96 unsigned int b = *((const unsigned int*) i2);
universe@601 97 if (a == b) {
universe@601 98 return 0;
universe@601 99 } else {
universe@601 100 return a < b ? -1 : 1;
universe@601 101 }
universe@601 102 }
universe@601 103
universe@601 104 int cx_cmp_ulongint(void const *i1, void const *i2) {
universe@601 105 unsigned long int a = *((const unsigned long int*) i1);
universe@601 106 unsigned long int b = *((const unsigned long int*) i2);
universe@601 107 if (a == b) {
universe@601 108 return 0;
universe@601 109 } else {
universe@601 110 return a < b ? -1 : 1;
universe@601 111 }
universe@601 112 }
universe@601 113
universe@601 114 int cx_cmp_ulonglong(void const *i1, void const *i2) {
universe@601 115 unsigned long long a = *((const unsigned long long*) i1);
universe@601 116 unsigned long long b = *((const unsigned long long*) i2);
universe@601 117 if (a == b) {
universe@601 118 return 0;
universe@601 119 } else {
universe@601 120 return a < b ? -1 : 1;
universe@601 121 }
universe@601 122 }
universe@601 123
universe@601 124 int cx_cmp_uint16(void const *i1, void const *i2) {
universe@601 125 uint16_t a = *((const uint16_t*) i1);
universe@601 126 uint16_t b = *((const uint16_t*) i2);
universe@601 127 if (a == b) {
universe@601 128 return 0;
universe@601 129 } else {
universe@601 130 return a < b ? -1 : 1;
universe@601 131 }
universe@601 132 }
universe@601 133
universe@601 134 int cx_cmp_uint32(void const *i1, void const *i2) {
universe@601 135 uint32_t a = *((const uint32_t*) i1);
universe@601 136 uint32_t b = *((const uint32_t*) i2);
universe@601 137 if (a == b) {
universe@601 138 return 0;
universe@601 139 } else {
universe@601 140 return a < b ? -1 : 1;
universe@601 141 }
universe@601 142 }
universe@601 143
universe@601 144 int cx_cmp_uint64(void const *i1, void const *i2) {
universe@601 145 uint64_t a = *((const uint64_t*) i1);
universe@601 146 uint64_t b = *((const uint64_t*) i2);
universe@601 147 if (a == b) {
universe@601 148 return 0;
universe@601 149 } else {
universe@601 150 return a < b ? -1 : 1;
universe@601 151 }
universe@601 152 }
universe@601 153
universe@601 154 int cx_cmp_float(void const *f1, void const *f2) {
universe@601 155 float a = *((const float*) f1);
universe@601 156 float b = *((const float*) f2);
universe@601 157 if (fabsf(a - b) < 1e-6f) {
universe@601 158 return 0;
universe@601 159 } else {
universe@601 160 return a < b ? -1 : 1;
universe@601 161 }
universe@601 162 }
universe@601 163
universe@601 164 int cx_cmp_double(void const *d1, void const *d2) {
universe@601 165 double a = *((const double*) d1);
universe@601 166 double b = *((const double*) d2);
universe@601 167 if (fabs(a - b) < 1e-14) {
universe@601 168 return 0;
universe@601 169 } else {
universe@601 170 return a < b ? -1 : 1;
universe@601 171 }
universe@601 172 }
universe@601 173
universe@601 174 int cx_cmp_ptr(void const *ptr1, void const *ptr2) {
universe@601 175 const intptr_t p1 = (const intptr_t) ptr1;
universe@601 176 const intptr_t p2 = (const intptr_t) ptr2;
universe@601 177 if (p1 == p2) {
universe@601 178 return 0;
universe@601 179 } else {
universe@601 180 return p1 < p2 ? -1 : 1;
universe@601 181 }
universe@601 182 }

mercurial