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

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

mercurial