uset.cpp revision b13da9df870a61b11249bf741347908dbea0edd8
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Copyright (C) 2002-2007, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* file name: uset.c 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* encoding: US-ASCII 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* tab size: 8 (not used) 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* indentation:4 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created on: 2002mar07 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* created by: Markus W. Scherer 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* The serialized structure, the array of range limits, is 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* the same as in UnicodeSet, except that the HIGH value is not stored. 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* There are functions to efficiently serialize a USet into an array of uint16_t 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* and functions to use such a serialized form efficiently without 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* instantiating a new USet. 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uobject.h" 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uset.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uniset.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/ustring.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/parsepos.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_USE 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI USet* U_EXPORT2 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_open(UChar32 start, UChar32 end) { 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (USet*) new UnicodeSet(start, end); 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_close(USet* set) { 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru delete (UnicodeSet*) set; 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI USet * U_EXPORT2 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_clone(const USet *set) { 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (USet*) (((UnicodeSet*) set)->UnicodeSet::clone()); 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_isFrozen(const USet *set) { 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::isFrozen(); 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_freeze(USet *set) { 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::freeze(); 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI USet * U_EXPORT2 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_cloneAsThawed(const USet *set) { 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (USet*) (((UnicodeSet*) set)->UnicodeSet::cloneAsThawed()); 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_set(USet* set, 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32 start, UChar32 end) { 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::set(start, end); 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_addAll(USet* set, const USet *additionalSet) { 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::addAll(*((const UnicodeSet*)additionalSet)); 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_add(USet* set, UChar32 c) { 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::add(c); 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_addRange(USet* set, UChar32 start, UChar32 end) { 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::add(start, end); 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_addString(USet* set, const UChar* str, int32_t strLen) { 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // UnicodeString handles -1 for strLen 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s(strLen<0, str, strLen); 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::add(s); 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_addAllCodePoints(USet* set, const UChar *str, int32_t strLen) { 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // UnicodeString handles -1 for strLen 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s(str, strLen); 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::addAll(s); 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_remove(USet* set, UChar32 c) { 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::remove(c); 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_removeRange(USet* set, UChar32 start, UChar32 end) { 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::remove(start, end); 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_removeString(USet* set, const UChar* str, int32_t strLen) { 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s(strLen==-1, str, strLen); 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::remove(s); 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_removeAll(USet* set, const USet* remove) { 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::removeAll(*(const UnicodeSet*)remove); 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_retain(USet* set, UChar32 start, UChar32 end) { 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::retain(start, end); 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_retainAll(USet* set, const USet* retain) { 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::retainAll(*(const UnicodeSet*)retain); 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_compact(USet* set) { 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::compact(); 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_complement(USet* set) { 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::complement(); 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_complementAll(USet* set, const USet* complement) { 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::complementAll(*(const UnicodeSet*)complement); 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_clear(USet* set) { 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::clear(); 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_isEmpty(const USet* set) { 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::isEmpty(); 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_contains(const USet* set, UChar32 c) { 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::contains(c); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_containsRange(const USet* set, UChar32 start, UChar32 end) { 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::contains(start, end); 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_containsString(const USet* set, const UChar* str, int32_t strLen) { 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s(strLen==-1, str, strLen); 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::contains(s); 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_containsAll(const USet* set1, const USet* set2) { 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set1)->UnicodeSet::containsAll(* (const UnicodeSet*) set2); 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_containsAllCodePoints(const USet* set, const UChar *str, int32_t strLen) { 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Create a string alias, since nothing is being added to the set. 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s(strLen==-1, str, strLen); 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::containsAll(s); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_containsNone(const USet* set1, const USet* set2) { 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set1)->UnicodeSet::containsNone(* (const UnicodeSet*) set2); 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_containsSome(const USet* set1, const USet* set2) { 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set1)->UnicodeSet::containsSome(* (const UnicodeSet*) set2); 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition) { 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::span(s, length, spanCondition); 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition) { 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::spanBack(s, length, spanCondition); 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition) { 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::spanUTF8(s, length, spanCondition); 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition) { 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::spanBackUTF8(s, length, spanCondition); 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_equals(const USet* set1, const USet* set2) { 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return *(const UnicodeSet*)set1 == *(const UnicodeSet*)set2; 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_indexOf(const USet* set, UChar32 c) { 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::indexOf(c); 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UChar32 U_EXPORT2 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_charAt(const USet* set, int32_t index) { 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::charAt(index); 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_size(const USet* set) { 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::size(); 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This class only exists to provide access to the UnicodeSet private 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * USet support API. Declaring a class a friend is more portable than 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * trying to declare extern "C" functions as friends. 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass USetAccess /* not : public UObject because all methods are static */ { 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Try to have the compiler inline these*/ 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline static int32_t getStringCount(const UnicodeSet& set) { 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return set.getStringCount(); 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline static const UnicodeString* getString(const UnicodeSet& set, 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i) { 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return set.getString(i); 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* do not instantiate*/ 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USetAccess(); 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_getItemCount(const USet* uset) { 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeSet& set = *(const UnicodeSet*)uset; 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return set.getRangeCount() + USetAccess::getStringCount(set); 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_getItem(const USet* uset, int32_t itemIndex, 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32* start, UChar32* end, 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* str, int32_t strCapacity, 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode* ec) { 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(*ec)) return 0; 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeSet& set = *(const UnicodeSet*)uset; 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t rangeCount; 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (itemIndex < 0) { 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *ec = U_ILLEGAL_ARGUMENT_ERROR; 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -1; 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (itemIndex < (rangeCount = set.getRangeCount())) { 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *start = set.getRangeStart(itemIndex); 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *end = set.getRangeEnd(itemIndex); 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru itemIndex -= rangeCount; 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (itemIndex < USetAccess::getStringCount(set)) { 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString* s = USetAccess::getString(set, itemIndex); 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return s->extract(str, strCapacity, *ec); 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *ec = U_INDEX_OUTOFBOUNDS_ERROR; 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -1; 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//U_CAPI int32_t U_EXPORT2 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//uset_getRangeCount(const USet* set) { 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return ((const UnicodeSet*) set)->getRangeCount(); 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//} 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//U_CAPI UBool U_EXPORT2 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//uset_getRange(const USet* set, int32_t rangeIndex, 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// UChar32* pStart, UChar32* pEnd) { 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if ((uint32_t) rangeIndex >= (uint32_t) uset_getRangeCount(set)) { 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return FALSE; 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// const UnicodeSet* us = (const UnicodeSet*) set; 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *pStart = us->getRangeStart(rangeIndex); 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *pEnd = us->getRangeEnd(rangeIndex); 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return TRUE; 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//} 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Serialize a USet into 16-bit units. 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Store BMP code points as themselves with one 16-bit unit each. 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Important: the code points in the array are in ascending order, 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * therefore all BMP code points precede all supplementary code points. 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Store each supplementary code point in 2 16-bit units, 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * simply with higher-then-lower 16-bit halfs. 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Precede the entire list with the length. 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If there are supplementary code points, then set bit 15 in the length 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and add the bmpLength between it and the array. 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * In other words: 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - all BMP: (length=bmpLength) BMP, .., BMP 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - some supplementary: (length|0x8000) (bmpLength<length) BMP, .., BMP, supp-high, supp-low, .. 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_serialize(const USet* set, uint16_t* dest, int32_t destCapacity, UErrorCode* ec) { 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ec==NULL || U_FAILURE(*ec)) { 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::serialize(dest, destCapacity,* ec); 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_getSerializedSet(USerializedSet* fillSet, const uint16_t* src, int32_t srcLength) { 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fillSet==NULL) { 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(src==NULL || srcLength<=0) { 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=fillSet->bmpLength=0; 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=*src++; 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(length&0x8000) { 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* there are supplementary values */ 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length&=0x7fff; 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(srcLength<(2+length)) { 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=fillSet->bmpLength=0; 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->bmpLength=*src++; 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* only BMP values */ 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(srcLength<(1+length)) { 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=fillSet->bmpLength=0; 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->bmpLength=length; 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->array=src; 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=length; 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_setSerializedToOne(USerializedSet* fillSet, UChar32 c) { 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fillSet==NULL || (uint32_t)c>0x10ffff) { 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->array=fillSet->staticArray; 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(c<0xffff) { 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->bmpLength=fillSet->length=2; 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[0]=(uint16_t)c; 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[1]=(uint16_t)c+1; 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(c==0xffff) { 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->bmpLength=1; 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=3; 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[0]=0xffff; 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[1]=1; 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[2]=0; 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(c<0x10ffff) { 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->bmpLength=0; 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=4; 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[0]=(uint16_t)(c>>16); 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[1]=(uint16_t)c; 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ++c; 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[2]=(uint16_t)(c>>16); 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[3]=(uint16_t)c; 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else /* c==0x10ffff */ { 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->bmpLength=0; 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=2; 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[0]=0x10; 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[1]=0xffff; 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_serializedContains(const USerializedSet* set, UChar32 c) { 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint16_t* array; 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(set==NULL || (uint32_t)c>0x10ffff) { 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru array=set->array; 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(c<=0xffff) { 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* find c in the BMP part */ 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lo = 0; 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hi = set->bmpLength-1; 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c < array[0]) { 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hi = 0; 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (c < array[hi]) { 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(;;) { 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = (lo + hi) >> 1; 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i == lo) { 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; // Done! 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (c < array[i]) { 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hi = i; 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lo = i; 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hi += 1; 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(hi&1); 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* find c in the supplementary part */ 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint16_t high=(uint16_t)(c>>16), low=(uint16_t)c; 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t base = set->bmpLength; 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lo = 0; 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hi = set->length - 2 - base; 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (high < array[base] || (high==array[base] && low<array[base+1])) { 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hi = 0; 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (high < array[base+hi] || (high==array[base+hi] && low<array[base+hi+1])) { 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (;;) { 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = ((lo + hi) >> 1) & ~1; // Guarantee even result 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t iabs = i + base; 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i == lo) { 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; // Done! 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (high < array[iabs] || (high==array[iabs] && low<array[iabs+1])) { 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hi = i; 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lo = i; 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hi += 2; 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* count pairs of 16-bit units even per BMP and check if the number of pairs is odd */ 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(((hi+(base<<1))&2)!=0); 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_getSerializedRangeCount(const USerializedSet* set) { 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(set==NULL) { 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (set->bmpLength+(set->length-set->bmpLength)/2+1)/2; 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_getSerializedRange(const USerializedSet* set, int32_t rangeIndex, 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32* pStart, UChar32* pEnd) { 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint16_t* array; 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bmpLength, length; 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(set==NULL || rangeIndex<0 || pStart==NULL || pEnd==NULL) { 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru array=set->array; 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=set->length; 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bmpLength=set->bmpLength; 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rangeIndex*=2; /* address start/limit pairs */ 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rangeIndex<bmpLength) { 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pStart=array[rangeIndex++]; 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rangeIndex<bmpLength) { 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pEnd=array[rangeIndex]; 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(rangeIndex<length) { 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pEnd=(((int32_t)array[rangeIndex])<<16)|array[rangeIndex+1]; 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pEnd=0x110000; 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru --*pEnd; 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rangeIndex-=bmpLength; 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rangeIndex*=2; /* address pairs of pairs of units */ 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length-=bmpLength; 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rangeIndex<length) { 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru array+=bmpLength; 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pStart=(((int32_t)array[rangeIndex])<<16)|array[rangeIndex+1]; 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rangeIndex+=2; 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rangeIndex<length) { 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pEnd=(((int32_t)array[rangeIndex])<<16)|array[rangeIndex+1]; 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pEnd=0x110000; 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru --*pEnd; 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// TODO The old, internal uset.c had an efficient uset_containsOne function. 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Returned the one and only code point, or else -1 or something. 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Consider adding such a function to both C and C++ UnicodeSet/uset. 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// See tools/gennorm/store.c for usage, now usetContainsOne there. 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// TODO Investigate incorporating this code into UnicodeSet to improve 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// efficiency. 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// --- 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// #define USET_GROW_DELTA 20 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// static U_INLINE int32_t 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// findChar(const UChar32* array, int32_t length, UChar32 c) { 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// int32_t i; 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* check the last range limit first for more efficient appending */ 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(length>0) { 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(c>=array[length-1]) { 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return length; 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* do not check the last range limit again in the loop below */ 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// --length; 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// for(i=0; i<length && c>=array[i]; ++i) {} 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return i; 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// static UBool 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// addRemove(USet* set, UChar32 c, int32_t doRemove) { 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// int32_t i, length, more; 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(set==NULL || (uint32_t)c>0x10ffff) { 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return FALSE; 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// length=set->length; 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// i=findChar(set->array, length, c); 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if((i&1)^doRemove) { 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* c is already in the set */ 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return TRUE; 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* how many more array items do we need? */ 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(i<length && (c+1)==set->array[i]) { 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* c is just before the following range, extend that in-place by one */ 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->array[i]=c; 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(i>0) { 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// --i; 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(c==set->array[i]) { 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* the previous range collapsed, remove it */ 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->length=length-=2; 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(i<length) { 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uprv_memmove(set->array+i, set->array+i+2, (length-i)*4); 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return TRUE; 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } else if(i>0 && c==set->array[i-1]) { 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* c is just after the previous range, extend that in-place by one */ 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(++c<=0x10ffff) { 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->array[i-1]=c; 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(i<length && c==set->array[i]) { 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* the following range collapsed, remove it */ 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// --i; 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->length=length-=2; 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(i<length) { 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uprv_memmove(set->array+i, set->array+i+2, (length-i)*4); 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } else { 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* extend the previous range (had limit 0x10ffff) to the end of Unicode */ 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->length=i-1; 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return TRUE; 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } else if(i==length && c==0x10ffff) { 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* insert one range limit c */ 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// more=1; 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } else { 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* insert two range limits c, c+1 */ 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// more=2; 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* insert <more> range limits */ 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(length+more>set->capacity) { 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* reallocate */ 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// int32_t newCapacity=set->capacity+set->capacity/2+USET_GROW_DELTA; 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// UChar32* newArray=(UChar32* )uprv_malloc(newCapacity*4); 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(newArray==NULL) { 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return FALSE; 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->capacity=newCapacity; 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uprv_memcpy(newArray, set->array, length*4); 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(set->array!=set->staticBuffer) { 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uprv_free(set->array); 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->array=newArray; 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(i<length) { 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uprv_memmove(set->array+i+more, set->array+i, (length-i)*4); 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->array[i]=c; 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(more==2) { 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->array[i+1]=c+1; 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->length+=more; 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return TRUE; 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// U_CAPI UBool U_EXPORT2 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uset_add(USet* set, UChar32 c) { 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return addRemove(set, c, 0); 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// U_CAPI void U_EXPORT2 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uset_remove(USet* set, UChar32 c) { 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// addRemove(set, c, 1); 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 635