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

Go to the source code of this file.

Macros

#define DC_TRAIT_EQABLE(SELF)
 The equality trait For semantic equality on objects.
#define DC_TRAIT_EQABLE_INVARIANTS(SELF, a, b)
#define DC_MEM_EQ(SELF_1, SELF_2)
#define _DC_DERIVE_EQ_MEMBER(MEMBER_TYPE, MEMBER_NAME)
#define DC_DERIVE_EQ(TYPE)
#define _DC_DERIVE_STD_EQ(TYPE, ...)

Functions

static DC_PUBLIC bool dc_str_eq (char *const *self_1, char *const *self_2)
static DC_PUBLIC bool dc_str_const_eq (const char *const *self_1, const char *const *self_2)

Macro Definition Documentation

◆ _DC_DERIVE_EQ_MEMBER

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

Definition at line 23 of file eq.h.

23#define _DC_DERIVE_EQ_MEMBER(MEMBER_TYPE, MEMBER_NAME) \
24 &&NS(MEMBER_TYPE, eq)(&self_1->MEMBER_NAME, &self_2->MEMBER_NAME)

◆ _DC_DERIVE_STD_EQ

#define _DC_DERIVE_STD_EQ ( TYPE,
... )
Value:
DC_PUBLIC static DC_UNUSED bool NS(TYPE, eq)(TYPE const* self_1, TYPE const* self_2) { \
return (*self_1 == *self_2); \
}
#define DC_UNUSED
Definition attributes.h:7
#define DC_PUBLIC
Definition namespace.h:25

Definition at line 31 of file eq.h.

31#define _DC_DERIVE_STD_EQ(TYPE, ...) \
32 DC_PUBLIC static DC_UNUSED bool NS(TYPE, eq)(TYPE const* self_1, TYPE const* self_2) { \
33 return (*self_1 == *self_2); \
34 }

◆ DC_DERIVE_EQ

#define DC_DERIVE_EQ ( TYPE)
Value:
DC_PUBLIC static bool NS(TYPE, eq)(TYPE const* self_1, TYPE const* self_2) { \
return true NS(TYPE, REFLECT)(_DC_DERIVE_EQ_MEMBER); \
}
#define _DC_DERIVE_EQ_MEMBER(MEMBER_TYPE, MEMBER_NAME)
Definition eq.h:23

Definition at line 26 of file eq.h.

26#define DC_DERIVE_EQ(TYPE) \
27 DC_PUBLIC static bool NS(TYPE, eq)(TYPE const* self_1, TYPE const* self_2) { \
28 return true NS(TYPE, REFLECT)(_DC_DERIVE_EQ_MEMBER); \
29 }

◆ DC_MEM_EQ

#define DC_MEM_EQ ( SELF_1,
SELF_2 )
Value:
(*(SELF_1) == *(SELF_2))

Definition at line 21 of file eq.h.

◆ DC_TRAIT_EQABLE

#define DC_TRAIT_EQABLE ( SELF)
Value:
DC_REQUIRE_METHOD(bool, SELF, eq, (SELF const*, SELF const*))
#define SELF
Definition def.h:52
#define DC_REQUIRE_METHOD(ret, obj, name, args)
Definition require.h:18

The equality trait For semantic equality on objects.

Definition at line 13 of file eq.h.

◆ DC_TRAIT_EQABLE_INVARIANTS

#define DC_TRAIT_EQABLE_INVARIANTS ( SELF,
a,
b )
Value:
DC_ASSUME(DC_WHEN(NS(SELF, eq)(&a, &b) && NS(SELF, eq)(&b, &c), NS(SELF, eq)(&a, &c))); \
DC_ASSUME(DC_WHEN(NS(SELF, eq)(&a, &b), NS(SELF, eq)(&b, &a))); \
DC_ASSUME(NS(SELF, eq)(&a, &a))
#define DC_TRAIT_EQABLE(SELF)
The equality trait For semantic equality on objects.
Definition eq.h:13
#define DC_WHEN(cond, expr)
Definition panic.h:52

Definition at line 15 of file eq.h.

15#define DC_TRAIT_EQABLE_INVARIANTS(SELF, a, b) \
16 DC_TRAIT_EQABLE(SELF); \
17 DC_ASSUME(DC_WHEN(NS(SELF, eq)(&a, &b) && NS(SELF, eq)(&b, &c), NS(SELF, eq)(&a, &c))); \
18 DC_ASSUME(DC_WHEN(NS(SELF, eq)(&a, &b), NS(SELF, eq)(&b, &a))); \
19 DC_ASSUME(NS(SELF, eq)(&a, &a))

Function Documentation

◆ dc_str_const_eq()

DC_PUBLIC bool dc_str_const_eq ( const char *const * self_1,
const char *const * self_2 )
static

Definition at line 42 of file eq.h.

42 {
43 return strcmp(*self_1, *self_2) == 0;
44}

◆ dc_str_eq()

DC_PUBLIC bool dc_str_eq ( char *const * self_1,
char *const * self_2 )
static

Definition at line 38 of file eq.h.

38 {
39 return strcmp(*self_1, *self_2) == 0;
40}