#ifndef FIXEDTYPES_H #define FIXEDTYPES_H // ---------------------------------------------------------------------- // // FixedTypes.h // // Synopsis: Define and provide the following fixed-size types: // Int1, Int2, Int4, Int8; UInt1, UInt2, UInt4, UInt8; Float4, Float8 // // // Requirements: One of the following symbols must be #define'd BEFORE // #include-ing this file: // // platform op. sys. compiler symbol // // DEC Alpha OSF/1 g++ 2.7.2.3 OSF1_4_0_GPP_2_7_2_3 // // IBM AIX 4.1.4 xlC 3.1.4 AIX_4_1_4_XLC_3_1_4 // AIX 4.1.4 g++ 2.7.2.1 AIX_4_1_4_GPP_2_7_2_1 // // PC Windows NT 4.0 Borland C++ 5.0 NT_4_0_BORLANDCPP_5_0 // Windows NT 4.0 MS Visual C++ 4.0 NT_4_0_MSVCPP_4_0 // Windows NT 4.0 MS Visual C++ 5.0 NT_4_0_MSVCPP_5_0 // Linux 2.0 g++ 2.7.2.1 LINUX_2_0_GPP_2_7_2_1 // Linux 2.0 KAI C++ 3.2 LINUX_2_0_KCC_3_2 // Linux 2.0 KAI C++ 3.3 LINUX_2_0_KCC_3_3 // // SGI IRIX 5.3 g++ 2.7.2.1 IRIX_5_3_GPP_2_7_2_1 // IRIX 5.3 KAI C++ 3.2 IRIX_5_3_KCC_3_2 // IRIX 6.2 g++ 2.7.2.1 IRIX_6_2_GPP_2_7_2_1 // IRIX 6.2 Delta C++ IRIX_6_2_DCC // IRIX 6.2 OCC 2.19 (-32 switch) IRIX_6_2_CC32_2_19 // IRIX 6.2 OCC 2.19 (-64 switch) IRIX_6_2_CC64_2_19 // IRIX 6.2 KAI C++ 3.2 IRIX_6_2_KCC_3_2 // IRIX 6.2 KAI C++ 3.3 IRIX_6_2_KCC_3_3 // // Sun Solaris 2.4 SC 4.0 SOLARIS_2_4_SC_4_0 // Solaris 2.6 KAI C++ 3.2 SOLARIS_2_6_KCC_3_2 // // // Note: other, more generic, symbols (e.g., IRIX) are also acceptable, // but are not recommended, as they are less specific and hence admit // the possibility of inaccuracy if used in an untested environment. // These generic symbols typically consist of the OS name, or the OS // name followed by the compiler name (separated by an underscore). // // // History: // 05-Feb-1997 WEB Initial draft w/ native & gcc under IRIX // 07-Feb-1997 WEB Add Borland C++ 5.0 under NT 4.0 // 08-Feb-1997 WEB Add AIX // 11-Feb-1997 WEB Add DCC & CC's under IRIX // 14-Feb-1997 WEB Restructure the testbed environment // 18-Feb-1997 WEB Add SC 4.0 under SOLARIS 2.4 // 21-Feb-1997 WEB Add MicroSoft Visual C++ 4.0 under NT 4.0 // 16-Apr-1997 WEB Code review by FPCLTF; add internal guard; // general issues re environment identification yet to be resolved // 10-Sep-1997 WEB Add gcc 2.7.2.1 under IRIX 6.2 // 26-Nov-1997 WEB Merge into ZMftUtility package; add tests for // generic OS and OS-compiler combinations, keeping the previous // more-detailed version-number orientation, as well // 02-Dec-1997 WEB Made the #undef's conditional upon need; update // documentation; add KAI under LINUX & IRIX; other cleanup // 14-Jan-1998 WEB Add gcc 2.7.2.3 under OSF/1 (DEC Alpha) per // request of P Schemitz, Univ of Karlsruhe // 02-Mar-1998 WEB Version 2.0: employ typedef's // 14-Jan-1998 WEB Add KAI 3.2 under SOLARIS 2.6 per Leo Michelotti // 15-Jun-1998 WEB Add namespace support // 10-Nov-1998 WEB Add KAI 3.3 under IRIX 6.2; remove IRIX4.0.5F // 19-Feb-1999 WEB Add generic OSF1; minor cleanups // 10-Mar-2000 WEB Add generic SunOS // 23-Jun-2000 WEB Add generic IRIX6, IRIX6_2, IRIX6_5 // // ---------------------------------------------------------------------- #include "ZMutility/ZMenvironment.h" ZM_BEGIN_NAMESPACE(zmfxt) /* namespace zmfxt { */ // ---------------------------------------------------------------------- // ---------- // Establish a code, if not already done, identifying our environment; // this code may be updated later to reflect our true environment: // ---------- #ifndef FIXED_TYPES_ENV #define FIXED_TYPES_ENV (-1) #endif // FIXED_TYPES_ENV // ---------- // Establish the most prevalent definitions for fixed-size types; // these may be overridden and/or augmented as needed for the specific // environment selected: // ---------- #define ZMftInt1 signed char #define ZMftInt2 signed short #define ZMftInt4 signed int #define ZMftUInt1 unsigned char #define ZMftUInt2 unsigned short #define ZMftUInt4 unsigned int #define ZMftFloat4 float #define ZMftFloat8 double // ---------- // Override/augment the above definitions per the user-selected environment: // ---------- #if (FIXED_TYPES_ENV == 1) \ \ || defined( AIX ) \ || defined( AIX_XLC ) \ || defined( AIX_4_1_4_XLC_3_1_4 ) \ || defined( AIX_GPP ) \ || defined( AIX_4_1_4_GPP_2_7_2_1 ) \ \ || defined( NT ) \ || defined( NT_BORLANDCPP ) \ || defined( NT_4_0_BORLANDCPP_5_0 ) \ || defined( NT_MSVCPP ) \ || defined( NT_4_0_MSVCPP_4_0 ) \ || defined( NT_4_0_MSVCPP_5_0 ) \ \ || defined( IRIX ) \ || defined( IRIX5 ) \ || defined( IRIX6 ) \ || defined( IRIX6_2 ) \ || defined( IRIX6_5 ) \ || defined( IRIX_NATIVE_CC ) \ || defined( IRIX_GPP ) \ || defined( IRIX_5_3_GPP_2_7_2_1 ) \ || defined( IRIX_KCC ) \ || defined( IRIX_5_3_KCC_3_2 ) \ || defined( IRIX_6_2_GPP_2_7_2_1 ) \ || defined( IRIX_DCC ) \ || defined( IRIX_6_2_DCC ) \ || defined( IRIX_CC32 ) \ || defined( IRIX_6_2_CC32_2_19 ) \ || defined( IRIX_6_2_KCC_3_2 ) \ || defined( IRIX_6_2_KCC_3_3 ) \ \ || defined( LINUX ) \ || defined( LINUX_GPP ) \ || defined( LINUX_2_0_GPP_2_7_2_1 ) \ || defined( LINUX_KCC ) \ || defined( LINUX_2_0_KCC_3_2 ) \ \ || defined( OSF1 ) \ || defined( OSF1_4_0_GPP_2_7_2_3 ) \ #ifdef FIXED_TYPES_ENV #undef FIXED_TYPES_ENV #endif // FIXED_TYPES_ENV #define FIXED_TYPES_ENV 1 // ---------- // Just use the fixed-size type defaults (#define'd above) for // Int1, Int2, Int4, UInt1, UInt2, UInt4, Float4, Float8 // ---------- #elif (FIXED_TYPES_ENV == 2) \ \ || defined( IRIX_CC64 ) \ || defined( IRIX_6_2_CC64_2_19 ) \ #ifdef FIXED_TYPES_ENV #undef FIXED_TYPES_ENV #endif // FIXED_TYPES_ENV #define FIXED_TYPES_ENV 2 // ---------- // Augment the defaults (#define'd above): // ---------- #define ZMftInt8 signed long #define ZMftUInt8 unsigned long #define ZMftFloat16 long double #elif (FIXED_TYPES_ENV == 3) \ \ || defined( SOLARIS ) \ || defined( SOLARIS_SC ) \ || defined( SOLARIS_2_4_SC_4_0 ) \ || defined( SOLARIS_2_6_KCC_3_2 ) \ || defined( SunOS ) \ #ifdef FIXED_TYPES_ENV #undef FIXED_TYPES_ENV #endif // FIXED_TYPES_ENV #define FIXED_TYPES_ENV 3 // ---------- // Augment the defaults (#define'd above): // ---------- #define ZMftFloat16 long double #else // (FIXED_TYPES_ENV == (-1)) // ---------- // Unknown environment; notify user: // ---------- #error "Must #define FIXED_TYPES_ENV to employ fixed-size types package" #endif // FIXED_TYPES_ENV // ---------- // Set up signed integral types Int1, Int2, Int4, Int8: // ---------- #ifdef ZMftInt1 typedef ZMftInt1 Int1; #endif // ZMftInt1 #ifdef ZMftInt2 typedef ZMftInt2 Int2; #endif // ZMftInt2 #ifdef ZMftInt4 typedef ZMftInt4 Int4; #endif // ZMftInt4 #ifdef ZMftInt8 typedef ZMftInt8 Int8; #endif // ZMftInt8 // ---------- // Set up unsigned integral types UInt1, UInt2, UInt4, UInt8: // ---------- #ifdef ZMftUInt1 typedef ZMftUInt1 UInt1; #endif // ZMftUInt1 #ifdef ZMftUInt2 typedef ZMftUInt2 UInt2; #endif // ZMftUInt2 #ifdef ZMftUInt4 typedef ZMftUInt4 UInt4; #endif // ZMftUInt4 #ifdef ZMftUInt8 typedef ZMftUInt8 UInt8; #endif // ZMftUInt8 // ---------- // Set up floating-point types Float4, Float8, Float16: // ---------- #ifdef ZMftFloat4 typedef ZMftFloat4 Float4; #endif // ZMftFloat4 #ifdef ZMftFloat8 typedef ZMftFloat8 Float8; #endif // ZMftFloat8 #ifdef ZMftFloat16 typedef ZMftFloat16 Float16; #endif // ZMftFloat16 ZM_END_NAMESPACE(zmfxt) /* } // zmfxt */ // ---------------------------------------------------------------------- #endif // FIXEDTYPES_H