| /* |
| ******************************************************************************* |
| * * |
| * COPYRIGHT: * |
| * (C) Copyright Taligent, Inc., 1996, 1997 * |
| * (C) Copyright International Business Machines Corporation, 1996-1999 * |
| * Licensed Material - Program-Property of IBM - All Rights Reserved. * |
| * US Government Users Restricted Rights - Use, duplication, or disclosure * |
| * restricted by GSA ADP Schedule Contract with IBM Corp. * |
| * * |
| ******************************************************************************* |
| * |
| * FILE NAME : UTYPES.H (formerly ptypes.h) |
| * |
| * Date Name Description |
| * 12/11/96 helena Creation. |
| * 02/27/97 aliu Added typedefs for UClassID, int8, int16, int32, |
| * uint8, uint16, and uint32. |
| * 04/01/97 aliu Added XP_CPLUSPLUS and modified to work under C as |
| * well as C++. |
| * Modified to use memcpy() for icu_arrayCopy() fns. |
| * 04/14/97 aliu Added TPlatformUtilities. |
| * 05/07/97 aliu Added import/export specifiers (replacing the old |
| * broken EXT_CLASS). Added version number for our |
| * code. Cleaned up header. |
| * 6/20/97 helena Java class name change. |
| * 08/11/98 stephen UErrorCode changed from typedef to enum |
| * 08/12/98 erm Changed T_ANALYTIC_PACKAGE_VERSION to 3 |
| * 08/14/98 stephen Added icu_arrayCopy() for int8_t, int16_t, int32_t |
| * 12/09/98 jfitz Added BUFFER_OVERFLOW_ERROR (bug 1100066) |
| * 04/20/99 stephen Cleaned up & reworked for autoconf. |
| * Renamed to utypes.h. |
| * 05/05/99 stephen Changed to use <inttypes.h> |
| ******************************************************************************* |
| */ |
| |
| #ifndef UTYPES_H |
| #define UTYPES_H |
| |
| #include <memory.h> |
| #include <wchar.h> |
| #include <stdlib.h> |
| |
| /*===========================================================================*/ |
| /* Include platform-dependent definitions */ |
| /* which are contained in the platform-specific file platform.h */ |
| /*===========================================================================*/ |
| |
| #if defined(WIN32) || defined(_WIN32) |
| # include "pwin32.h" |
| #elif defined(__OS2__) |
| # include "pos2.h" |
| #elif defined(__OS400__) |
| # include "pos400.h" |
| #else |
| # include "platform.h" |
| #endif |
| |
| /* XP_CPLUSPLUS is a cross-platform symbol which should be defined when |
| using C++. It should not be defined when compiling under C. */ |
| #ifdef __cplusplus |
| # ifndef XP_CPLUSPLUS |
| # define XP_CPLUSPLUS |
| # endif |
| #else |
| # undef XP_CPLUSPLUS |
| #endif |
| |
| /*===========================================================================*/ |
| /* Boolean data type */ |
| /*===========================================================================*/ |
| |
| #if ! HAVE_BOOL_T |
| typedef int8_t bool_t; |
| #endif |
| |
| #ifndef TRUE |
| # define TRUE 1 |
| #endif |
| #ifndef FALSE |
| # define FALSE 0 |
| #endif |
| |
| /*===========================================================================*/ |
| /* Unicode string offset */ |
| /*===========================================================================*/ |
| typedef int32_t UTextOffset; |
| |
| /*===========================================================================*/ |
| /* Unicode character */ |
| /*===========================================================================*/ |
| typedef uint16_t UChar; |
| |
| /*===========================================================================*/ |
| /* ICU version number */ |
| /*===========================================================================*/ |
| |
| /** |
| * ICU package code version number. |
| * This version number is incremented if and only if the code has changed |
| * in a binary incompatible way. For example, if the algorithm for generating |
| * sort keys has changed, this code version must be incremented. |
| * |
| * This is for internal use only. Clients should use |
| * ResourceBundle::getVersionNumber(). |
| * |
| * ResourceBundle::getVersionNumber() returns a full version number |
| * for a resource, which consists of this code version number concatenated |
| * with the ResourceBundle data file version number. |
| */ |
| #define ICU_VERSION "3" |
| |
| |
| /*===========================================================================*/ |
| /* For C wrappers, we use the symbol U_CAPI. */ |
| /* This works properly if the includer is C or C++. */ |
| /* Functions are declared U_CAPI return-type U_EXPORT2 function-name() ... */ |
| /*===========================================================================*/ |
| |
| #ifdef XP_CPLUSPLUS |
| # define U_CFUNC extern "C" |
| # define U_CDECL_BEGIN extern "C" { |
| # define U_CDECL_END } |
| #else |
| # define U_CFUNC |
| # define U_CDECL_BEGIN |
| # define U_CDECL_END |
| #endif |
| #define U_CAPI U_CFUNC U_EXPORT |
| |
| |
| /* Define NULL pointer value if it isn't already defined */ |
| |
| #ifndef NULL |
| #ifdef XP_CPLUSPLUS |
| #define NULL 0 |
| #else |
| #define NULL ((void *)0) |
| #endif |
| #endif |
| |
| /* Maximum value of a (void*) - use to indicate the limit of |
| an 'infinite' buffer. */ |
| #define U_MAX_PTR ((void*)-1) |
| |
| /*===========================================================================*/ |
| /* Calendar/TimeZone data types */ |
| /*===========================================================================*/ |
| |
| /** |
| * Date and Time data type. |
| * This is a primitive data type that holds the date and time |
| * as the number of milliseconds since 1970-jan-01, 00:00 UTC. |
| * UTC leap seconds are ignored. |
| */ |
| typedef double UDate; |
| |
| /* Common time manipulation constants */ |
| #define U_MILLIS_PER_SECOND (1000) |
| #define U_MILLIS_PER_MINUTE (60000) |
| #define U_MILLIS_PER_HOUR (3600000) |
| #define U_MILLIS_PER_DAY (86400000) |
| |
| |
| /*===========================================================================*/ |
| /* UClassID-based RTTI */ |
| /*===========================================================================*/ |
| |
| /** |
| * UClassID is used to identify classes without using RTTI, since RTTI |
| * is not yet supported by all C++ compilers. Each class hierarchy which needs |
| * to implement polymorphic clone() or operator==() defines two methods, |
| * described in detail below. UClassID values can be compared using |
| * operator==(). Nothing else should be done with them. |
| * |
| * getDynamicClassID() is declared in the base class of the hierarchy as |
| * a pure virtual. Each concrete subclass implements it in the same way: |
| * |
| * class Base { |
| * public: |
| * virtual UClassID getDynamicClassID() const = 0; |
| * } |
| * |
| * class Derived { |
| * public: |
| * virtual UClassID getDynamicClassID() const |
| * { return Derived::getStaticClassID(); } |
| * } |
| * |
| * Each concrete class implements getStaticClassID() as well, which allows |
| * clients to test for a specific type. |
| * |
| * class Derived { |
| * public: |
| * static UClassID getStaticClassID(); |
| * private: |
| * static char fgClassID; |
| * } |
| * |
| * // In Derived.cpp: |
| * UClassID Derived::getStaticClassID() |
| * { return (UClassID)&Derived::fgClassID; } |
| * char Derived::fgClassID = 0; // Value is irrelevant |
| */ |
| |
| typedef void* UClassID; |
| |
| /*===========================================================================*/ |
| /* Shared library/DLL import-export API control */ |
| /*===========================================================================*/ |
| |
| /** |
| * Control of symbol import/export. |
| * The ICU is separated into two libraries. |
| */ |
| |
| |
| #ifdef U_COMMON_IMPLEMENTATION |
| #define U_COMMON_API U_EXPORT |
| #define U_I18N_API U_IMPORT |
| #elif defined(U_I18N_IMPLEMENTATION) |
| #define U_COMMON_API U_IMPORT |
| #define U_I18N_API U_EXPORT |
| #else |
| #define U_COMMON_API U_IMPORT |
| #define U_I18N_API U_IMPORT |
| #endif |
| /*===========================================================================*/ |
| /* UErrorCode */ |
| /*===========================================================================*/ |
| |
| /** Error code to replace exception handling */ |
| enum UErrorCode { |
| U_ERROR_INFO_START = -128, /* Start of information results (semantically successful) */ |
| U_USING_FALLBACK_ERROR = -128, |
| U_USING_DEFAULT_ERROR = -127, |
| U_ERROR_INFO_LIMIT, |
| |
| U_ZERO_ERROR = 0, /* success */ |
| |
| U_ILLEGAL_ARGUMENT_ERROR = 1, /* Start of codes indicating failure */ |
| U_MISSING_RESOURCE_ERROR = 2, |
| U_INVALID_FORMAT_ERROR = 3, |
| U_FILE_ACCESS_ERROR = 4, |
| U_INTERNAL_PROGRAM_ERROR = 5, /* Indicates a bug in the library code */ |
| U_MESSAGE_PARSE_ERROR = 6, |
| U_MEMORY_ALLOCATION_ERROR = 7, /* Memory allocation error */ |
| U_INDEX_OUTOFBOUNDS_ERROR = 8, |
| U_PARSE_ERROR = 9, /* Equivalent to Java ParseException */ |
| U_INVALID_CHAR_FOUND = 10, /* In the Character conversion routines: Invalid character or sequence was encountered*/ |
| U_TRUNCATED_CHAR_FOUND = 11, /* In the Character conversion routines: More bytes are required to complete the conversion successfully*/ |
| U_ILLEGAL_CHAR_FOUND = 12, /* In codeset conversion: a sequence that does NOT belong in the codepage has been encountered*/ |
| U_INVALID_TABLE_FORMAT = 13, /* Conversion table file found, but corrupted*/ |
| U_INVALID_TABLE_FILE = 14, /* Conversion table file not found*/ |
| U_BUFFER_OVERFLOW_ERROR = 15, /* A result would not fit in the supplied buffer */ |
| U_UNSUPPORTED_ERROR = 16, /* Requested operation not supported in current context */ |
| U_ERROR_LIMIT |
| }; |
| |
| #ifndef XP_CPLUSPLUS |
| typedef enum UErrorCode UErrorCode; |
| #endif |
| |
| /* Use the following to determine if an UErrorCode represents */ |
| /* operational success or failure. */ |
| #ifdef XP_CPLUSPLUS |
| inline bool_t U_SUCCESS(UErrorCode code) { return (bool_t)(code<=U_ZERO_ERROR); } |
| inline bool_t U_FAILURE(UErrorCode code) { return (bool_t)(code>U_ZERO_ERROR); } |
| #else |
| #define U_SUCCESS(x) ((x)<=U_ZERO_ERROR) |
| #define U_FAILURE(x) ((x)>U_ZERO_ERROR) |
| #endif |
| |
| |
| /* Casting function for int32_t (backward compatibility version, here until |
| T_INT32 is replaced) */ |
| #define T_INT32(i) ((int32_t)i) |
| |
| |
| /*===========================================================================*/ |
| /* Debugging */ |
| /*===========================================================================*/ |
| |
| /* remove this */ |
| |
| /* This function is useful for debugging; it returns the text name */ |
| /* of an UErrorCode result. This is not the most efficient way of */ |
| /* doing this but it's just for Debug builds anyway. */ |
| |
| /* Do not use these arrays directly: they will move to a .c file! */ |
| static const char * |
| _uErrorInfoName[U_ERROR_INFO_LIMIT-U_ERROR_INFO_START]={ |
| "U_USING_FALLBACK_ERROR", |
| "U_USING_DEFAULT_ERROR" |
| }; |
| |
| static const char * |
| _uErrorName[U_ERROR_LIMIT]={ |
| "U_ZERO_ERROR", |
| |
| "U_ILLEGAL_ARGUMENT_ERROR", |
| "U_MISSING_RESOURCE_ERROR", |
| "U_INVALID_FORMAT_ERROR", |
| "U_FILE_ACCESS_ERROR", |
| "U_INTERNAL_PROGRAM_ERROR", |
| "U_MESSAGE_PARSE_ERROR", |
| "U_MEMORY_ALLOCATION_ERROR", |
| "U_INDEX_OUTOFBOUNDS_ERROR", |
| "U_PARSE_ERROR", |
| "U_INVALID_CHAR_FOUND", |
| "U_TRUNCATED_CHAR_FOUND", |
| "U_ILLEGAL_CHAR_FOUND", |
| "U_INVALID_TABLE_FORMAT", |
| "U_INVALID_TABLE_FILE", |
| "U_BUFFER_OVERFLOW_ERROR", |
| "U_UNSUPPORTED_ERROR" |
| }; |
| |
| #ifdef XP_CPLUSPLUS |
| inline const char * |
| errorName(UErrorCode code) |
| { |
| if(code>=0 && code<U_ERROR_LIMIT) { |
| return _uErrorName[code]; |
| } else if(code>=U_ERROR_INFO_START && code<U_ERROR_INFO_LIMIT) { |
| return _uErrorInfoName[code-U_ERROR_INFO_START]; |
| } else { |
| return "[BOGUS UErrorCode]"; |
| } |
| } |
| #else |
| # define errorName(code) \ |
| ((code)>=0 && (code)<U_ERROR_LIMIT) ? \ |
| _uErrorName[code] : \ |
| ((code)>=U_ERROR_INFO_START && (code)<U_ERROR_INFO_LIMIT) ? \ |
| _uErrorInfoName[code-U_ERROR_INFO_START] : \ |
| "[BOGUS UErrorCode]" |
| #endif |
| |
| /*===========================================================================*/ |
| /* Include header for platform utilies */ |
| /*===========================================================================*/ |
| |
| #include "putil.h" |
| |
| #endif /* _UTYPES */ |