1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru**********************************************************************
3b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho*   Copyright (C) 1999-2011, International Business Machines
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Corporation and others.  All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru**********************************************************************
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   file name:  ustr_imp.h
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   encoding:   US-ASCII
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   tab size:   8 (not used)
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   indentation:4
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   created on: 2001jan30
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   created by: Markus W. Scherer
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef __USTR_IMP_H__
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define __USTR_IMP_H__
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uiter.h"
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucase.h"
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius/** Simple declaration to avoid including unicode/ubrk.h. */
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef UBRK_TYPEDEF_UBREAK_ITERATOR
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#   define UBRK_TYPEDEF_UBREAK_ITERATOR
2550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    typedef struct UBreakIterator UBreakIterator;
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#ifndef U_COMPARE_IGNORE_CASE
2950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* see also unorm.h */
3050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/**
3150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Option bit for unorm_compare:
3250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Perform case-insensitive comparison.
3350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */
3450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define U_COMPARE_IGNORE_CASE       0x10000
3550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
3650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/**
3850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Internal option for unorm_cmpEquivFold() for strncmp style.
3950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * If set, checks for both string length and terminating NUL.
4050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */
4150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define _STRNCMP_STYLE 0x1000
4250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Compare two strings in code point order or code unit order.
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Works in strcmp style (both lengths -1),
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * strncmp style (lengths equal and >=0, flag TRUE),
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and memcmp/UnicodeString style (at least one length >=0).
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
49c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste QueruU_CFUNC int32_t U_EXPORT2
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuprv_strCompare(const UChar *s1, int32_t length1,
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                const UChar *s2, int32_t length2,
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                UBool strncmpStyle, UBool codePointOrder);
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Internal API, used by u_strcasecmp() etc.
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Compare strings case-insensitively,
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in code point order or code unit order.
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC int32_t
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_strcmpFold(const UChar *s1, int32_t length1,
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             const UChar *s2, int32_t length2,
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             uint32_t options,
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             UErrorCode *pErrorCode);
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Are the Unicode properties loaded?
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This must be used before internal functions are called that do
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * not perform this check.
6950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * Generate a debug assertion failure if data is not loaded.
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC UBool
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuprv_haveProperties(UErrorCode *pErrorCode);
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  * Load the Unicode property data.
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  * Intended primarily for use from u_init().
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  * Has no effect if property data is already loaded.
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  * NOT thread safe.
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  */
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*U_CFUNC int8_t
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuprv_loadPropsData(UErrorCode *errorCode);*/
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Internal string casing functions implementing
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ustring.h/ustrcase.c and UnicodeString case mapping functions.
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct UCaseMap {
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const UCaseProps *csp;
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBreakIterator *iter;  /* We adopt the iterator, so we own it. */
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char locale[32];
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    int32_t locCache;
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    uint32_t options;
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef __UCASEMAP_H__
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef struct UCaseMap UCaseMap;
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
10283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#if UCONFIG_NO_BREAK_ITERATION
10383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#   define UCASEMAP_INITIALIZER { NULL, { 0 }, 0, 0 }
10483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#else
10583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#   define UCASEMAP_INITIALIZER { NULL, NULL, { 0 }, 0, 0 }
10683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#endif
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
10883a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_CFUNC void
10983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusustrcase_setTempCaseMapLocale(UCaseMap *csm, const char *locale);
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
11183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#ifndef U_STRING_CASE_MAPPER_DEFINED
11283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#define U_STRING_CASE_MAPPER_DEFINED
11383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
11483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius/**
11583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * String case mapping function type, used by ustrcase_map().
11683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * All error checking must be done.
11783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * The UCaseMap must be fully initialized, with locale and/or iter set as needed.
11883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * src and dest must not overlap.
11983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius */
12083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliustypedef int32_t U_CALLCONV
12183a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusUStringCaseMapper(const UCaseMap *csm,
12283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                  UChar *dest, int32_t destCapacity,
12383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                  const UChar *src, int32_t srcLength,
12483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                  UErrorCode *pErrorCode);
12583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
12683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#endif
12783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
12883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius/** Implements UStringCaseMapper. */
12983a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_CFUNC int32_t U_CALLCONV
13083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusustrcase_internalToLower(const UCaseMap *csm,
13183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                         UChar *dest, int32_t destCapacity,
13283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                         const UChar *src, int32_t srcLength,
13383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                         UErrorCode *pErrorCode);
13483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
13583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius/** Implements UStringCaseMapper. */
13683a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_CFUNC int32_t U_CALLCONV
13783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusustrcase_internalToUpper(const UCaseMap *csm,
13883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                         UChar *dest, int32_t destCapacity,
13983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                         const UChar *src, int32_t srcLength,
14083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                         UErrorCode *pErrorCode);
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_BREAK_ITERATION
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
14483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius/** Implements UStringCaseMapper. */
14583a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_CFUNC int32_t U_CALLCONV
14683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusustrcase_internalToTitle(const UCaseMap *csm,
14783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                         UChar *dest, int32_t destCapacity,
14883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                         const UChar *src, int32_t srcLength,
14983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                         UErrorCode *pErrorCode);
15083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
15183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#endif
15283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
15383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius/** Implements UStringCaseMapper. */
15483a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_CFUNC int32_t U_CALLCONV
15583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusustrcase_internalFold(const UCaseMap *csm,
15683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                      UChar *dest, int32_t destCapacity,
15783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                      const UChar *src, int32_t srcLength,
15883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                      UErrorCode *pErrorCode);
15983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
16083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius/**
16183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * Implements argument checking and buffer handling
16283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * for string case mapping as a common function.
16383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius */
164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC int32_t
16583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusustrcase_map(const UCaseMap *csm,
166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             UChar *dest, int32_t destCapacity,
167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             const UChar *src, int32_t srcLength,
16883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius             UStringCaseMapper *stringCaseMapper,
169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru             UErrorCode *pErrorCode);
170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
17183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius/**
17283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * UTF-8 string case mapping function type, used by ucasemap_mapUTF8().
17383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * UTF-8 version of UStringCaseMapper.
17483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * All error checking must be done.
17583a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * The UCaseMap must be fully initialized, with locale and/or iter set as needed.
17683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * src and dest must not overlap.
17783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius */
17883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliustypedef int32_t U_CALLCONV
17983a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusUTF8CaseMapper(const UCaseMap *csm,
18083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius               uint8_t *dest, int32_t destCapacity,
18183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius               const uint8_t *src, int32_t srcLength,
18283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius               UErrorCode *pErrorCode);
18383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
18483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius/** Implements UTF8CaseMapper. */
18583a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_CFUNC int32_t U_CALLCONV
18683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusucasemap_internalUTF8ToTitle(const UCaseMap *csm,
18783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius         uint8_t *dest, int32_t destCapacity,
18883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius         const uint8_t *src, int32_t srcLength,
18983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius         UErrorCode *pErrorCode);
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
19283a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * Implements argument checking and buffer handling
19383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius * for UTF-8 string case mapping as a common function.
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC int32_t
19683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusucasemap_mapUTF8(const UCaseMap *csm,
19783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                 uint8_t *dest, int32_t destCapacity,
19883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                 const uint8_t *src, int32_t srcLength,
19983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                 UTF8CaseMapper *stringCaseMapper,
20083a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius                 UErrorCode *pErrorCode);
20183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
20283a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_CAPI int32_t U_EXPORT2
20383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusustr_hashUCharsN(const UChar *str, int32_t length);
20483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
20583a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_CAPI int32_t U_EXPORT2
20683a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusustr_hashCharsN(const char *str, int32_t length);
20783a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius
20883a171d1a62abf406f7f44ae671823d5ec20db7dCraig CorneliusU_CAPI int32_t U_EXPORT2
20983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Corneliusustr_hashICharsN(const char *str, int32_t length);
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NUL-terminate a UChar * string if possible.
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If length  < destCapacity then NUL-terminate.
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If length == destCapacity then do not terminate but set U_STRING_NOT_TERMINATED_WARNING.
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If length  > destCapacity then do not terminate but set U_BUFFER_OVERFLOW_ERROR.
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param dest Destination buffer, can be NULL if destCapacity==0.
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param destCapacity Number of UChars available at dest.
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param length Number of UChars that were (to be) written to dest.
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pErrorCode ICU error code.
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return length
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_terminateUChars(UChar *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode);
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NUL-terminate a char * string if possible.
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Same as u_terminateUChars() but for a different string type.
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_terminateChars(char *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode);
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NUL-terminate a UChar32 * string if possible.
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Same as u_terminateUChars() but for a different string type.
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_terminateUChar32s(UChar32 *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode);
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NUL-terminate a wchar_t * string if possible.
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Same as u_terminateUChars() but for a different string type.
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_terminateWChars(wchar_t *dest, int32_t destCapacity, int32_t length, UErrorCode *pErrorCode);
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
248