Zycore
1.5.1.0
Toggle main menu visibility
Loading...
Searching...
No Matches
Comparison.h
Go to the documentation of this file.
1
/***************************************************************************************************
2
3
Zyan Core Library (Zycore-C)
4
5
Original Author : Florian Bernd
6
7
* Permission is hereby granted, free of charge, to any person obtaining a copy
8
* of this software and associated documentation files (the "Software"), to deal
9
* in the Software without restriction, including without limitation the rights
10
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
* copies of the Software, and to permit persons to whom the Software is
12
* furnished to do so, subject to the following conditions:
13
*
14
* The above copyright notice and this permission notice shall be included in all
15
* copies or substantial portions of the Software.
16
*
17
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
* SOFTWARE.
24
25
***************************************************************************************************/
26
31
32
#ifndef ZYCORE_COMPARISON_H
33
#define ZYCORE_COMPARISON_H
34
35
#include <
Zycore/Defines.h
>
36
#include <
Zycore/Types.h
>
37
38
#ifdef __cplusplus
39
extern
"C"
{
40
#endif
41
42
/* ============================================================================================== */
43
/* Enums and types */
44
/* ============================================================================================== */
45
55
typedef
ZyanBool
(*
ZyanEqualityComparison
)(
const
void
* left,
const
void
* right);
56
68
typedef
ZyanI32 (*
ZyanComparison
)(
const
void
* left,
const
void
* right);
69
70
/* ============================================================================================== */
71
/* Macros */
72
/* ============================================================================================== */
73
74
/* ---------------------------------------------------------------------------------------------- */
75
/* Equality comparison functions */
76
/* ---------------------------------------------------------------------------------------------- */
77
84
#define ZYAN_DECLARE_EQUALITY_COMPARISON(name, type) \
85
ZyanBool name(const type* left, const type* right) \
86
{ \
87
ZYAN_ASSERT(left); \
88
ZYAN_ASSERT(right); \
89
\
90
return (*left == *right) ? ZYAN_TRUE : ZYAN_FALSE; \
91
}
92
101
#define ZYAN_DECLARE_EQUALITY_COMPARISON_FOR_FIELD(name, type, field_name) \
102
ZyanBool name(const type* left, const type* right) \
103
{ \
104
ZYAN_ASSERT(left); \
105
ZYAN_ASSERT(right); \
106
\
107
return (left->field_name == right->field_name) ? ZYAN_TRUE : ZYAN_FALSE; \
108
}
109
110
/* ---------------------------------------------------------------------------------------------- */
111
/* Comparison functions */
112
/* ---------------------------------------------------------------------------------------------- */
113
120
#define ZYAN_DECLARE_COMPARISON(name, type) \
121
ZyanI32 name(const type* left, const type* right) \
122
{ \
123
ZYAN_ASSERT(left); \
124
ZYAN_ASSERT(right); \
125
\
126
if (*left < *right) \
127
{ \
128
return -1; \
129
} \
130
if (*left > *right) \
131
{ \
132
return 1; \
133
} \
134
return 0; \
135
}
136
145
#define ZYAN_DECLARE_COMPARISON_FOR_FIELD(name, type, field_name) \
146
ZyanI32 name(const type* left, const type* right) \
147
{ \
148
ZYAN_ASSERT(left); \
149
ZYAN_ASSERT(right); \
150
\
151
if (left->field_name < right->field_name) \
152
{ \
153
return -1; \
154
} \
155
if (left->field_name > right->field_name) \
156
{ \
157
return 1; \
158
} \
159
return 0; \
160
}
161
162
/* ---------------------------------------------------------------------------------------------- */
163
164
/* ============================================================================================== */
165
/* Exported functions */
166
/* ============================================================================================== */
167
168
/* ---------------------------------------------------------------------------------------------- */
169
/* Default equality comparison functions */
170
/* ---------------------------------------------------------------------------------------------- */
171
181
ZYAN_INLINE
ZYAN_DECLARE_EQUALITY_COMPARISON
(ZyanEqualsPointer,
void
*
const
)
182
183
192
ZYAN_INLINE
ZYAN_DECLARE_EQUALITY_COMPARISON
(ZyanEqualsBool,
ZyanBool
)
193
194
203
ZYAN_INLINE
ZYAN_DECLARE_EQUALITY_COMPARISON
(ZyanEqualsNumeric8, ZyanU8)
204
214
ZYAN_INLINE
ZYAN_DECLARE_EQUALITY_COMPARISON
(ZyanEqualsNumeric16, ZyanU16)
215
225
ZYAN_INLINE
ZYAN_DECLARE_EQUALITY_COMPARISON
(ZyanEqualsNumeric32, ZyanU32)
226
236
ZYAN_INLINE
ZYAN_DECLARE_EQUALITY_COMPARISON
(ZyanEqualsNumeric64, ZyanU64)
237
238
/* ---------------------------------------------------------------------------------------------- */
239
/* Default comparison functions */
240
/* ---------------------------------------------------------------------------------------------- */
241
251
ZYAN_INLINE
ZYAN_DECLARE_COMPARISON
(ZyanComparePointer,
void
* const)
252
262
ZYAN_INLINE
ZYAN_DECLARE_COMPARISON
(ZyanCompareBool,
ZyanBool
)
263
273
ZYAN_INLINE
ZYAN_DECLARE_COMPARISON
(ZyanCompareNumeric8, ZyanU8)
274
284
ZYAN_INLINE
ZYAN_DECLARE_COMPARISON
(ZyanCompareNumeric16, ZyanU16)
285
295
ZYAN_INLINE
ZYAN_DECLARE_COMPARISON
(ZyanCompareNumeric32, ZyanU32)
296
306
ZYAN_INLINE
ZYAN_DECLARE_COMPARISON
(ZyanCompareNumeric64, ZyanU64)
307
308
/* ---------------------------------------------------------------------------------------------- */
309
310
/* ============================================================================================== */
311
312
#ifdef __cplusplus
313
}
314
#endif
315
316
#endif
/* ZYCORE_COMPARISON_H */
ZyanComparison
ZyanI32(* ZyanComparison)(const void *left, const void *right)
Definition
Comparison.h:68
ZYAN_DECLARE_COMPARISON
#define ZYAN_DECLARE_COMPARISON(name, type)
Definition
Comparison.h:120
ZyanEqualityComparison
ZyanBool(* ZyanEqualityComparison)(const void *left, const void *right)
Definition
Comparison.h:55
ZYAN_DECLARE_EQUALITY_COMPARISON
#define ZYAN_DECLARE_EQUALITY_COMPARISON(name, type)
Definition
Comparison.h:84
Defines.h
Types.h
ZyanBool
ZyanU8 ZyanBool
Definition
Types.h:296
include
Zycore
Comparison.h
Generated by
1.17.0