1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#ifndef KIT_ARRAY_REF_H
#define KIT_ARRAY_REF_H
#include "types.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef i8 (*kit_ar_compare_fn)(void *left, void *right);
i8 kit_ar_equal_bytes(i64 left_element_size, i64 left_size,
void *left_data, i64 right_element_size,
i64 right_size, void *right_data);
i8 kit_ar_compare(i64 left_element_size, i64 left_size,
void *left_data, i64 right_element_size,
i64 right_size, void *right_data,
kit_ar_compare_fn compare);
#define KIT_AR(type_) \
struct { \
i64 size; \
type_ *values; \
}
#define KIT_AR_WRAP(name_, element_type_, array_) \
struct { \
i64 size; \
element_type_ *values; \
} name_ = { .size = (sizeof(array_) / sizeof((array_)[0])), \
.values = (array_) }
#define KIT_AR_EQUAL(left_, right_) \
kit_ar_equal_bytes(sizeof((left_).values[0]), (left_).size, \
(left_).values, sizeof((right_).values[0]), \
(right_).size, (right_).values)
#define KIT_AR_COMPARE(left_, right_, compare_) \
kit_ar_compare(sizeof((left_).values[0]), (left_).size, \
(left_).values, sizeof((right_).values[0]), \
(right_).size, (right_).values, \
(kit_ar_compare_fn) (compare_))
#ifdef __cplusplus
}
#endif
#ifndef KIT_DISABLE_SHORT_NAMES
# define ar_compare_fn kit_ar_compare_fn
# define ar_equal_bytes kit_ar_equal_bytes
# define ar_compare kit_ar_compare
# define AR KIT_AR
# define AR_WRAP KIT_AR_WRAP
# define AR_EQUAL KIT_AR_EQUAL
# define AR_COMPARE KIT_AR_COMPARE
#endif
#endif
|