src/compare.c

Wed, 16 Nov 2022 22:27:46 +0100

author
Mike Becker <universe@uap-core.de>
date
Wed, 16 Nov 2022 22:27:46 +0100
changeset 610
de5d3ee6435f
parent 601
95ba6014041b
child 631
406376e64fd8
permissions
-rw-r--r--

#219 array list: implement add and at

Add uses the low level cx_array_copy function which is
now also implemented, but not tested by individual unit
tests.

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

mercurial