#ifndef IVORY_H #define IVORY_H #include #include #include #include #include "ivory_asserts.h" #include "ivory_templates.h" #define IFOREVER true #define IFOREVER_INC // ---------------------------------------- #define TYPE char #define EXT char #define M CHAR #if (CHAR_MIN < 0) ABS_I SIGNUM_I ADD_OVF_I SUB_OVF_I MUL_OVF_I DIV_OVF_I #else static inline char abs_char(char i) { return i; } SIGNUM_U ADD_OVF_U SUB_OVF_U MUL_OVF_U #endif #undef TYPE #undef EXT #undef M // ---------------------------------------- #define TYPE int8_t #define EXT i8 #define M INT8 ABS_I SIGNUM_I ADD_OVF_I SUB_OVF_I MUL_OVF_I DIV_OVF_I #undef TYPE #undef EXT #undef M // ---------------------------------------- #define TYPE int16_t #define EXT i16 #define M INT16 ABS_I SIGNUM_I ADD_OVF_I SUB_OVF_I MUL_OVF_I DIV_OVF_I #undef TYPE #undef EXT #undef M // ---------------------------------------- #define TYPE int32_t #define EXT i32 #define M INT32 ABS_I SIGNUM_I ADD_OVF_I SUB_OVF_I MUL_OVF_I DIV_OVF_I #undef TYPE #undef EXT #undef M // ---------------------------------------- #define TYPE int64_t #define EXT i64 #define M INT64 ABS_I SIGNUM_I ADD_OVF_I SUB_OVF_I MUL_OVF_I DIV_OVF_I #undef TYPE #undef EXT #undef M // ---------------------------------------- // The types below don't need an abs implementation // ---------------------------------------- // ---------------------------------------- #define TYPE float #define EXT float SIGNUM_I #undef TYPE #undef EXT // ---------------------------------------- #define TYPE double #define EXT double SIGNUM_I #undef TYPE #undef EXT // ---------------------------------------- #define TYPE uint8_t #define EXT u8 #define M UINT8 SIGNUM_U ADD_OVF_U SUB_OVF_U MUL_OVF_U DIV_OVF_U #undef TYPE #undef EXT #undef M // ---------------------------------------- #define TYPE uint16_t #define EXT u16 #define M UINT16 SIGNUM_U ADD_OVF_U SUB_OVF_U MUL_OVF_U DIV_OVF_U #undef TYPE #undef EXT #undef M // ---------------------------------------- #define TYPE uint32_t #define EXT u32 #define M UINT32 SIGNUM_U ADD_OVF_U SUB_OVF_U MUL_OVF_U DIV_OVF_U #undef TYPE #undef EXT #undef M // ---------------------------------------- #define TYPE uint64_t #define EXT u64 #define M UINT64 SIGNUM_U ADD_OVF_U SUB_OVF_U MUL_OVF_U DIV_OVF_U #undef TYPE #undef EXT #undef M // ---------------------------------------- // Index type: machine-depdentent size typedef int idx; #endif // IVORY_H