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

Unified Diff: source/i18n/ucoleitr.cpp

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/i18n/ucol_res.cpp ('k') | source/i18n/ucurr.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/i18n/ucoleitr.cpp
diff --git a/source/i18n/ucoleitr.cpp b/source/i18n/ucoleitr.cpp
index e10c366a8f2d0d4809f19f4b9dd5b15f88100d3a..66b01727e7e878533ec322ed9ff0a9e9c272b552 100644
--- a/source/i18n/ucoleitr.cpp
+++ b/source/i18n/ucoleitr.cpp
@@ -1,6 +1,6 @@
/*
******************************************************************************
-* Copyright (C) 2001-2014, International Business Machines
+* Copyright (C) 2001-2015, International Business Machines
* Corporation and others. All Rights Reserved.
******************************************************************************
*
@@ -34,14 +34,10 @@ U_NAMESPACE_USE
#define DEFAULT_BUFFER_SIZE 16
#define BUFFER_GROW 8
-#define ARRAY_SIZE(array) (sizeof array / sizeof array[0])
-
#define ARRAY_COPY(dst, src, count) uprv_memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0])
#define NEW_ARRAY(type, count) (type *) uprv_malloc((count) * sizeof(type))
-#define GROW_ARRAY(array, newSize) uprv_realloc((void *) (array), (newSize) * sizeof (array)[0])
-
#define DELETE_ARRAY(array) uprv_free((void *) (array))
struct RCEI
@@ -63,8 +59,8 @@ struct RCEBuffer
RCEBuffer();
~RCEBuffer();
- UBool empty() const;
- void put(uint32_t ce, int32_t ixLow, int32_t ixHigh);
+ UBool isEmpty() const;
+ void put(uint32_t ce, int32_t ixLow, int32_t ixHigh, UErrorCode &errorCode);
const RCEI *get();
};
@@ -82,15 +78,22 @@ RCEBuffer::~RCEBuffer()
}
}
-UBool RCEBuffer::empty() const
+UBool RCEBuffer::isEmpty() const
{
return bufferIndex <= 0;
}
-void RCEBuffer::put(uint32_t ce, int32_t ixLow, int32_t ixHigh)
+void RCEBuffer::put(uint32_t ce, int32_t ixLow, int32_t ixHigh, UErrorCode &errorCode)
{
+ if (U_FAILURE(errorCode)) {
+ return;
+ }
if (bufferIndex >= bufferSize) {
RCEI *newBuffer = NEW_ARRAY(RCEI, bufferSize + BUFFER_GROW);
+ if (newBuffer == NULL) {
+ errorCode = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
ARRAY_COPY(newBuffer, buffer, bufferSize);
@@ -137,15 +140,22 @@ void PCEBuffer::reset()
bufferIndex = 0;
}
-UBool PCEBuffer::empty() const
+UBool PCEBuffer::isEmpty() const
{
return bufferIndex <= 0;
}
-void PCEBuffer::put(uint64_t ce, int32_t ixLow, int32_t ixHigh)
+void PCEBuffer::put(uint64_t ce, int32_t ixLow, int32_t ixHigh, UErrorCode &errorCode)
{
+ if (U_FAILURE(errorCode)) {
+ return;
+ }
if (bufferIndex >= bufferSize) {
PCEI *newBuffer = NEW_ARRAY(PCEI, bufferSize + BUFFER_GROW);
+ if (newBuffer == NULL) {
+ errorCode = U_MEMORY_ALLOCATION_ERROR;
+ return;
+ }
ARRAY_COPY(newBuffer, buffer, bufferSize);
@@ -381,7 +391,7 @@ UCollationPCE::previousProcessed(
// pceBuffer.reset();
- while (pceBuffer.empty()) {
+ while (pceBuffer.isEmpty()) {
// buffer raw CEs up to non-ignorable primary
RCEBuffer rceb;
int32_t ce;
@@ -393,30 +403,33 @@ UCollationPCE::previousProcessed(
low = cei->getOffset();
if (ce == UCOL_NULLORDER) {
- if (! rceb.empty()) {
+ if (!rceb.isEmpty()) {
break;
}
goto finish;
}
- rceb.put((uint32_t)ce, low, high);
- } while ((ce & UCOL_PRIMARYORDERMASK) == 0 || isContinuation(ce));
+ rceb.put((uint32_t)ce, low, high, *status);
+ } while (U_SUCCESS(*status) && ((ce & UCOL_PRIMARYORDERMASK) == 0 || isContinuation(ce)));
// process the raw CEs
- while (! rceb.empty()) {
+ while (U_SUCCESS(*status) && !rceb.isEmpty()) {
const RCEI *rcei = rceb.get();
result = processCE(rcei->ce);
if (result != UCOL_IGNORABLE) {
- pceBuffer.put(result, rcei->low, rcei->high);
+ pceBuffer.put(result, rcei->low, rcei->high, *status);
}
}
+ if (U_FAILURE(*status)) {
+ return UCOL_PROCESSED_NULLORDER;
+ }
}
finish:
- if (pceBuffer.empty()) {
+ if (pceBuffer.isEmpty()) {
// **** Is -1 the right value for ixLow, ixHigh? ****
if (ixLow != NULL) {
*ixLow = -1;
« no previous file with comments | « source/i18n/ucol_res.cpp ('k') | source/i18n/ucurr.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698