1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 483a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* Copyright (C) 2002-2011, International Business Machines 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 883a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* file name: uset.cpp 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_removeAllStrings(USet* set) { 154b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru ((UnicodeSet*) set)->UnicodeSet::removeAllStrings(); 155b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru} 156b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_isEmpty(const USet* set) { 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::isEmpty(); 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_contains(const USet* set, UChar32 c) { 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::contains(c); 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_containsRange(const USet* set, UChar32 start, UChar32 end) { 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::contains(start, end); 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_containsString(const USet* set, const UChar* str, int32_t strLen) { 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s(strLen==-1, str, strLen); 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::contains(s); 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_containsAll(const USet* set1, const USet* set2) { 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set1)->UnicodeSet::containsAll(* (const UnicodeSet*) set2); 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_containsAllCodePoints(const USet* set, const UChar *str, int32_t strLen) { 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Create a string alias, since nothing is being added to the set. 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString s(strLen==-1, str, strLen); 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::containsAll(s); 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_containsNone(const USet* set1, const USet* set2) { 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set1)->UnicodeSet::containsNone(* (const UnicodeSet*) set2); 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_containsSome(const USet* set1, const USet* set2) { 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set1)->UnicodeSet::containsSome(* (const UnicodeSet*) set2); 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_span(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition) { 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::span(s, length, spanCondition); 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_spanBack(const USet *set, const UChar *s, int32_t length, USetSpanCondition spanCondition) { 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::spanBack(s, length, spanCondition); 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_spanUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition) { 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::spanUTF8(s, length, spanCondition); 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_spanBackUTF8(const USet *set, const char *s, int32_t length, USetSpanCondition spanCondition) { 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::spanBackUTF8(s, length, spanCondition); 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_equals(const USet* set1, const USet* set2) { 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return *(const UnicodeSet*)set1 == *(const UnicodeSet*)set2; 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_indexOf(const USet* set, UChar32 c) { 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::indexOf(c); 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UChar32 U_EXPORT2 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_charAt(const USet* set, int32_t index) { 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((UnicodeSet*) set)->UnicodeSet::charAt(index); 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_size(const USet* set) { 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::size(); 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This class only exists to provide access to the UnicodeSet private 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * USet support API. Declaring a class a friend is more portable than 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * trying to declare extern "C" functions as friends. 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass USetAccess /* not : public UObject because all methods are static */ { 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Try to have the compiler inline these*/ 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline static int32_t getStringCount(const UnicodeSet& set) { 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return set.getStringCount(); 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru inline static const UnicodeString* getString(const UnicodeSet& set, 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i) { 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return set.getString(i); 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* do not instantiate*/ 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USetAccess(); 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_getItemCount(const USet* uset) { 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeSet& set = *(const UnicodeSet*)uset; 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return set.getRangeCount() + USetAccess::getStringCount(set); 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_getItem(const USet* uset, int32_t itemIndex, 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32* start, UChar32* end, 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar* str, int32_t strCapacity, 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode* ec) { 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (U_FAILURE(*ec)) return 0; 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeSet& set = *(const UnicodeSet*)uset; 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t rangeCount; 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (itemIndex < 0) { 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *ec = U_ILLEGAL_ARGUMENT_ERROR; 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -1; 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (itemIndex < (rangeCount = set.getRangeCount())) { 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *start = set.getRangeStart(itemIndex); 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *end = set.getRangeEnd(itemIndex); 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru itemIndex -= rangeCount; 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (itemIndex < USetAccess::getStringCount(set)) { 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString* s = USetAccess::getString(set, itemIndex); 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return s->extract(str, strCapacity, *ec); 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *ec = U_INDEX_OUTOFBOUNDS_ERROR; 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -1; 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//U_CAPI int32_t U_EXPORT2 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//uset_getRangeCount(const USet* set) { 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return ((const UnicodeSet*) set)->getRangeCount(); 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//} 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//U_CAPI UBool U_EXPORT2 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//uset_getRange(const USet* set, int32_t rangeIndex, 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// UChar32* pStart, UChar32* pEnd) { 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if ((uint32_t) rangeIndex >= (uint32_t) uset_getRangeCount(set)) { 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return FALSE; 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// const UnicodeSet* us = (const UnicodeSet*) set; 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *pStart = us->getRangeStart(rangeIndex); 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *pEnd = us->getRangeEnd(rangeIndex); 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return TRUE; 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//} 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Serialize a USet into 16-bit units. 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Store BMP code points as themselves with one 16-bit unit each. 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Important: the code points in the array are in ascending order, 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * therefore all BMP code points precede all supplementary code points. 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Store each supplementary code point in 2 16-bit units, 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * simply with higher-then-lower 16-bit halfs. 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Precede the entire list with the length. 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If there are supplementary code points, then set bit 15 in the length 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and add the bmpLength between it and the array. 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * In other words: 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - all BMP: (length=bmpLength) BMP, .., BMP 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * - some supplementary: (length|0x8000) (bmpLength<length) BMP, .., BMP, supp-high, supp-low, .. 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_serialize(const USet* set, uint16_t* dest, int32_t destCapacity, UErrorCode* ec) { 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (ec==NULL || U_FAILURE(*ec)) { 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((const UnicodeSet*) set)->UnicodeSet::serialize(dest, destCapacity,* ec); 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_getSerializedSet(USerializedSet* fillSet, const uint16_t* src, int32_t srcLength) { 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t length; 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fillSet==NULL) { 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(src==NULL || srcLength<=0) { 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=fillSet->bmpLength=0; 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=*src++; 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(length&0x8000) { 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* there are supplementary values */ 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length&=0x7fff; 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(srcLength<(2+length)) { 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=fillSet->bmpLength=0; 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->bmpLength=*src++; 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* only BMP values */ 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(srcLength<(1+length)) { 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=fillSet->bmpLength=0; 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->bmpLength=length; 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->array=src; 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=length; 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_setSerializedToOne(USerializedSet* fillSet, UChar32 c) { 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(fillSet==NULL || (uint32_t)c>0x10ffff) { 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->array=fillSet->staticArray; 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(c<0xffff) { 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->bmpLength=fillSet->length=2; 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[0]=(uint16_t)c; 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[1]=(uint16_t)c+1; 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(c==0xffff) { 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->bmpLength=1; 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=3; 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[0]=0xffff; 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[1]=1; 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[2]=0; 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(c<0x10ffff) { 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->bmpLength=0; 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=4; 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[0]=(uint16_t)(c>>16); 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[1]=(uint16_t)c; 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ++c; 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[2]=(uint16_t)(c>>16); 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[3]=(uint16_t)c; 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else /* c==0x10ffff */ { 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->bmpLength=0; 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->length=2; 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[0]=0x10; 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru fillSet->staticArray[1]=0xffff; 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_serializedContains(const USerializedSet* set, UChar32 c) { 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint16_t* array; 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(set==NULL || (uint32_t)c>0x10ffff) { 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru array=set->array; 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(c<=0xffff) { 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* find c in the BMP part */ 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lo = 0; 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hi = set->bmpLength-1; 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (c < array[0]) { 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hi = 0; 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (c < array[hi]) { 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for(;;) { 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = (lo + hi) >> 1; 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i == lo) { 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; // Done! 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (c < array[i]) { 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hi = i; 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lo = i; 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hi += 1; 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(hi&1); 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* find c in the supplementary part */ 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint16_t high=(uint16_t)(c>>16), low=(uint16_t)c; 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t base = set->bmpLength; 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t lo = 0; 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t hi = set->length - 2 - base; 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (high < array[base] || (high==array[base] && low<array[base+1])) { 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hi = 0; 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (high < array[base+hi] || (high==array[base+hi] && low<array[base+hi+1])) { 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru for (;;) { 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t i = ((lo + hi) >> 1) & ~1; // Guarantee even result 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t iabs = i + base; 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if (i == lo) { 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; // Done! 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if (high < array[iabs] || (high==array[iabs] && low<array[iabs+1])) { 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hi = i; 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru lo = i; 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru hi += 2; 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* count pairs of 16-bit units even per BMP and check if the number of pairs is odd */ 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(((hi+(base<<1))&2)!=0); 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_getSerializedRangeCount(const USerializedSet* set) { 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(set==NULL) { 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (set->bmpLength+(set->length-set->bmpLength)/2+1)/2; 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuset_getSerializedRange(const USerializedSet* set, int32_t rangeIndex, 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar32* pStart, UChar32* pEnd) { 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const uint16_t* array; 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t bmpLength, length; 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(set==NULL || rangeIndex<0 || pStart==NULL || pEnd==NULL) { 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru array=set->array; 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length=set->length; 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru bmpLength=set->bmpLength; 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rangeIndex*=2; /* address start/limit pairs */ 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rangeIndex<bmpLength) { 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pStart=array[rangeIndex++]; 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rangeIndex<bmpLength) { 49250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *pEnd=array[rangeIndex]-1; 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(rangeIndex<length) { 49450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *pEnd=((((int32_t)array[rangeIndex])<<16)|array[rangeIndex+1])-1; 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 49650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *pEnd=0x10ffff; 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rangeIndex-=bmpLength; 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rangeIndex*=2; /* address pairs of pairs of units */ 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru length-=bmpLength; 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rangeIndex<length) { 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru array+=bmpLength; 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pStart=(((int32_t)array[rangeIndex])<<16)|array[rangeIndex+1]; 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru rangeIndex+=2; 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(rangeIndex<length) { 50850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *pEnd=((((int32_t)array[rangeIndex])<<16)|array[rangeIndex+1])-1; 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 51050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *pEnd=0x10ffff; 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// TODO The old, internal uset.c had an efficient uset_containsOne function. 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Returned the one and only code point, or else -1 or something. 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// Consider adding such a function to both C and C++ UnicodeSet/uset. 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// See tools/gennorm/store.c for usage, now usetContainsOne there. 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// TODO Investigate incorporating this code into UnicodeSet to improve 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// efficiency. 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// --- 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// #define USET_GROW_DELTA 20 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 52983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius// static int32_t 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// findChar(const UChar32* array, int32_t length, UChar32 c) { 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// int32_t i; 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* check the last range limit first for more efficient appending */ 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(length>0) { 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(c>=array[length-1]) { 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return length; 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* do not check the last range limit again in the loop below */ 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// --length; 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// for(i=0; i<length && c>=array[i]; ++i) {} 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return i; 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// static UBool 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// addRemove(USet* set, UChar32 c, int32_t doRemove) { 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// int32_t i, length, more; 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(set==NULL || (uint32_t)c>0x10ffff) { 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return FALSE; 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// length=set->length; 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// i=findChar(set->array, length, c); 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if((i&1)^doRemove) { 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* c is already in the set */ 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return TRUE; 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* how many more array items do we need? */ 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(i<length && (c+1)==set->array[i]) { 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* c is just before the following range, extend that in-place by one */ 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->array[i]=c; 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(i>0) { 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// --i; 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(c==set->array[i]) { 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* the previous range collapsed, remove it */ 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->length=length-=2; 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(i<length) { 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uprv_memmove(set->array+i, set->array+i+2, (length-i)*4); 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return TRUE; 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } else if(i>0 && c==set->array[i-1]) { 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* c is just after the previous range, extend that in-place by one */ 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(++c<=0x10ffff) { 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->array[i-1]=c; 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(i<length && c==set->array[i]) { 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* the following range collapsed, remove it */ 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// --i; 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->length=length-=2; 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(i<length) { 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uprv_memmove(set->array+i, set->array+i+2, (length-i)*4); 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } else { 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* extend the previous range (had limit 0x10ffff) to the end of Unicode */ 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->length=i-1; 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return TRUE; 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } else if(i==length && c==0x10ffff) { 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* insert one range limit c */ 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// more=1; 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } else { 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* insert two range limits c, c+1 */ 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// more=2; 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* insert <more> range limits */ 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(length+more>set->capacity) { 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// /* reallocate */ 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// int32_t newCapacity=set->capacity+set->capacity/2+USET_GROW_DELTA; 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// UChar32* newArray=(UChar32* )uprv_malloc(newCapacity*4); 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(newArray==NULL) { 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return FALSE; 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->capacity=newCapacity; 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uprv_memcpy(newArray, set->array, length*4); 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(set->array!=set->staticBuffer) { 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uprv_free(set->array); 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->array=newArray; 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(i<length) { 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uprv_memmove(set->array+i+more, set->array+i, (length-i)*4); 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->array[i]=c; 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// if(more==2) { 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->array[i+1]=c+1; 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// set->length+=more; 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return TRUE; 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// U_CAPI UBool U_EXPORT2 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uset_add(USet* set, UChar32 c) { 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// return addRemove(set, c, 0); 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// U_CAPI void U_EXPORT2 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// uset_remove(USet* set, UChar32 c) { 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// addRemove(set, c, 1); 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// } 640