Code:
typedef enum _ENUM_C_OPERATORS
{
COP_NIL = 0,
COP_ONT = '?',
COP_ONF = ':',
COP_NEL = ',',
COP_END = ';',
COP_TYPE_VEC2 = 'v' | ('e' << 8) | ('c' << 16) | ('2' << 24),
COP_TYPE_VEC3 = 'v' | ('e' << 8) | ('c' << 16) | ('3' << 24),
COP_TYPE_VEC4 = 'v' | ('e' << 8) | ('c' << 16) | ('4' << 24),
COP_TYPE_MAT2 = 'm' | ('a' << 8) | ('t' << 16) | ('2' << 24),
COP_TYPE_MAT3 = 'm' | ('a' << 8) | ('t' << 16) | ('3' << 24),
COP_TYPE_MAT4 = 'm' | ('a' << 8) | ('t' << 16) | ('4' << 24),
COP_EXPR_OPEN = '(',
COP_EXPR_SHUT = ')',
COP_CODE_OPEN = '{',
COP_CODE_SHUT = '}',
/* Bitwise Symbols */
COP_BWN = '~',
COP_BWA = '&',
COP_BAE = '&' | ('=' << 8),
COP_BWO = '|',
COP_BOE = '|' | ('=' << 8),
COP_BWX = '^',
COP_BXE = '^' | ('=' << 8),
COP_SHL = '<' | ('<' << 8),
COP_SLE = '<' | ('<' << 8) | ('=' << 16),
COP_SHR = '>' | ('>' << 8),
COP_SRE = '>' | ('>' << 8) | ('=' << 16),
/* Comparison Symbols */
COP_NOT = '!',
COP_EQL = '=' | ('=' << 8),
COP_NEQ = '!' | ('=' << 8),
COP_GTH = '>',
COP_GTE = '>' | ('=' << 8),
COP_LTH = '<',
COP_LTE = '<' | ('=' << 8),
/* Math Symbols */
COP_ADD = '+',
COP_ADE = '+' | ('=' << 8),
COP_INC = '+' | ('+' << 8),
COP_SUB = '-',
COP_SUE = '-' | ('=' << 8),
COP_DEC = '-' | ('-' << 8),
COP_MUL = '*',
COP_MUE = '*' | ('=' << 8),
COP_DIV = '/',
COP_DIE = '/' | ('=' << 8),
COP_MOD = '%',
COP_MOE = '%' | ('=' << 8),
} ENUM_C_OPERATORS;
typedef enum _ENUM_INTEGRALS
{
CIN_INT = 0,
/* Floating Point Numbers */
CIN_F = 'F',
CIN_D = 'D',
CIN_LD = 'L' | ('D' << 8),
/* Integers */
CIN_U = 'U',
CIN_L = 'L',
CIN_UL = 'U' | ('L' << 8),
CIN_LL = 'L' | ('L' << 8),
CIN_ULL = 'U' | ('L' << 8) | ('L' << 16),
/* Why these aren't already a standard I don't know but might as well lead
* by example */
CIN_HH = 'H' | ('H' << 8),
CIN_UHH = 'U' | ('H' << 8) | ('H' << 16),
CIN_H = 'H',
CIN_UH = 'U' | ('H' << 8),
CIN_J = 'J',
CIN_UJ = 'U' | ('J' << 8),
CIN_P = 'P',
CIN_UP = 'U' | ('P' << 8),
CIN_Z = 'Z',
CIN_UZ = 'U' | ('Z' << 8)
#if 0
/* specific with integers */
CIN_I = 'I'
#endif
} ENUM_INTEGRALS;
typedef union _INTEGRAL
{
long double ld;
double d;
float f;
uintmax_t uj;
intmax_t j;
uintptr_t up;
intptr_t p;
size_t uz;
ssize_t z;
ullong ull;
dllong ll;
ulong ul;
dlong l;
uint u;
dint i;
ushort uh;
dshort h;
dchar hh;
uchar uhh;
} INTEGRAL;