#ifndef INCLUDED_BinaryLiteral_h
#define INCLUDED_BinaryLiteral_h

#define BIN_0000 0
#define BIN_0001 1
#define BIN_0010 2
#define BIN_0011 3
#define BIN_0100 4
#define BIN_0101 5
#define BIN_0110 6
#define BIN_0111 7
#define BIN_1000 8
#define BIN_1001 9
#define BIN_1010 a
#define BIN_1011 b
#define BIN_1100 c
#define BIN_1101 d
#define BIN_1110 e
#define BIN_1111 f

#define BIN_8_HEXIFY(b1,b2) (0x ## b1 ## b2)
#define BIN_8_RELAY(b1,b2)  BIN_8_HEXIFY(b1, b2)
#define BIN_8(b1,b2)        BIN_8_RELAY(BIN_ ## b1, BIN_ ## b2)

#define BIN_16_HEXIFY(b1,b2,b3,b4) (0x ## b1 ## b2 ## b3 ## b4)
#define BIN_16_RELAY(b1,b2,b3,b4)  BIN_16_HEXIFY(b1, b2, b3, b4)
#define BIN_16(b1,b2,b3,b4)        BIN_16_RELAY(BIN_##b1, BIN_##b2, BIN_##b3, BIN_##b4)

#define BIN_32_HEXIFY(b1,b2,b3,b4,b5,b6,b7,b8) (0x ## b1 ## b2 ## b3 ## b4 ## b5 ## b6 ## b7 ## b8)
#define BIN_32_RELAY(b1,b2,b3,b4,b5,b6,b7,b8)  BIN_32_HEXIFY(b1, b2, b3, b4, b5, b6, b7, b8)
#define BIN_32(b1,b2,b3,b4,b5,b6,b7,b8)        BIN_32_RELAY(BIN_##b1, BIN_##b2, BIN_##b3, BIN_##b4, BIN_##b5, BIN_##b6, BIN_##b7, BIN_##b8)

#define BIN_64_HEXIFY(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16) (0x ## b1 ## b2 ## b3 ## b4 ## b5 ## b6 ## b7 ## b8 ## b9 ## b10 ## b11 ## b12 ## b13 ## b14 ## b15 ## b16 ## ULL)
#define BIN_64_RELAY(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16)  BIN_64_HEXIFY(b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16)
#define BIN_64(b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16)        BIN_64_RELAY(BIN_##b1, BIN_##b2, BIN_##b3, BIN_##b4, BIN_##b5, BIN_##b6, BIN_##b7, BIN_##b8, BIN_##b9, BIN_##b10, BIN_##b11, BIN_##b12, BIN_##b13, BIN_##b14, BIN_##b15, BIN_##b16)

#endif
