Home | History | Annotate | Download | only in common
      1 /*
      2 *******************************************************************************
      3 *
      4 *   Copyright (C) 1999-2009, International Business Machines
      5 *   Corporation and others.  All Rights Reserved.
      6 *
      7 *******************************************************************************
      8 *   file name:  uinvchar.h
      9 *   encoding:   US-ASCII
     10 *   tab size:   8 (not used)
     11 *   indentation:2
     12 *
     13 *   created on: 2004sep14
     14 *   created by: Markus W. Scherer
     15 *
     16 *   Definitions for handling invariant characters, moved here from putil.c
     17 *   for better modularization.
     18 */
     19 
     20 #ifndef __UINVCHAR_H__
     21 #define __UINVCHAR_H__
     22 
     23 #include "unicode/utypes.h"
     24 
     25 /**
     26  * Check if a char string only contains invariant characters.
     27  * See utypes.h for details.
     28  *
     29  * @param s Input string pointer.
     30  * @param length Length of the string, can be -1 if NUL-terminated.
     31  * @return TRUE if s contains only invariant characters.
     32  *
     33  * @internal (ICU 2.8)
     34  */
     35 U_INTERNAL UBool U_EXPORT2
     36 uprv_isInvariantString(const char *s, int32_t length);
     37 
     38 /**
     39  * Check if a Unicode string only contains invariant characters.
     40  * See utypes.h for details.
     41  *
     42  * @param s Input string pointer.
     43  * @param length Length of the string, can be -1 if NUL-terminated.
     44  * @return TRUE if s contains only invariant characters.
     45  *
     46  * @internal (ICU 2.8)
     47  */
     48 U_INTERNAL UBool U_EXPORT2
     49 uprv_isInvariantUString(const UChar *s, int32_t length);
     50 
     51 /**
     52  * \def U_UPPER_ORDINAL
     53  * Get the ordinal number of an uppercase invariant character
     54  * @internal
     55  */
     56 #if U_CHARSET_FAMILY==U_ASCII_FAMILY
     57 #   define U_UPPER_ORDINAL(x) ((x)-'A')
     58 #elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY
     59 #   define U_UPPER_ORDINAL(x) (((x) < 'J') ? ((x)-'A') : \
     60                               (((x) < 'S') ? ((x)-'J'+9) : \
     61                                ((x)-'S'+18)))
     62 #else
     63 #   error Unknown charset family!
     64 #endif
     65 
     66 /**
     67  * Compare two EBCDIC invariant-character strings in ASCII order.
     68  * @internal
     69  */
     70 U_INTERNAL int32_t U_EXPORT2
     71 uprv_compareInvEbcdicAsAscii(const char *s1, const char *s2);
     72 
     73 /**
     74  * \def uprv_compareInvCharsAsAscii
     75  * Compare two invariant-character strings in ASCII order.
     76  * @internal
     77  */
     78 #if U_CHARSET_FAMILY==U_ASCII_FAMILY
     79 #   define uprv_compareInvCharsAsAscii(s1, s2) uprv_strcmp(s1, s2)
     80 #elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY
     81 #   define uprv_compareInvCharsAsAscii(s1, s2) uprv_compareInvEbcdicAsAscii(s1, s2)
     82 #else
     83 #   error Unknown charset family!
     84 #endif
     85 
     86 #endif
     87