1 #ifndef _RAR_TYPES_ 2 #define _RAR_TYPES_ 3 4 #include <stdint.h> 5 6 typedef uint8_t byte; // Unsigned 8 bits. 7 typedef uint16_t ushort; // Preferably 16 bits, but can be more. 8 typedef unsigned int uint; // 32 bits or more. 9 typedef uint32_t uint32; // 32 bits exactly. 10 typedef int32_t int32; // Signed 32 bits exactly. 11 typedef uint64_t uint64; // 64 bits exactly. 12 typedef int64_t int64; // Signed 64 bits exactly. 13 typedef wchar_t wchar; // Unicode character 14 15 // Get lowest 16 bits. 16 #define GET_SHORT16(x) (sizeof(ushort)==2 ? (ushort)(x):((x)&0xffff)) 17 18 // Make 64 bit integer from two 32 bit. 19 #define INT32TO64(high,low) ((((uint64)(high))<<32)+((uint64)low)) 20 21 // Maximum int64 value. 22 #define MAX_INT64 int64(INT32TO64(0x7fffffff,0xffffffff)) 23 24 // Special int64 value, large enough to never be found in real life 25 // and small enough to fit to both signed and unsigned 64-bit ints. 26 // We use it in situations, when we need to indicate that parameter 27 // is not defined and probably should be calculated inside of function. 28 // Lower part is intentionally 0x7fffffff, not 0xffffffff, to make it 29 // compatible with 32 bit int64 if 64 bit type is not supported. 30 #define INT64NDF INT32TO64(0x7fffffff,0x7fffffff) 31 32 #endif 33