15 #ifndef LAZULI_COMMON_H 16 #define LAZULI_COMMON_H 25 #define _EXTERN_C_DECL_BEGIN extern "C" { 30 #define _EXTERN_C_DECL_END } 37 #define _EXTERN_C_DECL_BEGIN 42 #define _EXTERN_C_DECL_END 51 #define UNUSED(X) ((void)(X)) 63 #define STATIC_ASSERT(C, M) extern char _static_assertion_##M[(C) ? 1 : -1] 68 #define NULL ((void *)0) 87 #define true ((bool)1) 92 #define false ((bool)0) 116 #define ALLOW_ARITHM(X) ((uint8_t *)(X)) 125 uint8_t_MUST_be_1_byte_long_to_allow_arithmetic_on_void_pointers);
134 #define STATIC_CHECK_TYPE(V, T) UNUSED(1 ? (T*)0 : &(V)) 143 #define SET_BITS(V, T, X) \ 145 STATIC_CHECK_TYPE(V, T); \ 156 #define CLEAR_BITS(V, T, X) \ 158 STATIC_CHECK_TYPE(V, T); \ 174 #define POSITION(X) (1U << (X)) 183 #define INDIRECT_T(X, T) ((volatile T *)(X)) 191 #define INDIRECT(X) INDIRECT_T(X, uint8_t) 199 #define DIRECT_T(X, T) (*INDIRECT_T(X, T)) 206 #define DIRECT(X) DIRECT_T(X, uint8_t) 213 #define LO8(X) ((uint8_t)(X)) 220 #define HI8(X) LO8((X) >> 8U) 228 #define MIN(A, B) (((A) < (B)) ? (A) : (B)) 236 #define MAX(A, B) (((A) < (B)) ? (B) : (A)) 243 #define ABS(A) (((A) < 0) ? (-(A)) : (A)) 251 #define OFFSET_OF(M, T) \ 252 ((size_t)(&(((T*)0)->M))) 263 #define CONTAINER_OF(P, M, T) \ 264 ((T*) ((uint8_t*) (1 ? (P) : &(((T*)0)->M)) - OFFSET_OF(M, T))) 271 #define NAME_OF(X) #X 278 #define ELEMENTS_COUNT(X) ((size_t)(sizeof(X) / sizeof((X)[0]))) 285 #define DEPENDENCY_ON_MODULE(X) \ 286 STATIC_ASSERT(LZ_CONFIG_MODULE_ ## X ## _USED, Module_ ## X ## _must_be_used) #define STATIC_ASSERT(C, M)
Perform an assertion at compile time.
unsigned int uint16_t
Represents a unsigned integer type with width of exactly 16 bits.
int ptrdiff_t
Represents the difference between two pointers.
uint8_t bool
Boolean type.
unsigned char uint8_t
Represents a unsigned integer type with width of exactly 8 bits.
uint16_t size_t
Represents the size of an object.
uint8_t u_read_write_atomic_t
Represents an unsigned integer that can be read and written atomically.