Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Side by Side Diff: source/i18n/scriptset.cpp

Issue 845603002: Update ICU to 54.1 step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@master
Patch Set: remove unusued directories Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « source/i18n/scientificformathelper.cpp ('k') | source/i18n/sharedbreakiterator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 ********************************************************************** 2 **********************************************************************
3 * Copyright (C) 2013, International Business Machines 3 * Copyright (C) 2014, International Business Machines
4 * Corporation and others. All Rights Reserved. 4 * Corporation and others. All Rights Reserved.
5 ********************************************************************** 5 **********************************************************************
6 * 6 *
7 * scriptset.cpp 7 * scriptset.cpp
8 * 8 *
9 * created on: 2013 Jan 7 9 * created on: 2013 Jan 7
10 * created by: Andy Heninger 10 * created by: Andy Heninger
11 */ 11 */
12 12
13 #include "unicode/utypes.h" 13 #include "unicode/utypes.h"
14 14
15 #include "unicode/uchar.h" 15 #include "unicode/uchar.h"
16 #include "unicode/unistr.h" 16 #include "unicode/unistr.h"
17 17
18 #include "scriptset.h" 18 #include "scriptset.h"
19 #include "uassert.h" 19 #include "uassert.h"
20 #include "cmemory.h"
20 21
21 U_NAMESPACE_BEGIN 22 U_NAMESPACE_BEGIN
22 23
23 #define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0]))
24
25 //---------------------------------------------------------------------------- 24 //----------------------------------------------------------------------------
26 // 25 //
27 // ScriptSet implementation 26 // ScriptSet implementation
28 // 27 //
29 //---------------------------------------------------------------------------- 28 //----------------------------------------------------------------------------
30 ScriptSet::ScriptSet() { 29 ScriptSet::ScriptSet() {
31 for (uint32_t i=0; i<LENGTHOF(bits); i++) { 30 for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
32 bits[i] = 0; 31 bits[i] = 0;
33 } 32 }
34 } 33 }
35 34
36 ScriptSet::~ScriptSet() { 35 ScriptSet::~ScriptSet() {
37 } 36 }
38 37
39 ScriptSet::ScriptSet(const ScriptSet &other) { 38 ScriptSet::ScriptSet(const ScriptSet &other) {
40 *this = other; 39 *this = other;
41 } 40 }
42 41
43 42
44 ScriptSet & ScriptSet::operator =(const ScriptSet &other) { 43 ScriptSet & ScriptSet::operator =(const ScriptSet &other) {
45 for (uint32_t i=0; i<LENGTHOF(bits); i++) { 44 for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
46 bits[i] = other.bits[i]; 45 bits[i] = other.bits[i];
47 } 46 }
48 return *this; 47 return *this;
49 } 48 }
50 49
51 50
52 UBool ScriptSet::operator == (const ScriptSet &other) const { 51 UBool ScriptSet::operator == (const ScriptSet &other) const {
53 for (uint32_t i=0; i<LENGTHOF(bits); i++) { 52 for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
54 if (bits[i] != other.bits[i]) { 53 if (bits[i] != other.bits[i]) {
55 return FALSE; 54 return FALSE;
56 } 55 }
57 } 56 }
58 return TRUE; 57 return TRUE;
59 } 58 }
60 59
61 UBool ScriptSet::test(UScriptCode script, UErrorCode &status) const { 60 UBool ScriptSet::test(UScriptCode script, UErrorCode &status) const {
62 if (U_FAILURE(status)) { 61 if (U_FAILURE(status)) {
63 return FALSE; 62 return FALSE;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 } 95 }
97 uint32_t index = script / 32; 96 uint32_t index = script / 32;
98 uint32_t bit = 1 << (script & 31); 97 uint32_t bit = 1 << (script & 31);
99 bits[index] &= ~bit; 98 bits[index] &= ~bit;
100 return *this; 99 return *this;
101 } 100 }
102 101
103 102
104 103
105 ScriptSet &ScriptSet::Union(const ScriptSet &other) { 104 ScriptSet &ScriptSet::Union(const ScriptSet &other) {
106 for (uint32_t i=0; i<LENGTHOF(bits); i++) { 105 for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
107 bits[i] |= other.bits[i]; 106 bits[i] |= other.bits[i];
108 } 107 }
109 return *this; 108 return *this;
110 } 109 }
111 110
112 ScriptSet &ScriptSet::intersect(const ScriptSet &other) { 111 ScriptSet &ScriptSet::intersect(const ScriptSet &other) {
113 for (uint32_t i=0; i<LENGTHOF(bits); i++) { 112 for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
114 bits[i] &= other.bits[i]; 113 bits[i] &= other.bits[i];
115 } 114 }
116 return *this; 115 return *this;
117 } 116 }
118 117
119 ScriptSet &ScriptSet::intersect(UScriptCode script, UErrorCode &status) { 118 ScriptSet &ScriptSet::intersect(UScriptCode script, UErrorCode &status) {
120 ScriptSet t; 119 ScriptSet t;
121 t.set(script, status); 120 t.set(script, status);
122 if (U_SUCCESS(status)) { 121 if (U_SUCCESS(status)) {
123 this->intersect(t); 122 this->intersect(t);
124 } 123 }
125 return *this; 124 return *this;
126 } 125 }
127 126
128 UBool ScriptSet::intersects(const ScriptSet &other) const { 127 UBool ScriptSet::intersects(const ScriptSet &other) const {
129 for (uint32_t i=0; i<LENGTHOF(bits); i++) { 128 for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
130 if ((bits[i] & other.bits[i]) != 0) { 129 if ((bits[i] & other.bits[i]) != 0) {
131 return true; 130 return true;
132 } 131 }
133 } 132 }
134 return false; 133 return false;
135 } 134 }
136 135
137 UBool ScriptSet::contains(const ScriptSet &other) const { 136 UBool ScriptSet::contains(const ScriptSet &other) const {
138 ScriptSet t(*this); 137 ScriptSet t(*this);
139 t.intersect(other); 138 t.intersect(other);
140 return (t == other); 139 return (t == other);
141 } 140 }
142 141
143 142
144 ScriptSet &ScriptSet::setAll() { 143 ScriptSet &ScriptSet::setAll() {
145 for (uint32_t i=0; i<LENGTHOF(bits); i++) { 144 for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
146 bits[i] = 0xffffffffu; 145 bits[i] = 0xffffffffu;
147 } 146 }
148 return *this; 147 return *this;
149 } 148 }
150 149
151 150
152 ScriptSet &ScriptSet::resetAll() { 151 ScriptSet &ScriptSet::resetAll() {
153 for (uint32_t i=0; i<LENGTHOF(bits); i++) { 152 for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
154 bits[i] = 0; 153 bits[i] = 0;
155 } 154 }
156 return *this; 155 return *this;
157 } 156 }
158 157
159 int32_t ScriptSet::countMembers() const { 158 int32_t ScriptSet::countMembers() const {
160 // This bit counter is good for sparse numbers of '1's, which is 159 // This bit counter is good for sparse numbers of '1's, which is
161 // very much the case that we will usually have. 160 // very much the case that we will usually have.
162 int32_t count = 0; 161 int32_t count = 0;
163 for (uint32_t i=0; i<LENGTHOF(bits); i++) { 162 for (uint32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
164 uint32_t x = bits[i]; 163 uint32_t x = bits[i];
165 while (x > 0) { 164 while (x > 0) {
166 count++; 165 count++;
167 x &= (x - 1); // and off the least significant one bit. 166 x &= (x - 1); // and off the least significant one bit.
168 } 167 }
169 } 168 }
170 return count; 169 return count;
171 } 170 }
172 171
173 int32_t ScriptSet::hashCode() const { 172 int32_t ScriptSet::hashCode() const {
174 int32_t hash = 0; 173 int32_t hash = 0;
175 for (int32_t i=0; i<LENGTHOF(bits); i++) { 174 for (int32_t i=0; i<UPRV_LENGTHOF(bits); i++) {
176 hash ^= bits[i]; 175 hash ^= bits[i];
177 } 176 }
178 return hash; 177 return hash;
179 } 178 }
180 179
181 int32_t ScriptSet::nextSetBit(int32_t fromIndex) const { 180 int32_t ScriptSet::nextSetBit(int32_t fromIndex) const {
182 // TODO: Wants a better implementation. 181 // TODO: Wants a better implementation.
183 if (fromIndex < 0) { 182 if (fromIndex < 0) {
184 return -1; 183 return -1;
185 } 184 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 uhash_hashScriptSet(const UElement key) { 266 uhash_hashScriptSet(const UElement key) {
268 icu::ScriptSet *s = static_cast<icu::ScriptSet *>(key.pointer); 267 icu::ScriptSet *s = static_cast<icu::ScriptSet *>(key.pointer);
269 return s->hashCode(); 268 return s->hashCode();
270 } 269 }
271 270
272 U_CAPI void U_EXPORT2 271 U_CAPI void U_EXPORT2
273 uhash_deleteScriptSet(void *obj) { 272 uhash_deleteScriptSet(void *obj) {
274 icu::ScriptSet *s = static_cast<icu::ScriptSet *>(obj); 273 icu::ScriptSet *s = static_cast<icu::ScriptSet *>(obj);
275 delete s; 274 delete s;
276 } 275 }
OLDNEW
« no previous file with comments | « source/i18n/scientificformathelper.cpp ('k') | source/i18n/sharedbreakiterator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698