hobbes
a language, embedded compiler, and runtime for efficient dynamic expression evaluation, data storage and analysis
Namespaces | Macros
preprocessor.H File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

 hobbes
 

Macros

#define _HOBPP_FIRST(a, ...)   a
 
#define _HOBPP_SECOND(a, b, ...)   b
 
#define _HOBPP_CAT(a, b)   a ## b
 
#define _HOBPP_IS_PROBE(...)   _HOBPP_SECOND(__VA_ARGS__, 0)
 
#define _HOBPP_PROBE()   ~, 1
 
#define _HOBPP_NOT(x)   _HOBPP_IS_PROBE(_HOBPP_CAT(_HOBPP__NOT_, x))
 
#define _HOBPP__NOT_0   _HOBPP_PROBE()
 
#define _HOBPP_BOOL(x)   _HOBPP_NOT(_HOBPP_NOT(x))
 
#define _HOBPP_IF_ELSE(condition)   _HOBPP__IF_ELSE(_HOBPP_BOOL(condition))
 
#define _HOBPP__IF_ELSE(condition)   _HOBPP_CAT(_HOBPP__IF_, condition)
 
#define _HOBPP__IF_1(...)   __VA_ARGS__ _HOBPP__IF_1_ELSE
 
#define _HOBPP__IF_0(...)   _HOBPP__IF_0_ELSE
 
#define _HOBPP__IF_1_ELSE(...)
 
#define _HOBPP__IF_0_ELSE(...)   __VA_ARGS__
 
#define _HOBPP_EMPTY()
 
#define _HOBPP_EVAL(...)   _HOBPP_EVAL256(__VA_ARGS__)
 
#define _HOBPP_EVAL256(...)   _HOBPP_EVAL128(_HOBPP_EVAL128(__VA_ARGS__))
 
#define _HOBPP_EVAL128(...)   _HOBPP_EVAL64(_HOBPP_EVAL64(__VA_ARGS__))
 
#define _HOBPP_EVAL64(...)   _HOBPP_EVAL32(_HOBPP_EVAL32(__VA_ARGS__))
 
#define _HOBPP_EVAL32(...)   _HOBPP_EVAL16(_HOBPP_EVAL16(__VA_ARGS__))
 
#define _HOBPP_EVAL16(...)   _HOBPP_EVAL8(_HOBPP_EVAL8(__VA_ARGS__))
 
#define _HOBPP_EVAL8(...)   _HOBPP_EVAL4(_HOBPP_EVAL4(__VA_ARGS__))
 
#define _HOBPP_EVAL4(...)   _HOBPP_EVAL2(_HOBPP_EVAL2(__VA_ARGS__))
 
#define _HOBPP_EVAL2(...)   _HOBPP_EVAL1(_HOBPP_EVAL1(__VA_ARGS__))
 
#define _HOBPP_EVAL1(...)   __VA_ARGS__
 
#define _HOBPP_DEFER2(m)   m _HOBPP_EMPTY _HOBPP_EMPTY()()
 
#define _HOBPP_HAS_PARGS(...)   _HOBPP_BOOL(_HOBPP_FIRST(_HOBPP__EOAP_ __VA_ARGS__)())
 
#define _HOBPP__EOAP_(...)   _HOBPP_BOOL(_HOBPP_FIRST(_HOBPP__EOA_ __VA_ARGS__)())
 
#define _HOBPP__EOA_()   0
 
#define _HOBPP_MAP(f, VS...)   _HOBPP_EVAL(_HOBPP_MAPP(f, VS))
 
#define _HOBPP_MAPP(f, H, T...)
 
#define _HOBPP__MAPP()   _HOBPP_MAPP
 

Macro Definition Documentation

◆ _HOBPP__EOA_

#define _HOBPP__EOA_ ( )    0

◆ _HOBPP__EOAP_

#define _HOBPP__EOAP_ (   ...)    _HOBPP_BOOL(_HOBPP_FIRST(_HOBPP__EOA_ __VA_ARGS__)())

◆ _HOBPP__IF_0

#define _HOBPP__IF_0 (   ...)    _HOBPP__IF_0_ELSE

◆ _HOBPP__IF_0_ELSE

#define _HOBPP__IF_0_ELSE (   ...)    __VA_ARGS__

◆ _HOBPP__IF_1

#define _HOBPP__IF_1 (   ...)    __VA_ARGS__ _HOBPP__IF_1_ELSE

◆ _HOBPP__IF_1_ELSE

#define _HOBPP__IF_1_ELSE (   ...)

◆ _HOBPP__IF_ELSE

#define _HOBPP__IF_ELSE (   condition)    _HOBPP_CAT(_HOBPP__IF_, condition)

◆ _HOBPP__MAPP

#define _HOBPP__MAPP ( )    _HOBPP_MAPP

◆ _HOBPP__NOT_0

#define _HOBPP__NOT_0   _HOBPP_PROBE()

◆ _HOBPP_BOOL

#define _HOBPP_BOOL (   x)    _HOBPP_NOT(_HOBPP_NOT(x))

◆ _HOBPP_CAT

#define _HOBPP_CAT (   a,
 
)    a ## b

◆ _HOBPP_DEFER2

#define _HOBPP_DEFER2 (   m)    m _HOBPP_EMPTY _HOBPP_EMPTY()()

◆ _HOBPP_EMPTY

#define _HOBPP_EMPTY ( )

◆ _HOBPP_EVAL

#define _HOBPP_EVAL (   ...)    _HOBPP_EVAL256(__VA_ARGS__)

◆ _HOBPP_EVAL1

#define _HOBPP_EVAL1 (   ...)    __VA_ARGS__

◆ _HOBPP_EVAL128

#define _HOBPP_EVAL128 (   ...)    _HOBPP_EVAL64(_HOBPP_EVAL64(__VA_ARGS__))

◆ _HOBPP_EVAL16

#define _HOBPP_EVAL16 (   ...)    _HOBPP_EVAL8(_HOBPP_EVAL8(__VA_ARGS__))

◆ _HOBPP_EVAL2

#define _HOBPP_EVAL2 (   ...)    _HOBPP_EVAL1(_HOBPP_EVAL1(__VA_ARGS__))

◆ _HOBPP_EVAL256

#define _HOBPP_EVAL256 (   ...)    _HOBPP_EVAL128(_HOBPP_EVAL128(__VA_ARGS__))

◆ _HOBPP_EVAL32

#define _HOBPP_EVAL32 (   ...)    _HOBPP_EVAL16(_HOBPP_EVAL16(__VA_ARGS__))

◆ _HOBPP_EVAL4

#define _HOBPP_EVAL4 (   ...)    _HOBPP_EVAL2(_HOBPP_EVAL2(__VA_ARGS__))

◆ _HOBPP_EVAL64

#define _HOBPP_EVAL64 (   ...)    _HOBPP_EVAL32(_HOBPP_EVAL32(__VA_ARGS__))

◆ _HOBPP_EVAL8

#define _HOBPP_EVAL8 (   ...)    _HOBPP_EVAL4(_HOBPP_EVAL4(__VA_ARGS__))

◆ _HOBPP_FIRST

#define _HOBPP_FIRST (   a,
  ... 
)    a

◆ _HOBPP_HAS_PARGS

#define _HOBPP_HAS_PARGS (   ...)    _HOBPP_BOOL(_HOBPP_FIRST(_HOBPP__EOAP_ __VA_ARGS__)())

◆ _HOBPP_IF_ELSE

#define _HOBPP_IF_ELSE (   condition)    _HOBPP__IF_ELSE(_HOBPP_BOOL(condition))

◆ _HOBPP_IS_PROBE

#define _HOBPP_IS_PROBE (   ...)    _HOBPP_SECOND(__VA_ARGS__, 0)

◆ _HOBPP_MAP

#define _HOBPP_MAP (   f,
  VS... 
)    _HOBPP_EVAL(_HOBPP_MAPP(f, VS))

◆ _HOBPP_MAPP

#define _HOBPP_MAPP (   f,
  H,
  T... 
)
Value:
f H \
_HOBPP_DEFER2(_HOBPP__MAPP)()(f, T) \
)( \
)
#define _HOBPP_IF_ELSE(condition)
Definition: preprocessor.H:18
#define _HOBPP__MAPP()
Definition: preprocessor.H:46
#define _HOBPP_HAS_PARGS(...)
Definition: preprocessor.H:36

◆ _HOBPP_NOT

#define _HOBPP_NOT (   x)    _HOBPP_IS_PROBE(_HOBPP_CAT(_HOBPP__NOT_, x))

◆ _HOBPP_PROBE

#define _HOBPP_PROBE ( )    ~, 1

◆ _HOBPP_SECOND

#define _HOBPP_SECOND (   a,
  b,
  ... 
)    b