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