epoc32/include/stdapis/stlport/stl/c_locale.h
branchSymbian2
changeset 2 2fe1408b6811
parent 0 061f57f2323e
equal deleted inserted replaced
1:666f914201fb 2:2fe1408b6811
     1 c_locale.h
     1 /*
       
     2  * © Portions copyright (c) 2006-2007 Nokia Corporation.  All rights reserved.
       
     3  *
       
     4  * Copyright (c) 1999
       
     5  * Silicon Graphics Computer Systems, Inc.
       
     6  *
       
     7  * Copyright (c) 1999 
       
     8  * Boris Fomitchev
       
     9  *
       
    10  * This material is provided "as is", with absolutely no warranty expressed
       
    11  * or implied. Any use is at your own risk.
       
    12  *
       
    13  * Permission to use or copy this software for any purpose is hereby granted 
       
    14  * without fee, provided the above notices are retained on all copies.
       
    15  * Permission to modify the code and to distribute modified code is granted,
       
    16  * provided the above notices are retained, and a notice that the code was
       
    17  * modified is included with the above copyright notice.
       
    18  *
       
    19  */ 
       
    20 
       
    21 
       
    22 #ifndef _STLP_C_LOCALE_H
       
    23 # define _STLP_C_LOCALE_H
       
    24 
       
    25 /*
       
    26  * Implementation dependent definitions
       
    27  */
       
    28 #ifdef __cplusplus
       
    29 #  include <stl/_config.h>
       
    30 #endif
       
    31 
       
    32 #if defined(__sgi) 
       
    33 # if defined(ROOT_65) /* IRIX 6.5.x */
       
    34 #  include <sgidefs.h>
       
    35 #  include <standards.h>
       
    36 #  include <wchar.h>
       
    37 #  include <ctype.h>
       
    38 
       
    39 # else
       
    40                   /* IRIX pre-6.5 */
       
    41 #  include <sgidefs.h>
       
    42 #  include <standards.h>
       
    43 
       
    44 #  if !defined(_SIZE_T) && !defined(_SIZE_T_)
       
    45 #   define _SIZE_T
       
    46 #    if (_MIPS_SZLONG == 32)
       
    47 typedef unsigned int    size_t;
       
    48 #    endif
       
    49 #    if (_MIPS_SZLONG == 64)
       
    50 typedef unsigned long   size_t;
       
    51 #    endif
       
    52 #   endif
       
    53 
       
    54 #   ifndef _WCHAR_T
       
    55 #    define _WCHAR_T
       
    56 #     if (_MIPS_SZLONG == 32)
       
    57 typedef long wchar_t;
       
    58 #     endif
       
    59 #     if (_MIPS_SZLONG == 64)
       
    60 typedef __int32_t wchar_t;
       
    61 #     endif
       
    62 #    endif /* _WCHAR_T */
       
    63 
       
    64 #    ifndef _WINT_T
       
    65 #     define _WINT_T
       
    66 #     if (_MIPS_SZLONG == 32)
       
    67         typedef long    wint_t;
       
    68 #     endif
       
    69 #     if (_MIPS_SZLONG == 64)
       
    70         typedef __int32_t wint_t;
       
    71 #     endif
       
    72 #    endif /* _WINT_T */
       
    73 
       
    74 #    ifndef _MBSTATE_T
       
    75 #    define _MBSTATE_T
       
    76 #    ifdef _MSC_VER
       
    77 		typedef int		mbstate_t;
       
    78 #    else
       
    79         typedef char    mbstate_t;
       
    80 #    endif
       
    81 #    endif /* _MBSTATE_T */
       
    82 
       
    83 #   endif /* ROOT65 */ 
       
    84 
       
    85 #  else /* __sgi */
       
    86 
       
    87 # ifdef __cplusplus
       
    88 # ifndef _STLP_CSTDDEF
       
    89 #  include <cstddef>
       
    90 # endif
       
    91 # ifndef _STLP_CWCHAR_H
       
    92 #  include <stl/_cwchar.h>
       
    93 # endif
       
    94 # ifndef _STLP_CCTYPE
       
    95 #  include <cctype>
       
    96 # endif
       
    97 # else
       
    98 #  include <stddef.h>
       
    99 #  include <wchar.h>
       
   100 #  include <ctype.h>
       
   101 # endif
       
   102 
       
   103 #endif /* __sgi */
       
   104 
       
   105 /*
       
   106  * GENERAL FRAMEWORK
       
   107  */
       
   108 
       
   109 struct _Locale_ctype;
       
   110 struct _Locale_numeric;
       
   111 struct _Locale_time;
       
   112 struct _Locale_collate;
       
   113 struct _Locale_monetary;
       
   114 struct _Locale_messages;
       
   115 
       
   116 /*
       
   117   Bitmask macros.  
       
   118 */
       
   119 
       
   120 /*
       
   121  * For narrow characters, we expose the lookup table interface.
       
   122  */
       
   123 
       
   124 /* Internal bitmask macros, os-specific. */
       
   125 
       
   126 #if defined(__sgi)              /* IRIX */
       
   127 
       
   128 #define _Locale_S      0x00000008      /* Spacing character */
       
   129 #define _Locale_A      0x00004000      /* Alphabetical characters only */
       
   130 #define _Locale_B      0x00000040      /* Obsolete: was space char only */
       
   131 #define _Locale_PR     0x00008000      /* Printable characters only */
       
   132 #define _Locale_G      0x40000000      /* Graphic characters only */
       
   133 #define _Locale_BL     0x80000000      /* The blank character class */
       
   134 
       
   135 /* Public bitmask macros, must be defined for every OS. These values, of
       
   136  * course, are specific to IRIX. */
       
   137 
       
   138 #define _Locale_CNTRL  0x00000020      /* Control character */
       
   139 #define _Locale_UPPER  0x00000001      /* Upper case */
       
   140 #define _Locale_LOWER  0x00000002      /* Lower case */
       
   141 #define _Locale_DIGIT  0x00000004      /* Numeral (digit) */
       
   142 #define _Locale_XDIGIT 0x00000080      /* heXadecimal digit */
       
   143 #define _Locale_PUNCT  0x00000010      /* Punctuation */
       
   144 #define _Locale_SPACE  (_Locale_S | _Locale_BL)
       
   145 #define _Locale_PRINT  (_Locale_PUNCT | _Locale_UPPER | _Locale_LOWER | \
       
   146                         _Locale_DIGIT | _Locale_A | _Locale_XDIGIT | \
       
   147                         _Locale_PR)
       
   148 #define _Locale_ALPHA  _Locale_A
       
   149 
       
   150 /*
       
   151 * All of these except for graph and blank are from the C standard;
       
   152 * graph and blank are XPG4.  (graph in XPG4 doesn't mean quite the
       
   153 * same thing as graph in the C++ library)
       
   154 */
       
   155 
       
   156 #endif /* IRIX */
       
   157 
       
   158 
       
   159 #if defined( __Lynx__ )
       
   160  /* azov: On Lynx isalpha defined as (_U | _L), which gives us a mask 
       
   161   * unusable in ctype_table. So we have to redefine it and use hard-coded 
       
   162   * numbers (to avoid potential clashes if system headers change).
       
   163   *
       
   164   * P.S. Actually, I see no reason in using platform-specific masks - 
       
   165   * having just one set of masks for all platforms should work just as
       
   166   * well - we only use them internally and they don't have to be equal 
       
   167   * to whatever defined in local ctype.h
       
   168   *
       
   169   */ 
       
   170 #   define _Locale_CNTRL  040     /* _C, Control character */
       
   171 #   define _Locale_UPPER  01      /* _U, Upper case */
       
   172 #   define _Locale_LOWER  02      /* _L, Lower case */
       
   173 #   define _Locale_DIGIT  04      /* _N, Numeral (digit) */
       
   174 #   define _Locale_XDIGIT 0200    /* _X, heXadecimal digit */
       
   175 #   define _Locale_PUNCT  020     /* _P, Punctuation */
       
   176 #   define _Locale_SPACE  010     /* _S, Spacing */
       
   177 #   define _Locale_ALPHA  040000  /* none, Alphanumerical */
       
   178 #   define _Locale_PRINT  (_Locale_PUNCT | _Locale_UPPER | _Locale_LOWER | \
       
   179                            _Locale_DIGIT | _Locale_ALPHA | _Locale_XDIGIT |\
       
   180                            _Locale_SPACE ) /* Printable */
       
   181 # endif /* __Lynx__ */
       
   182 
       
   183 #if defined(__GNUC__) || defined (__BORLANDC__) || defined (__COMO__)
       
   184 
       
   185 # if defined (__CYGWIN__)
       
   186 
       
   187 #  define _Locale_CNTRL  040
       
   188 #  define _Locale_UPPER  02
       
   189 #  define _Locale_LOWER  01
       
   190 #  define _Locale_DIGIT  04
       
   191 #  define _Locale_XDIGIT ( 0100 | _Locale_DIGIT )
       
   192 #  define _Locale_PUNCT  020
       
   193 #  define _Locale_SPACE  010
       
   194 #  define _Locale_ALPHA  (_Locale_UPPER | _Locale_LOWER)
       
   195 #  define _Locale_PRINT  (_Locale_ALPHA | _Locale_DIGIT | _Locale_PUNCT | 0200 )
       
   196 
       
   197 # elif defined (__FreeBSD__)
       
   198 
       
   199 # define _Locale_CNTRL _CTYPE_C
       
   200 # define _Locale_UPPER _CTYPE_U
       
   201 # define _Locale_LOWER _CTYPE_L
       
   202 # define _Locale_DIGIT _CTYPE_D
       
   203 # define _Locale_XDIGIT _CTYPE_X
       
   204 # define _Locale_PUNCT _CTYPE_P
       
   205 # define _Locale_SPACE _CTYPE_S
       
   206 # define _Locale_PRINT _CTYPE_R
       
   207 # define _Locale_ALPHA _CTYPE_A
       
   208 
       
   209 # elif defined (__NetBSD__) || defined (__amigaos__)
       
   210  
       
   211 #  define _Locale_CNTRL _C
       
   212 #  define _Locale_UPPER _U
       
   213 #  define _Locale_LOWER _L
       
   214 #  define _Locale_DIGIT _N
       
   215 #  define _Locale_XDIGIT (_N|_X)
       
   216 #  define _Locale_PUNCT _P
       
   217 #  define _Locale_SPACE _S
       
   218 #  define _Locale_PRINT (_P|_U|_L|_N|_B)
       
   219 #  define _Locale_ALPHA (_U|_L)
       
   220 # elif defined(__EMX__) /* OS/2 with emx runtime */
       
   221 #  define _Locale_CNTRL _CNTRL
       
   222 #  define _Locale_UPPER _UPPER
       
   223 #  define _Locale_LOWER _LOWER
       
   224 #  define _Locale_DIGIT _DIGIT
       
   225 #  define _Locale_XDIGIT _XDIGIT
       
   226 #  define _Locale_PUNCT _PUNCT
       
   227 #  define _Locale_SPACE _SPACE
       
   228 #  define _Locale_PRINT _PRINT
       
   229 #  define _Locale_ALPHA (_UPPER|_LOWER)
       
   230 
       
   231 # elif defined(_STLP_USE_GLIBC) /* linux, using the gnu compiler */
       
   232 
       
   233 /* This section uses macros defined in the gnu libc ctype.h header */
       
   234 
       
   235 #  define _Locale_CNTRL  _IScntrl
       
   236 #  define _Locale_UPPER  _ISupper
       
   237 #  define _Locale_LOWER  _ISlower
       
   238 #  define _Locale_DIGIT  _ISdigit
       
   239 #  define _Locale_XDIGIT _ISxdigit
       
   240 #  define _Locale_PUNCT  _ISpunct
       
   241 #  define _Locale_SPACE  _ISspace
       
   242 #  define _Locale_PRINT  _ISprint
       
   243 #  define _Locale_ALPHA  _ISalpha
       
   244 
       
   245 #  endif /* GLIBC */
       
   246 
       
   247 #endif /* gnu */
       
   248 
       
   249 #if ( defined(__sun) && defined (__SVR4) ) \
       
   250     || (defined (__digital__) && defined (__unix__)) \
       
   251     || defined(_AIX)
       
   252 /* fbp : condition from AT&T code*/
       
   253 #if !(defined(__XPG4_CHAR_CLASS__) || defined(_XPG4_2) || \
       
   254     (defined(_XOPEN_SOURCE) && (_XOPEN_VERSION - 0 == 4))) && ! defined (_ISCNTRL)
       
   255   /* fbp : on 2.5.1, the defines are different ;( */
       
   256   // # if ( defined (__sun) && defined (__SVR4) && ! defined (_ISCNTRL) )
       
   257 #   define _ISCNTRL _C
       
   258 #   define _ISUPPER _U
       
   259 #   define _ISLOWER _L
       
   260 #   define _ISDIGIT _N
       
   261 #   define _ISXDIGIT _X
       
   262 #   define _ISPUNCT _P
       
   263 #   define _ISSPACE _S
       
   264 #   define _ISPRINT (_P | _U | _L | _N | _B)
       
   265 #   define _ISALPHA (_U | _L)
       
   266 #  endif 
       
   267 
       
   268 #  define _Locale_CNTRL  _ISCNTRL
       
   269 #  define _Locale_UPPER  _ISUPPER
       
   270 #  define _Locale_LOWER  _ISLOWER
       
   271 #  define _Locale_DIGIT  _ISDIGIT
       
   272 #  define _Locale_XDIGIT _ISXDIGIT
       
   273 #  define _Locale_PUNCT  _ISPUNCT
       
   274 #  define _Locale_SPACE  _ISSPACE
       
   275 #  define _Locale_PRINT  _ISPRINT
       
   276 #  define _Locale_ALPHA  _ISALPHA
       
   277 # elif defined(__SYMBIAN32__)
       
   278 # define _Locale_CNTRL _CTYPE_C
       
   279 # define _Locale_UPPER _CTYPE_U
       
   280 # define _Locale_LOWER _CTYPE_L
       
   281 # define _Locale_DIGIT _CTYPE_D
       
   282 # define _Locale_XDIGIT _CTYPE_X
       
   283 # define _Locale_PUNCT _CTYPE_P
       
   284 # define _Locale_SPACE _CTYPE_S
       
   285 # define _Locale_PRINT _CTYPE_R
       
   286 # define _Locale_ALPHA _CTYPE_A
       
   287 
       
   288 #elif defined (__MWERKS__)
       
   289 #  define _Locale_CNTRL  __control_char
       
   290 #  define _Locale_UPPER  __upper_case
       
   291 #  define _Locale_LOWER  __lower_case
       
   292 #  define _Locale_DIGIT  __digit
       
   293 #  define _Locale_XDIGIT __hex_digit
       
   294 #  define _Locale_PUNCT  __punctuation
       
   295 #  define _Locale_SPACE  __space_char
       
   296 #  define _Locale_PRINT  __printable
       
   297 #  define _Locale_ALPHA  __alphanumeric
       
   298 #elif defined (__BORLANDC__)
       
   299 #  define _Locale_CNTRL  _IS_CTL
       
   300 #  define _Locale_UPPER  _IS_UPP
       
   301 #  define _Locale_LOWER  _IS_LOW
       
   302 #  define _Locale_DIGIT  _IS_DIG
       
   303 #  define _Locale_XDIGIT _IS_HEX
       
   304 #  define _Locale_PUNCT  _IS_PUN
       
   305 #  define _Locale_SPACE  _IS_SP
       
   306 #  define _Locale_PRINT  (_IS_SP|_IS_PUN|_IS_UPP|_IS_LOW|_IS_DIG)
       
   307 #  define _Locale_ALPHA  _IS_ALPHA
       
   308 #elif defined (_MSC_VER) || defined (__MINGW32__)
       
   309 #  define _Locale_CNTRL  _CONTROL
       
   310 #  define _Locale_UPPER  _UPPER
       
   311 #  define _Locale_LOWER  _LOWER
       
   312 #  define _Locale_DIGIT  _DIGIT
       
   313 #  define _Locale_XDIGIT _HEX
       
   314 #  define _Locale_PUNCT  _PUNCT
       
   315 #  define _Locale_SPACE  _SPACE
       
   316 #  define _Locale_PRINT  (_ALPHA | _DIGIT | _BLANK | _PUNCT)
       
   317 // is this one has to be so complex ?  
       
   318 #  define _Locale_ALPHA  ( _ALPHA & ~ (_UPPER | _LOWER )) 
       
   319 #elif defined (__DMC__)
       
   320 #  define _Locale_CNTRL  _CONTROL
       
   321 #  define _Locale_UPPER  _UPPER
       
   322 #  define _Locale_LOWER  _LOWER
       
   323 #  define _Locale_DIGIT  _DIGIT
       
   324 #  define _Locale_XDIGIT _HEX
       
   325 #  define _Locale_PUNCT  _PUNCT
       
   326 #  define _Locale_SPACE  _SPACE
       
   327 #  define _Locale_PRINT  (_UPPER | _LOWER | _DIGIT | _PUNCT | _SPACE)
       
   328 #  define _Locale_ALPHA  _ALPHA
       
   329 #elif defined(__MRC__) || defined(__SC__)		//*TY 02/24/2000 - added support for MPW
       
   330 #  define _Locale_CNTRL  _CTL
       
   331 #  define _Locale_UPPER  _UPP
       
   332 #  define _Locale_LOWER  _LOW
       
   333 #  define _Locale_DIGIT  _DIG
       
   334 #  define _Locale_XDIGIT _HEX
       
   335 #  define _Locale_PUNCT  _PUN
       
   336 #  define _Locale_SPACE  _BLA
       
   337 #  define _Locale_PRINT  (_UPP | _LOW | _DIG | _PUN | _BLA)
       
   338 #  define _Locale_ALPHA  (_UPP | _LOW)
       
   339 #elif defined(__MLCCPP__)
       
   340 #  define _Locale_CNTRL    1
       
   341 #  define _Locale_UPPER    2
       
   342 #  define _Locale_LOWER    4
       
   343 #  define _Locale_DIGIT    8
       
   344 #  define _Locale_XDIGIT  16
       
   345 #  define _Locale_PUNCT   32
       
   346 #  define _Locale_SPACE   64
       
   347 #  define _Locale_PRINT  128
       
   348 #  define _Locale_ALPHA  256
       
   349 
       
   350 # elif defined (__GNUC__) && defined (__APPLE__)
       
   351  
       
   352 # define _Locale_CNTRL _C
       
   353 # define _Locale_UPPER _U
       
   354 # define _Locale_LOWER _L
       
   355 # define _Locale_DIGIT _D
       
   356 # define _Locale_XDIGIT _X
       
   357 # define _Locale_PUNCT _P
       
   358 # define _Locale_SPACE _S
       
   359 # define _Locale_PRINT _R
       
   360 # define _Locale_ALPHA _A
       
   361 
       
   362 # elif defined (__hpux) || defined (__osf__)
       
   363  
       
   364 #   if defined(__HP_aCC) && !defined(_INCLUDE_HPUX_SOURCE)
       
   365 #     define _ISALPHA      0x001
       
   366 #     define _ISALNUM      0x002
       
   367 #     define _ISBLANK      0x004
       
   368 #     define _ISCNTRL      0x008
       
   369 #     define _ISDIGIT      0x010
       
   370 #     define _ISGRAPH      0x020
       
   371 #     define _ISLOWER      0x040
       
   372 #     define _ISPRINT      0x080
       
   373 #     define _ISPUNCT      0x100
       
   374 #     define _ISSPACE      0x200
       
   375 #     define _ISUPPER      0x400
       
   376 #     define _ISXDIGIT     0x800
       
   377 #  endif
       
   378 #  define _Locale_CNTRL  _ISCNTRL
       
   379 #  define _Locale_UPPER  _ISUPPER
       
   380 #  define _Locale_LOWER  _ISLOWER
       
   381 #  define _Locale_DIGIT  _ISDIGIT
       
   382 #  define _Locale_XDIGIT _ISXDIGIT
       
   383 #  define _Locale_PUNCT  _ISPUNCT
       
   384 #  define _Locale_SPACE  _ISSPACE
       
   385 #  define _Locale_PRINT  _ISPRINT
       
   386 #  define _Locale_ALPHA  _ISALPHA
       
   387 # elif defined (__MVS__) || defined(__OS400__)
       
   388 #  define _Locale_CNTRL __ISCNTRL
       
   389 #  define _Locale_UPPER __ISUPPER
       
   390 #  define _Locale_LOWER __ISLOWER
       
   391 #  define _Locale_DIGIT __ISDIGIT
       
   392 #  define _Locale_XDIGIT __ISXDIGIT
       
   393 #  define _Locale_PUNCT __ISPUNCT
       
   394 #  define _Locale_SPACE __ISSPACE
       
   395 #  define _Locale_PRINT __ISPRINT
       
   396 #  define _Locale_ALPHA __ISALPHA
       
   397 # elif defined (__QNXNTO__)  || defined (__WATCOMC__)
       
   398 # define _Locale_CNTRL _CNTRL
       
   399 # define _Locale_UPPER _UPPER
       
   400 # define _Locale_LOWER _LOWER
       
   401 # define _Locale_DIGIT _DIGIT
       
   402 # define _Locale_XDIGIT _XDIGT
       
   403 # define _Locale_PUNCT _PUNCT
       
   404 # define _Locale_SPACE _SPACE
       
   405 # define _Locale_PRINT _PRINT
       
   406 # define _Locale_ALPHA (_UPPER | _LOWER)
       
   407 #elif defined (__DJGPP)
       
   408 #  define _Locale_CNTRL  __dj_ISCNTRL
       
   409 #  define _Locale_UPPER  __dj_ISUPPER
       
   410 #  define _Locale_LOWER  __dj_ISLOWER
       
   411 #  define _Locale_DIGIT  __dj_ISDIGIT
       
   412 #  define _Locale_XDIGIT __dj_ISXDIGIT
       
   413 #  define _Locale_PUNCT  __dj_ISPUNCT
       
   414 #  define _Locale_SPACE  __dj_ISSPACE
       
   415 #  define _Locale_PRINT  __dj_ISPRINT
       
   416 #  define _Locale_ALPHA  __dj_ISALPHA
       
   417 #elif defined (_STLP_SCO_OPENSERVER)
       
   418 #  define _Locale_CNTRL _C
       
   419 #  define _Locale_UPPER _U
       
   420 #  define _Locale_LOWER _L
       
   421 #  define _Locale_DIGIT _N
       
   422 #  define _Locale_XDIGIT _X
       
   423 #  define _Locale_PUNCT _P
       
   424 #  define _Locale_SPACE _S
       
   425 #  define _Locale_PRINT _R
       
   426 #  define _Locale_ALPHA _A
       
   427 #elif defined (__NCR_SVR)
       
   428 #  define _Locale_CNTRL _C
       
   429 #  define _Locale_UPPER _U
       
   430 #  define _Locale_LOWER _L
       
   431 #  define _Locale_DIGIT _N
       
   432 #  define _Locale_XDIGIT _X
       
   433 #  define _Locale_PUNCT _P
       
   434 #  define _Locale_SPACE _S
       
   435 #  define _Locale_PRINT (_P | _U | _L | _N | _B)
       
   436 #  define _Locale_ALPHA (_U | _L)
       
   437 #elif defined (_CRAY)
       
   438 #  define _Locale_CNTRL  _CNTRL
       
   439 #  define _Locale_UPPER  _UPPER
       
   440 #  define _Locale_LOWER  _LOWER
       
   441 #  define _Locale_DIGIT  _DIGIT
       
   442 #  define _Locale_XDIGIT _XDIGIT
       
   443 #  define _Locale_PUNCT  _PUNCT
       
   444 #  define _Locale_SPACE  _SPACE
       
   445 #  define _Locale_PRINT  _PRINT
       
   446 #  define _Locale_ALPHA  _ALPHA
       
   447 #elif defined (_STLP_VXWORKS_TORNADO)
       
   448 #define _Locale_UPPER _C_UPPER   /* 0x01 */
       
   449 #define _Locale_LOWER _C_LOWER /* 0x02 */
       
   450 #define _Locale_DIGIT  _C_NUMBER   /* 0x04 */
       
   451 #define _Locale_SPACE  _C_WHITE_SPACE   /* 0x08 */
       
   452 #define _Locale_PUNCT _C_PUNCT   /* 0x10 */
       
   453 #define _Locale_CNTRL _C_CONTROL   /* 0x20 */
       
   454 #define _Locale_XDIGIT _C_HEX_NUMBER   /* 0x40 */
       
   455 #define _Locale_PRINT  (_C_B | _C_UPPER |  _C_LOWER | _C_NUMBER | _C_PUNCT)
       
   456 #define _Locale_ALPHA (_C_UPPER |  _C_LOWER) 
       
   457 #endif
       
   458 
       
   459 # endif /* _STLP_C_LOCALE_H */