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