utypes.h
上传用户:zhuqijet
上传日期:2013-06-25
资源大小:10074k
文件大小:10k
- /*
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 1999-2000 The Apache Software Foundation. All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- * if any, must include the following acknowledgment:
- * "This product includes software developed by the
- * Apache Software Foundation (http://www.apache.org/)."
- * Alternately, this acknowledgment may appear in the software itself,
- * if and wherever such third-party acknowledgments normally appear.
- *
- * 4. The names "Xerces" and "Apache Software Foundation" must
- * not be used to endorse or promote products derived from this
- * software without prior written permission. For written
- * permission, please contact apache@apache.org.
- *
- * 5. Products derived from this software may not be called "Apache",
- * nor may "Apache" appear in their name, without prior written
- * permission of the Apache Software Foundation.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ====================================================================
- *
- * This software consists of voluntary contributions made by many
- * individuals on behalf of the Apache Software Foundation, and was
- * originally based on software copyright (c) 1999, International
- * Business Machines, Inc., http://www.ibm.com . For more information
- * on the Apache Software Foundation, please see
- * <http://www.apache.org/>.
- */
- /**
- * $Log: utypes.h,v $
- * Revision 1.2 2002/11/04 15:14:33 tng
- * C++ Namespace Support.
- *
- * Revision 1.1.1.1 2002/02/01 22:22:36 peiyongz
- * sane_include
- *
- * Revision 1.1 2000/02/10 18:08:28 abagchi
- * Initial checkin
- *
- */
- #ifndef UTYPES_H
- #define UTYPES_H
- #include <wchar.h>
- #include <stdlib.h>
- /*===========================================================================*/
- /* Include platform-dependent definitions */
- /* which are contained in the platform-specific file platform.h */
- /*===========================================================================*/
- #include "pos400.h"
- XERCES_CPP_NAMESPACE_BEGIN
- /* 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;
- /*===========================================================================*/
- /* 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)
- /*===========================================================================*/
- /* UErrorCode */
- /*===========================================================================*/
- /** Error code to replace exception handling */
- #ifdef __OS400__
- enum UErrorCode1 {
- #else
- enum UErrorCode {
- #endif
- 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
- };
- #ifdef __OS400__
- typedef int UErrorCode;
- #define U_SUCCESS(x) ((x)<=U_ZERO_ERROR)
- #define U_FAILURE(x) ((x)>U_ZERO_ERROR)
- #else
- #ifndef XP_CPLUSPLUS
- typedef enum UErrorCode UErrorCode;
- #endif
- #endif
- /* Use the following to determine if an UErrorCode represents */
- /* operational success or failure. */
- #ifndef __OS400__
- #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
- #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
- XERCES_CPP_NAMESPACE_END
- #endif /* _UTYPES */