ICU 78.2: common/unicode/umachine.h File Reference

ICU 78.2 78.2

Macros | Typedefs
umachine.h File Reference

Basic types and constants for UTF. More...

`#include "unicode/ptypes.h"`
`#include <stdbool.h>`
`#include <stddef.h>`
`#include "unicode/urename.h"`

Go to the source code of this file.

## Macros
#define | U_CFUNC extern
| This is used in a declaration of a library private ICU C function. More...
#define | U_CDECL_BEGIN
| This is used to begin a declaration of a library private ICU C API. More...
#define | U_CDECL_END
| This is used to end a declaration of a library private ICU C API. More...
#define | U_ATTRIBUTE_DEPRECATED
| This is used for GCC specific attributes. More...
#define | U_CAPI U_CFUNC U_EXPORT
| This is used to declare a function as a public ICU C API. More...
#define | U_STABLE U_CAPI
| Obsolete/same as U_CAPI; was used to declare a function as a stable public ICU C API.
#define | U_DRAFT U_CAPI
| Obsolete/same as U_CAPI; was used to declare a function as a draft public ICU C API
#define | U_DEPRECATED U_CAPI U_ATTRIBUTE_DEPRECATED
| This is used to declare a function as a deprecated public ICU C API
#define | U_OBSOLETE U_CAPI
| Obsolete/same as U_CAPI; was used to declare a function as an obsolete public ICU C API
#define | U_INTERNAL U_CAPI
| Obsolete/same as U_CAPI; was used to declare a function as an internal ICU C API
#define | U_FORCE_INLINE inline
| Forces function inlining on compilers that are known to support it. More...
#define | UPRV_BLOCK_MACRO_BEGIN do
| Defined as the "do" keyword by default. More...
#define | UPRV_BLOCK_MACRO_END while (false)
| Defined as "while (false)" by default. More...
#define | INT8_MIN ((int8_t)(-128))
| The smallest value an 8 bit signed integer can hold. More...
#define | INT16_MIN ((int16_t)(-32767-1))
| The smallest value a 16 bit signed integer can hold. More...
#define | INT32_MIN ((int32_t)(-2147483647-1))
| The smallest value a 32 bit signed integer can hold. More...
#define | INT8_MAX ((int8_t)(127))
| The largest value an 8 bit signed integer can hold. More...
#define | INT16_MAX ((int16_t)(32767))
| The largest value a 16 bit signed integer can hold. More...
#define | INT32_MAX ((int32_t)(2147483647))
| The largest value a 32 bit signed integer can hold. More...
#define | UINT8_MAX ((uint8_t)(255U))
| The largest value an 8 bit unsigned integer can hold. More...
#define | UINT16_MAX ((uint16_t)(65535U))
| The largest value a 16 bit unsigned integer can hold. More...
#define | UINT32_MAX ((uint32_t)(4294967295U))
| The largest value a 32 bit unsigned integer can hold. More...
#define | INT64_C(c) c ## LL
| Provides a platform independent way to specify a signed 64-bit integer constant. More...
#define | UINT64_C(c) c ## ULL
| Provides a platform independent way to specify an unsigned 64-bit integer constant. More...
#define | U_INT64_MIN ((int64_t)(INT64_C(-9223372036854775807)-1))
| The smallest value a 64 bit signed integer can hold. More...
#define | U_INT64_MAX ((int64_t)(INT64_C(9223372036854775807)))
| The largest value a 64 bit signed integer can hold. More...
#define | U_UINT64_MAX ((uint64_t)(UINT64_C(18446744073709551615)))
| The largest value a 64 bit unsigned integer can hold. More...
#define | U_DEFINE_FALSE_AND_TRUE 0
| Normally turns off defining macros FALSE=0 & TRUE=1 in public ICU headers. More...
#define | TRUE 1
| The TRUE value of a UBool. More...
#define | FALSE 0
| The FALSE value of a UBool. More...
#define | U_SIZEOF_UCHAR 2
| Number of bytes in a UChar (always 2). More...
#define | U_CHAR16_IS_TYPEDEF 0
| If 1, then char16_t is a typedef and not a real type (yet) More...
#define | U_SENTINEL (-1)
| This value is intended for sentinel values for APIs that (take or) return single code points (UChar32). More...

## Typedefs
typedef int8_t | UBool
| The ICU boolean type, a signed-byte integer. More...
typedef char16_t | UChar
| The base type for UTF-16 code units and pointers. More...
typedef uint16_t | OldUChar
| Default ICU 58 definition of UChar. More...
typedef int32_t | UChar32
| Define UChar32 as a type for single Unicode code points. More...

## Detailed Description

Basic types and constants for UTF.

## Basic types and constants for UTF

This file defines basic types and constants for utf.h to be platform-independent. umachine.h and utf.h are included into utypes.h to provide all the general definitions for ICU. All of these definitions used to be in utypes.h before the UTF-handling macros made this unmaintainable.

Definition in file umachine.h.

## Macro Definition Documentation

## ◆ FALSE

#define FALSE 0

The FALSE value of a UBool.

Deprecated:
  ICU 68 Use standard "false" instead.

Definition at line 305 of file umachine.h.

## ◆ INT16_MAX

#define INT16_MAX ((int16_t)(32767))

The largest value a 16 bit signed integer can hold.

Stable:
  ICU 2.0

Definition at line 204 of file umachine.h.

## ◆ INT16_MIN

#define INT16_MIN ((int16_t)(-32767-1))

The smallest value a 16 bit signed integer can hold.

Stable:
  ICU 2.0

Definition at line 191 of file umachine.h.

## ◆ INT32_MAX

#define INT32_MAX ((int32_t)(2147483647))

The largest value a 32 bit signed integer can hold.

Stable:
  ICU 2.0

Definition at line 208 of file umachine.h.

## ◆ INT32_MIN

#define INT32_MIN ((int32_t)(-2147483647-1))

The smallest value a 32 bit signed integer can hold.

Stable:
  ICU 2.0

Definition at line 195 of file umachine.h.

## ◆ INT64_C

#define INT64_C | ( |  | c | ) | c ## LL

Provides a platform independent way to specify a signed 64-bit integer constant.

note: may be wrong for some 64 bit platforms - ensure your compiler provides INT64_C

Stable:
  ICU 2.8

Definition at line 233 of file umachine.h.

## ◆ INT8_MAX

#define INT8_MAX ((int8_t)(127))

The largest value an 8 bit signed integer can hold.

Stable:
  ICU 2.0

Definition at line 200 of file umachine.h.

## ◆ INT8_MIN

#define INT8_MIN ((int8_t)(-128))

The smallest value an 8 bit signed integer can hold.

Stable:
  ICU 2.0

Definition at line 187 of file umachine.h.

## ◆ TRUE

#define TRUE 1

The TRUE value of a UBool.

Deprecated:
  ICU 68 Use standard "true" instead.

Definition at line 297 of file umachine.h.

## ◆ U_ATTRIBUTE_DEPRECATED

#define U_ATTRIBUTE_DEPRECATED

This is used for GCC specific attributes.

Internal:
  Do not use.

This API is for internal use only.

Definition at line 105 of file umachine.h.

## ◆ U_CAPI

#define U_CAPI U_CFUNC U_EXPORT

This is used to declare a function as a public ICU C API.

Stable:
  ICU 2.0

Definition at line 110 of file umachine.h.

## ◆ U_CDECL_BEGIN

#define U_CDECL_BEGIN

This is used to begin a declaration of a library private ICU C API.

Stable:
  ICU 2.4

Definition at line 85 of file umachine.h.

## ◆ U_CDECL_END

#define U_CDECL_END

This is used to end a declaration of a library private ICU C API.

Stable:
  ICU 2.4

Definition at line 86 of file umachine.h.

## ◆ U_CFUNC

#define U_CFUNC extern

This is used in a declaration of a library private ICU C function.

Stable:
  ICU 2.4

Definition at line 84 of file umachine.h.

## ◆ U_CHAR16_IS_TYPEDEF

#define U_CHAR16_IS_TYPEDEF 0

If 1, then char16_t is a typedef and not a real type (yet)

Internal:
  Do not use.

This API is for internal use only.

Definition at line 364 of file umachine.h.

## ◆ U_DEFINE_FALSE_AND_TRUE

#define U_DEFINE_FALSE_AND_TRUE 0

Normally turns off defining macros FALSE=0 & TRUE=1 in public ICU headers.

These obsolete macros sometimes break compilation of other code that defines enum constants or similar with these names. C++ has long defined bool/false/true. C99 also added definitions for these, although as macros; see stdbool.h.

You may transitionally define U_DEFINE_FALSE_AND_TRUE=1 if you need time to migrate code.

Internal:
  Do not use. This API is for internal use only. ICU 68

Definition at line 287 of file umachine.h.

## ◆ U_FORCE_INLINE

#define U_FORCE_INLINE inline

Forces function inlining on compilers that are known to support it.

Place this before specifiers like "static" and "explicit".

This does not replace the "inline" keyword which suspends the One Definition Rule (ODR) in addition to optionally serving as an inlining hint to the compiler.

Internal:
  Do not use. This API is for internal use only.

Definition at line 135 of file umachine.h.

## ◆ U_INT64_MAX

#define U_INT64_MAX ((int64_t)(INT64_C(9223372036854775807)))

The largest value a 64 bit signed integer can hold.

Stable:
  ICU 2.8

Definition at line 249 of file umachine.h.

## ◆ U_INT64_MIN

#define U_INT64_MIN ((int64_t)(INT64_C(-9223372036854775807)-1))

The smallest value a 64 bit signed integer can hold.

Stable:
  ICU 2.8

Definition at line 245 of file umachine.h.

## ◆ U_SENTINEL

#define U_SENTINEL (-1)

This value is intended for sentinel values for APIs that (take or) return single code points (UChar32).

It is outside of the Unicode code point range 0..0x10ffff.

For example, a "done" or "error" value in a new API could be indicated with U_SENTINEL.

ICU APIs designed before ICU 2.4 usually define service-specific "done" values, mostly 0xffff. Those may need to be distinguished from actual U+ffff text contents by calling functions like CharacterIterator::hasNext() or UnicodeString::length().

Returns
  -1

See also
  UChar32

Stable:
  ICU 2.4

Definition at line 469 of file umachine.h.

## ◆ U_SIZEOF_UCHAR

#define U_SIZEOF_UCHAR 2

Number of bytes in a UChar (always 2).

Stable:
  ICU 2.0

Definition at line 352 of file umachine.h.

## ◆ U_UINT64_MAX

#define U_UINT64_MAX ((uint64_t)(UINT64_C(18446744073709551615)))

The largest value a 64 bit unsigned integer can hold.

Stable:
  ICU 2.8

Definition at line 253 of file umachine.h.

## ◆ UINT16_MAX

#define UINT16_MAX ((uint16_t)(65535U))

The largest value a 16 bit unsigned integer can hold.

Stable:
  ICU 2.0

Definition at line 217 of file umachine.h.

## ◆ UINT32_MAX

#define UINT32_MAX ((uint32_t)(4294967295U))

The largest value a 32 bit unsigned integer can hold.

Stable:
  ICU 2.0

Definition at line 221 of file umachine.h.

## ◆ UINT64_C

#define UINT64_C | ( |  | c | ) | c ## ULL

Provides a platform independent way to specify an unsigned 64-bit integer constant.

note: may be wrong for some 64 bit platforms - ensure your compiler provides UINT64_C

Stable:
  ICU 2.8

Definition at line 241 of file umachine.h.

## ◆ UINT8_MAX

#define UINT8_MAX ((uint8_t)(255U))

The largest value an 8 bit unsigned integer can hold.

Stable:
  ICU 2.0

Definition at line 213 of file umachine.h.

## ◆ UPRV_BLOCK_MACRO_BEGIN

#define UPRV_BLOCK_MACRO_BEGIN do

Defined as the "do" keyword by default.

Internal:
  Do not use. This API is for internal use only.

Definition at line 169 of file umachine.h.

## ◆ UPRV_BLOCK_MACRO_END

#define UPRV_BLOCK_MACRO_END while (false)

Defined as "while (false)" by default.

Internal:
  Do not use. This API is for internal use only.

Definition at line 178 of file umachine.h.

## Typedef Documentation

## ◆ OldUChar

OldUChar

Default ICU 58 definition of UChar.

A base type for UTF-16 code units and pointers. Unsigned 16-bit integer.

Define OldUChar to be wchar_t if that is 16 bits wide. If wchar_t is not 16 bits wide, then define UChar to be uint16_t.

This makes the definition of OldUChar platform-dependent but allows direct string type compatibility with platforms with 16-bit wchar_t types.

This is how UChar was defined in ICU 58, for transition convenience. Exception: ICU 58 UChar was defined to UCHAR_TYPE if that macro was defined. The current UChar responds to UCHAR_TYPE but OldUChar does not.

Stable:
  ICU 59

Definition at line 429 of file umachine.h.

## ◆ UBool

typedef int8_t UBool

The ICU boolean type, a signed-byte integer.

ICU-specific for historical reasons: The C and C++ standards used to not define type bool. Also provides a fixed type definition, as opposed to type bool whose details (e.g., sizeof) may vary by compiler and between C and C++.

Stable:
  ICU 2.0

Definition at line 269 of file umachine.h.

## ◆ UChar

UChar

The base type for UTF-16 code units and pointers.

Unsigned 16-bit integer. Starting with ICU 59, C++ API uses char16_t directly, while C API continues to use UChar.

UChar is configurable by defining the macro UCHAR_TYPE on the preprocessor or compiler command line: -DUCHAR_TYPE=uint16_t or -DUCHAR_TYPE=wchar_t (if U_SIZEOF_WCHAR_T==2) etc. (The UCHAR_TYPE can also be #defined earlier in this file, for outside the ICU library code.) This is for transitional use from application code that uses uint16_t or wchar_t for UTF-16.

The default is UChar=char16_t.

C++11 defines char16_t as bit-compatible with uint16_t, but as a distinct type.

In C, char16_t is a simple typedef of uint_least16_t. ICU requires uint_least16_t=uint16_t for data memory mapping. On macOS, char16_t is not available because the uchar.h standard header is missing.

Stable:
  ICU 4.4

Definition at line 400 of file umachine.h.

## ◆ UChar32

typedef int32_t UChar32

Define UChar32 as a type for single Unicode code points.

UChar32 is a signed 32-bit integer (same as int32_t).

The Unicode code point range is 0..0x10ffff. All other values (negative or >=0x110000) are illegal as Unicode code points. They may be used as sentinel values to indicate "done", "error" or similar non-code point conditions.

Before ICU 2.4 (Jitterbug 2146), UChar32 was defined to be wchar_t if that is 32 bits wide (wchar_t may be signed or unsigned) or else to be uint32_t. That is, the definition of UChar32 was platform-dependent.

See also
  U_SENTINEL

Stable:
  ICU 2.4

Definition at line 449 of file umachine.h.