Appearance
file macro.h
Defines
Name | |
---|---|
c_container_of(ptr, type, member) | |
SECOND(a, b, ...) | |
IS_PROBE(...) | |
PROBE() | |
CAT(a, b) | |
NOT(x) | |
NOT | |
BOOL(x) | |
IF(condition) | |
_IF(condition) | |
_IF_NOT_EMPTY(...) | |
IF(...) | |
ASSERT(X) | |
Assert(X) | |
MIN(x, y) | |
MAX(x, y) | |
UNUSED(expr) | |
DLLCALL | |
DLLEXPORT | |
BYTE_FORMAT | |
BYTE_SEPARATOR | |
BYTES_2_FORMAT_SEPARATOR(SEPARATOR) | |
BYTES_4_FORMAT_SEPARATOR(SEPARATOR) | |
BYTES_8_FORMAT_SEPARATOR(SEPARATOR) | |
BYTES_16_FORMAT_SEPARATOR(SEPARATOR) | |
BYTES_32_FORMAT_SEPARATOR(SEPARATOR) | |
BYTES_2_FORMAT | |
BYTES_4_FORMAT | |
BYTES_8_FORMAT | |
BYTES_16_FORMAT | |
BYTES_32_FORMAT | |
BYTES_2(bytes) | |
BYTES_4(bytes) | |
BYTES_8(bytes) | |
BYTES_16(bytes) | |
BYTES_32(bytes) | |
IP32_TO_BYTES_FORMAT | |
BIT32_TO_BYTES(bits) | |
IP32_TO_BYTES(ip) | |
AES_BLOCK_TO_BYTES_FORMAT | |
AES_BLOCK_TO_BYTES(block) | |
DLLCALL | |
DLLEXPORT | |
UNUSED(expr) |
Macros Documentation
define c_container_of
cpp
#define c_container_of(
ptr,
type,
member
)
({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
define SECOND
cpp
#define SECOND(
a,
b,
...
)
b
define IS_PROBE
cpp
#define IS_PROBE(
...
)
SECOND(__VA_ARGS__, )
define PROBE
cpp
#define PROBE(
)
~, NOT_EMPTY
define CAT
cpp
#define CAT(
a,
b
)
a ## b
define NOT
cpp
#define NOT(
x
)
IS_PROBE(CAT(_NOT_, x))
define NOT
cpp
#define _NOT_ PROBE()
define BOOL
cpp
#define BOOL(
x
)
NOT(NOT(x))
define IF
cpp
#define IF(
condition
)
_IF(BOOL(condition))
define _IF
cpp
#define _IF(
condition
)
CAT(_IF_, condition)
define _IF_NOT_EMPTY
cpp
#define _IF_NOT_EMPTY(
...
)
define IF
cpp
#define _IF_(
...
)
__VA_ARGS__
define ASSERT
cpp
#define ASSERT(
X
)
define Assert
cpp
#define Assert(
X
)
define MIN
cpp
#define MIN(
x,
y
)
((x) < (y) ? (x) : (y))
define MAX
cpp
#define MAX(
x,
y
)
((x) > (y) ? (x) : (y))
define UNUSED
cpp
#define UNUSED(
expr
)
do { (void)(expr); } while (0)
define DLLCALL
cpp
#define DLLCALL
define DLLEXPORT
cpp
#define DLLEXPORT
define BYTE_FORMAT
cpp
#define BYTE_FORMAT "%.2hX"
define BYTE_SEPARATOR
cpp
#define BYTE_SEPARATOR " "
define BYTES_2_FORMAT_SEPARATOR
cpp
#define BYTES_2_FORMAT_SEPARATOR(
SEPARATOR
)
BYTE_FORMAT SEPARATOR BYTE_FORMAT
define BYTES_4_FORMAT_SEPARATOR
cpp
#define BYTES_4_FORMAT_SEPARATOR(
SEPARATOR
)
BYTES_2_FORMAT_SEPARATOR(SEPARATOR) SEPARATOR BYTES_2_FORMAT_SEPARATOR(SEPARATOR)
define BYTES_8_FORMAT_SEPARATOR
cpp
#define BYTES_8_FORMAT_SEPARATOR(
SEPARATOR
)
BYTES_4_FORMAT_SEPARATOR(SEPARATOR) SEPARATOR BYTES_4_FORMAT_SEPARATOR(SEPARATOR)
define BYTES_16_FORMAT_SEPARATOR
cpp
#define BYTES_16_FORMAT_SEPARATOR(
SEPARATOR
)
BYTES_8_FORMAT_SEPARATOR(SEPARATOR) SEPARATOR BYTES_8_FORMAT_SEPARATOR(SEPARATOR)
define BYTES_32_FORMAT_SEPARATOR
cpp
#define BYTES_32_FORMAT_SEPARATOR(
SEPARATOR
)
BYTES_16_FORMAT_SEPARATOR(SEPARATOR) SEPARATOR BYTES_16_FORMAT_SEPARATOR(SEPARATOR)
define BYTES_2_FORMAT
cpp
#define BYTES_2_FORMAT BYTES_2_FORMAT_SEPARATOR(BYTE_SEPARATOR)
define BYTES_4_FORMAT
cpp
#define BYTES_4_FORMAT BYTES_4_FORMAT_SEPARATOR(BYTE_SEPARATOR)
define BYTES_8_FORMAT
cpp
#define BYTES_8_FORMAT BYTES_8_FORMAT_SEPARATOR(BYTE_SEPARATOR)
define BYTES_16_FORMAT
cpp
#define BYTES_16_FORMAT BYTES_16_FORMAT_SEPARATOR(BYTE_SEPARATOR)
define BYTES_32_FORMAT
cpp
#define BYTES_32_FORMAT BYTES_32_FORMAT_SEPARATOR(BYTE_SEPARATOR)
define BYTES_2
cpp
#define BYTES_2(
bytes
)
(bytes)[0], (bytes)[1]
define BYTES_4
cpp
#define BYTES_4(
bytes
)
BYTES_2(bytes), BYTES_2(bytes + 2)
define BYTES_8
cpp
#define BYTES_8(
bytes
)
BYTES_4(bytes), BYTES_4(bytes + 4)
define BYTES_16
cpp
#define BYTES_16(
bytes
)
BYTES_8(bytes), BYTES_8(bytes + 8)
define BYTES_32
cpp
#define BYTES_32(
bytes
)
BYTES_16(bytes), BYTES_16(bytes + 16)
define IP32_TO_BYTES_FORMAT
cpp
#define IP32_TO_BYTES_FORMAT BYTES_4_FORMAT_SEPARATOR(".")
define BIT32_TO_BYTES
cpp
#define BIT32_TO_BYTES(
bits
)
BYTES_4((uint8_t*) &(bits))
define IP32_TO_BYTES
cpp
#define IP32_TO_BYTES(
ip
)
BIT32_TO_BYTES(ip)
define AES_BLOCK_TO_BYTES_FORMAT
cpp
#define AES_BLOCK_TO_BYTES_FORMAT BYTES_16_FORMAT
define AES_BLOCK_TO_BYTES
cpp
#define AES_BLOCK_TO_BYTES(
block
)
BIT32_TO_BYTES((block)[0]), BIT32_TO_BYTES((block)[1]), BIT32_TO_BYTES((block)[2]), BIT32_TO_BYTES((block)[3])
define DLLCALL
cpp
#define DLLCALL
define DLLEXPORT
cpp
#define DLLEXPORT
define UNUSED
cpp
#define UNUSED(
expr
)
do { (void)(expr); } while (0)
Source code
cpp
/*******************************************************************************
* @file macro.h
* @brief
* @copyright Copyright (c) 2018-2023. ImagineOn GmbH. www.imagineon.de
* All rights reserved.
******************************************************************************/
#ifndef _COLDWAVEOS_MACRO_H
#define _COLDWAVEOS_MACRO_H
#define c_container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
#define SECOND(a, b, ...) b
#define IS_PROBE(...) SECOND(__VA_ARGS__, )
#define PROBE() ~, NOT_EMPTY
#define CAT(a,b) a ## b
#define NOT(x) IS_PROBE(CAT(_NOT_, x))
#define _NOT_ PROBE()
#define BOOL(x) NOT(NOT(x))
#define IF(condition) _IF(BOOL(condition))
#define _IF(condition) CAT(_IF_, condition)
#define _IF_NOT_EMPTY(...)
#define _IF_(...) __VA_ARGS__
#define ASSERT(X)
#define Assert(X)
#ifndef MIN
#define MIN(x,y) ((x) < (y) ? (x) : (y))
#endif
#ifndef MAX
#define MAX(x,y) ((x) > (y) ? (x) : (y))
#endif
#ifndef UNUSED
#define UNUSED(expr) do { (void)(expr); } while (0)
#endif
#define DLLCALL
#define DLLEXPORT
#define BYTE_FORMAT "%.2hX"
#define BYTE_SEPARATOR " "
#define BYTES_2_FORMAT_SEPARATOR(SEPARATOR) BYTE_FORMAT SEPARATOR BYTE_FORMAT
#define BYTES_4_FORMAT_SEPARATOR(SEPARATOR) BYTES_2_FORMAT_SEPARATOR(SEPARATOR) SEPARATOR BYTES_2_FORMAT_SEPARATOR(SEPARATOR)
#define BYTES_8_FORMAT_SEPARATOR(SEPARATOR) BYTES_4_FORMAT_SEPARATOR(SEPARATOR) SEPARATOR BYTES_4_FORMAT_SEPARATOR(SEPARATOR)
#define BYTES_16_FORMAT_SEPARATOR(SEPARATOR) BYTES_8_FORMAT_SEPARATOR(SEPARATOR) SEPARATOR BYTES_8_FORMAT_SEPARATOR(SEPARATOR)
#define BYTES_32_FORMAT_SEPARATOR(SEPARATOR) BYTES_16_FORMAT_SEPARATOR(SEPARATOR) SEPARATOR BYTES_16_FORMAT_SEPARATOR(SEPARATOR)
#define BYTES_2_FORMAT BYTES_2_FORMAT_SEPARATOR(BYTE_SEPARATOR)
#define BYTES_4_FORMAT BYTES_4_FORMAT_SEPARATOR(BYTE_SEPARATOR)
#define BYTES_8_FORMAT BYTES_8_FORMAT_SEPARATOR(BYTE_SEPARATOR)
#define BYTES_16_FORMAT BYTES_16_FORMAT_SEPARATOR(BYTE_SEPARATOR)
#define BYTES_32_FORMAT BYTES_32_FORMAT_SEPARATOR(BYTE_SEPARATOR)
#define BYTES_2(bytes) (bytes)[0], (bytes)[1]
#define BYTES_4(bytes) BYTES_2(bytes), BYTES_2(bytes + 2)
#define BYTES_8(bytes) BYTES_4(bytes), BYTES_4(bytes + 4)
#define BYTES_16(bytes) BYTES_8(bytes), BYTES_8(bytes + 8)
#define BYTES_32(bytes) BYTES_16(bytes), BYTES_16(bytes + 16)
#define IP32_TO_BYTES_FORMAT BYTES_4_FORMAT_SEPARATOR(".")
#define BIT32_TO_BYTES(bits) BYTES_4((uint8_t*) &(bits))
#define IP32_TO_BYTES(ip) BIT32_TO_BYTES(ip)
#define AES_BLOCK_TO_BYTES_FORMAT BYTES_16_FORMAT
#define AES_BLOCK_TO_BYTES(block) BIT32_TO_BYTES((block)[0]), BIT32_TO_BYTES((block)[1]), BIT32_TO_BYTES((block)[2]), BIT32_TO_BYTES((block)[3])
#endif //_COLDWAVEOSMACRO_H