Derive-C
Loading...
Searching...
No Matches
ord.h File Reference
#include <stdbool.h>
#include <derive-c/core/namespace.h>
#include <derive-c/core/std/reflect.h>

Go to the source code of this file.

Macros

#define DC_TRAIT_ORDABLE(SELF)
#define DC_TRAIT_ORDABLE_INVARIANTS(SELF, a, b, c)
#define _DC_DERIVE_ORD_MEMBER_GT(MEMBER_TYPE, MEMBER_NAME)
#define _DC_DERIVE_ORD_MEMBER_LT(MEMBER_TYPE, MEMBER_NAME)
#define DC_DERIVE_ORD(TYPE)
#define _DC_DERIVE_STD_ORD(TYPE, ...)

Macro Definition Documentation

◆ _DC_DERIVE_ORD_MEMBER_GT

#define _DC_DERIVE_ORD_MEMBER_GT ( MEMBER_TYPE,
MEMBER_NAME )
Value:
|| NS(MEMBER_TYPE, gt)(&self_1->MEMBER_NAME, &self_2->MEMBER_NAME)
#define NS(pre, post)
Definition namespace.h:14

Definition at line 21 of file ord.h.

21#define _DC_DERIVE_ORD_MEMBER_GT(MEMBER_TYPE, MEMBER_NAME) \
22 || NS(MEMBER_TYPE, gt)(&self_1->MEMBER_NAME, &self_2->MEMBER_NAME)

◆ _DC_DERIVE_ORD_MEMBER_LT

#define _DC_DERIVE_ORD_MEMBER_LT ( MEMBER_TYPE,
MEMBER_NAME )
Value:
|| NS(MEMBER_TYPE, lt)(&self_1->MEMBER_NAME, &self_2->MEMBER_NAME)

Definition at line 23 of file ord.h.

23#define _DC_DERIVE_ORD_MEMBER_LT(MEMBER_TYPE, MEMBER_NAME) \
24 || NS(MEMBER_TYPE, lt)(&self_1->MEMBER_NAME, &self_2->MEMBER_NAME)

◆ _DC_DERIVE_STD_ORD

#define _DC_DERIVE_STD_ORD ( TYPE,
... )
Value:
DC_PUBLIC static bool NS(TYPE, gt)(TYPE const* self_1, TYPE const* self_2) { \
return *self_1 > *self_2; \
} \
DC_PUBLIC static bool NS(TYPE, lt)(TYPE const* self_1, TYPE const* self_2) { \
return *self_1 < *self_2; \
}
#define DC_PUBLIC
Definition namespace.h:25

Definition at line 34 of file ord.h.

34#define _DC_DERIVE_STD_ORD(TYPE, ...) \
35 DC_PUBLIC static bool NS(TYPE, gt)(TYPE const* self_1, TYPE const* self_2) { \
36 return *self_1 > *self_2; \
37 } \
38 DC_PUBLIC static bool NS(TYPE, lt)(TYPE const* self_1, TYPE const* self_2) { \
39 return *self_1 < *self_2; \
40 }

◆ DC_DERIVE_ORD

#define DC_DERIVE_ORD ( TYPE)
Value:
DC_PUBLIC static bool NS(TYPE, gt)(TYPE const* self_1, TYPE const* self_2) { \
return false NS(TYPE, REFLECT)(_DC_DERIVE_ORD_MEMBER_GT); \
} \
DC_PUBLIC static bool NS(TYPE, lt)(TYPE const* self_1, TYPE const* self_2) { \
return false NS(TYPE, REFLECT)(_DC_DERIVE_ORD_MEMBER_LT); \
}
#define _DC_DERIVE_ORD_MEMBER_LT(MEMBER_TYPE, MEMBER_NAME)
Definition ord.h:23
#define _DC_DERIVE_ORD_MEMBER_GT(MEMBER_TYPE, MEMBER_NAME)
Definition ord.h:21

Definition at line 26 of file ord.h.

26#define DC_DERIVE_ORD(TYPE) \
27 DC_PUBLIC static bool NS(TYPE, gt)(TYPE const* self_1, TYPE const* self_2) { \
28 return false NS(TYPE, REFLECT)(_DC_DERIVE_ORD_MEMBER_GT); \
29 } \
30 DC_PUBLIC static bool NS(TYPE, lt)(TYPE const* self_1, TYPE const* self_2) { \
31 return false NS(TYPE, REFLECT)(_DC_DERIVE_ORD_MEMBER_LT); \
32 }

◆ DC_TRAIT_ORDABLE

#define DC_TRAIT_ORDABLE ( SELF)
Value:
DC_REQUIRE_METHOD(bool, SELF, lt, (SELF const*, SELF const*)); \
DC_REQUIRE_METHOD(bool, SELF, gt, (SELF const*, SELF const*))
#define SELF
Definition def.h:52
#define DC_REQUIRE_METHOD(ret, obj, name, args)
Definition require.h:18

Definition at line 8 of file ord.h.

8#define DC_TRAIT_ORDABLE(SELF) \
9 DC_REQUIRE_METHOD(bool, SELF, lt, (SELF const*, SELF const*)); \
10 DC_REQUIRE_METHOD(bool, SELF, gt, (SELF const*, SELF const*))

◆ DC_TRAIT_ORDABLE_INVARIANTS

#define DC_TRAIT_ORDABLE_INVARIANTS ( SELF,
a,
b,
c )
Value:
DC_ASSUME(DC_WHEN(NS(SELF, lt)(&a, &b) && NS(SELF, lt)(&b, &c), NS(SELF, lt)(&a, &c))); \
DC_ASSUME(DC_WHEN(NS(SELF, gt)(&a, &b) && NS(SELF, gt)(&b, &c), NS(SELF, gt)(&a, &c))); \
DC_ASSUME(DC_WHEN(NS(SELF, lt)(&a, &b), NS(SELF, gt)(&b, &a))); \
DC_ASSUME(DC_WHEN(NS(SELF, gt)(&a, &b), NS(SELF, lt)(&b, &a))); \
DC_ASSUME(!NS(SELF, lt)(&a, &a)); \
DC_ASSUME(!NS(SELF, gt)(&a, &a))
#define DC_TRAIT_ORDABLE(SELF)
Definition ord.h:8
#define DC_WHEN(cond, expr)
Definition panic.h:52

Definition at line 12 of file ord.h.

12#define DC_TRAIT_ORDABLE_INVARIANTS(SELF, a, b, c) \
13 DC_TRAIT_ORDABLE(SELF); \
14 DC_ASSUME(DC_WHEN(NS(SELF, lt)(&a, &b) && NS(SELF, lt)(&b, &c), NS(SELF, lt)(&a, &c))); \
15 DC_ASSUME(DC_WHEN(NS(SELF, gt)(&a, &b) && NS(SELF, gt)(&b, &c), NS(SELF, gt)(&a, &c))); \
16 DC_ASSUME(DC_WHEN(NS(SELF, lt)(&a, &b), NS(SELF, gt)(&b, &a))); \
17 DC_ASSUME(DC_WHEN(NS(SELF, gt)(&a, &b), NS(SELF, lt)(&b, &a))); \
18 DC_ASSUME(!NS(SELF, lt)(&a, &a)); \
19 DC_ASSUME(!NS(SELF, gt)(&a, &a))