| Index: source/i18n/usrchimp.h
|
| diff --git a/source/i18n/usrchimp.h b/source/i18n/usrchimp.h
|
| index 2f597e90334000b493f1762410f5239404825107..b44943e89218894450cb6d5c63058a978b581a04 100644
|
| --- a/source/i18n/usrchimp.h
|
| +++ b/source/i18n/usrchimp.h
|
| @@ -1,6 +1,6 @@
|
| /*
|
| **********************************************************************
|
| -* Copyright (C) 2001-2011 IBM and others. All rights reserved.
|
| +* Copyright (C) 2001-2014 IBM and others. All rights reserved.
|
| **********************************************************************
|
| * Date Name Description
|
| * 08/13/2001 synwee Creation.
|
| @@ -18,6 +18,112 @@
|
| #include "unicode/ucoleitr.h"
|
| #include "unicode/ubrk.h"
|
|
|
| +/* mask off anything but primary order */
|
| +#define UCOL_PRIMARYORDERMASK 0xffff0000
|
| +/* mask off anything but secondary order */
|
| +#define UCOL_SECONDARYORDERMASK 0x0000ff00
|
| +/* mask off anything but tertiary order */
|
| +#define UCOL_TERTIARYORDERMASK 0x000000ff
|
| +/* primary order shift */
|
| +#define UCOL_PRIMARYORDERSHIFT 16
|
| +/* secondary order shift */
|
| +#define UCOL_SECONDARYORDERSHIFT 8
|
| +
|
| +#define UCOL_IGNORABLE 0
|
| +
|
| +/* get weights from a CE */
|
| +#define UCOL_PRIMARYORDER(order) (((order) >> 16) & 0xffff)
|
| +#define UCOL_SECONDARYORDER(order) (((order) & UCOL_SECONDARYORDERMASK)>> UCOL_SECONDARYORDERSHIFT)
|
| +#define UCOL_TERTIARYORDER(order) ((order) & UCOL_TERTIARYORDERMASK)
|
| +
|
| +#define UCOL_CONTINUATION_MARKER 0xC0
|
| +
|
| +#define isContinuation(CE) (((CE) & UCOL_CONTINUATION_MARKER) == UCOL_CONTINUATION_MARKER)
|
| +
|
| +/**
|
| + * This indicates an error has occured during processing or there are no more CEs
|
| + * to be returned.
|
| + */
|
| +#define UCOL_PROCESSED_NULLORDER ((int64_t)U_INT64_MAX)
|
| +
|
| +U_NAMESPACE_BEGIN
|
| +
|
| +class CollationElementIterator;
|
| +class Collator;
|
| +
|
| +struct PCEI
|
| +{
|
| + uint64_t ce;
|
| + int32_t low;
|
| + int32_t high;
|
| +};
|
| +
|
| +struct PCEBuffer
|
| +{
|
| + PCEI defaultBuffer[16];
|
| + PCEI *buffer;
|
| + int32_t bufferIndex;
|
| + int32_t bufferSize;
|
| +
|
| + PCEBuffer();
|
| + ~PCEBuffer();
|
| +
|
| + void reset();
|
| + UBool empty() const;
|
| + void put(uint64_t ce, int32_t ixLow, int32_t ixHigh);
|
| + const PCEI *get();
|
| +};
|
| +
|
| +class UCollationPCE : public UMemory {
|
| +private:
|
| + PCEBuffer pceBuffer;
|
| + CollationElementIterator *cei;
|
| + UCollationStrength strength;
|
| + UBool toShift;
|
| + UBool isShifted;
|
| + uint32_t variableTop;
|
| +
|
| +public:
|
| + UCollationPCE(UCollationElements *elems);
|
| + UCollationPCE(CollationElementIterator *iter);
|
| + ~UCollationPCE();
|
| +
|
| + void init(UCollationElements *elems);
|
| + void init(CollationElementIterator *iter);
|
| +
|
| + /**
|
| + * Get the processed ordering priority of the next collation element in the text.
|
| + * A single character may contain more than one collation element.
|
| + *
|
| + * @param ixLow a pointer to an int32_t to receive the iterator index before fetching the CE.
|
| + * @param ixHigh a pointer to an int32_t to receive the iterator index after fetching the CE.
|
| + * @param status A pointer to an UErrorCode to receive any errors.
|
| + * @return The next collation elements ordering, otherwise returns UCOL_PROCESSED_NULLORDER
|
| + * if an error has occured or if the end of string has been reached
|
| + */
|
| + int64_t nextProcessed(int32_t *ixLow, int32_t *ixHigh, UErrorCode *status);
|
| + /**
|
| + * Get the processed ordering priority of the previous collation element in the text.
|
| + * A single character may contain more than one collation element.
|
| + *
|
| + * @param ixLow A pointer to an int32_t to receive the iterator index after fetching the CE
|
| + * @param ixHigh A pointer to an int32_t to receiver the iterator index before fetching the CE
|
| + * @param status A pointer to an UErrorCode to receive any errors. Noteably
|
| + * a U_BUFFER_OVERFLOW_ERROR is returned if the internal stack
|
| + * buffer has been exhausted.
|
| + * @return The previous collation elements ordering, otherwise returns
|
| + * UCOL_PROCESSED_NULLORDER if an error has occured or if the start of
|
| + * string has been reached.
|
| + */
|
| + int64_t previousProcessed(int32_t *ixLow, int32_t *ixHigh, UErrorCode *status);
|
| +
|
| +private:
|
| + void init(const Collator &coll);
|
| + uint64_t processCE(uint32_t ce);
|
| +};
|
| +
|
| +U_NAMESPACE_END
|
| +
|
| #define INITIAL_ARRAY_SIZE_ 256
|
| #define MAX_TABLE_SIZE_ 257
|
|
|
| @@ -44,12 +150,12 @@ struct UPattern {
|
| const UChar *text;
|
| int32_t textLength; // exact length
|
| // length required for backwards ce comparison
|
| - int32_t CELength;
|
| - int32_t *CE;
|
| - int32_t CEBuffer[INITIAL_ARRAY_SIZE_];
|
| - int32_t PCELength;
|
| - int64_t *PCE;
|
| - int64_t PCEBuffer[INITIAL_ARRAY_SIZE_];
|
| + int32_t cesLength;
|
| + int32_t *ces;
|
| + int32_t cesBuffer[INITIAL_ARRAY_SIZE_];
|
| + int32_t pcesLength;
|
| + int64_t *pces;
|
| + int64_t pcesBuffer[INITIAL_ARRAY_SIZE_];
|
| UBool hasPrefixAccents;
|
| UBool hasSuffixAccents;
|
| int16_t defaultShiftSize;
|
| @@ -65,6 +171,7 @@ struct UStringSearch {
|
| // positions within the collation element iterator is used to determine
|
| // if we are at the start of the text.
|
| UCollationElements *textIter;
|
| + icu::UCollationPCE *textProcessedIter;
|
| // utility collation element, used throughout program for temporary
|
| // iteration.
|
| UCollationElements *utilIter;
|
|
|