ICU-6453 minor code improvements

X-SVN-Rev: 25857
This commit is contained in:
Markus Scherer 2009-04-21 23:38:15 +00:00
parent a2a9c893b2
commit 9808a30392
2 changed files with 23 additions and 12 deletions

View File

@ -33,8 +33,8 @@ struct UPropsVectors {
UBool isCompacted;
};
#define UPVEC_INITIAL_ROWS (1<<14)
#define UPVEC_MEDIUM_ROWS ((int32_t)1<<17)
#define UPVEC_INITIAL_ROWS (1<<12)
#define UPVEC_MEDIUM_ROWS ((int32_t)1<<16)
#define UPVEC_MAX_ROWS (UPVEC_MAX_CP+1)
U_CAPI UPropsVectors * U_EXPORT2
@ -212,13 +212,15 @@ upvec_setValue(UPropsVectors *pv,
*pErrorCode=U_INTERNAL_PROGRAM_ERROR;
return;
}
newVectors=(uint32_t *)uprv_realloc(pv->v, newMaxRows*columns*4);
newVectors=(uint32_t *)uprv_malloc(newMaxRows*columns*4);
if(newVectors==NULL) {
*pErrorCode=U_MEMORY_ALLOCATION_ERROR;
return;
}
firstRow = newVectors+(firstRow-pv->v);
lastRow = newVectors+(lastRow-pv->v);
uprv_memcpy(newVectors, pv->v, rows*columns*4);
firstRow=newVectors+(firstRow-pv->v);
lastRow=newVectors+(lastRow-pv->v);
uprv_free(pv->v);
pv->v=newVectors;
pv->maxRows=newMaxRows;
}
@ -351,10 +353,8 @@ upvec_compact(UPropsVectors *pv, UPVecCompactHandler *handler, void *context, UE
valueColumns=columns-2; /* not counting start & limit */
/* sort the properties vectors to find unique vector values */
if(rows>1) {
uprv_sortArray(pv->v, rows, columns*4,
upvec_compareRows, pv, FALSE, pErrorCode);
}
uprv_sortArray(pv->v, rows, columns*4,
upvec_compareRows, pv, FALSE, pErrorCode);
if(U_FAILURE(*pErrorCode)) {
return;
}

View File

@ -1,7 +1,7 @@
/*
*******************************************************************************
*
* Copyright (C) 2002-2008, International Business Machines
* Copyright (C) 2002-2009, International Business Machines
* Corporation and others. All Rights Reserved.
*
*******************************************************************************
@ -31,11 +31,18 @@ U_CDECL_BEGIN
* Rows of uint32_t integers in a contiguous array store
* the range limits and the properties vectors.
*
* In each row, row[0] contains the start code point and
* Logically, each row has a certain number of uint32_t values,
* which is set via the upvec_open() "columns" parameter.
*
* Internally, two additional columns are stored.
* In each internal row,
* row[0] contains the start code point and
* row[1] contains the limit code point,
* which is the start of the next range.
*
* Initially, there is only one range [0..0x110000[ with values 0.
* Initially, there is only one "normal" row for
* range [0..0x110000[ with values 0.
* There are additional rows for special purposes, see UPVEC_FIRST_SPECIAL_CP.
*
* It would be possible to store only one range boundary per row,
* but self-contained rows allow to later sort them by contents.
@ -59,6 +66,10 @@ typedef struct UPropsVectors UPropsVectors;
*/
#define UPVEC_START_REAL_VALUES_CP 0x200000
/*
* Open a UPropsVectors object.
* @param columns Number of value integers (uint32_t) per row.
*/
U_CAPI UPropsVectors * U_EXPORT2
upvec_open(int32_t columns, UErrorCode *pErrorCode);