Class CollationWeights
java.lang.Object
com.ibm.icu.impl.coll.CollationWeights
Allocates n collation element weights between two exclusive limits.
Used only internally by the collation tailoring builder.
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate int[]private intprivate int[]private intprivate intprivate CollationWeights.WeightRange[] -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanallocWeights(long lowerLimit, long upperLimit, int n) Determine heuristically what ranges to use for a given number of weights between (excluding) two limits.private booleanallocWeightsInMinLengthRanges(int n, int minLength) private booleanallocWeightsInShortRanges(int n, int minLength) private intcountBytes(int idx) private static longdecWeightTrail(long weight, int length) private static intgetWeightByte(long weight, int idx) private booleangetWeightRanges(long lowerLimit, long upperLimit) Takes two CE weights and calculates the possible ranges of weights between the two limits, excluding them.private static intgetWeightTrail(long weight, int length) private longincWeight(long weight, int length) private longincWeightByOffset(long weight, int length, int offset) private static longincWeightTrail(long weight, int length) voidinitForPrimary(boolean compressible) voidvoidprivate voidstatic intlengthOfWeight(long weight) longGiven a set of ranges calculated by allocWeights(), iterate through the weights.private static longsetWeightByte(long weight, int idx, int b) private static longsetWeightTrail(long weight, int length, int trail) private static longtruncateWeight(long weight, int length)
-
Field Details
-
middleLength
private int middleLength -
minBytes
private int[] minBytes -
maxBytes
private int[] maxBytes -
ranges
-
rangeIndex
private int rangeIndex -
rangeCount
private int rangeCount
-
-
Constructor Details
-
CollationWeights
public CollationWeights()
-
-
Method Details
-
initForPrimary
public void initForPrimary(boolean compressible) -
initForSecondary
public void initForSecondary() -
initForTertiary
public void initForTertiary() -
allocWeights
public boolean allocWeights(long lowerLimit, long upperLimit, int n) Determine heuristically what ranges to use for a given number of weights between (excluding) two limits.- Parameters:
lowerLimit- A collation element weight; the ranges will be filled to cover weights greater than this one.upperLimit- A collation element weight; the ranges will be filled to cover weights less than this one.n- The number of collation element weights w necessary such that lowerLimitinvalid input: '<'winvalid input: '<'upperLimit in lexical order.- Returns:
- true if it is possible to fit n elements between the limits
-
nextWeight
public long nextWeight()Given a set of ranges calculated by allocWeights(), iterate through the weights. The ranges are modified to keep the current iteration state.- Returns:
- The next weight in the ranges, or 0xffffffff if there is none left.
-
lengthOfWeight
public static int lengthOfWeight(long weight) -
getWeightTrail
private static int getWeightTrail(long weight, int length) -
setWeightTrail
private static long setWeightTrail(long weight, int length, int trail) -
getWeightByte
private static int getWeightByte(long weight, int idx) -
setWeightByte
private static long setWeightByte(long weight, int idx, int b) -
truncateWeight
private static long truncateWeight(long weight, int length) -
incWeightTrail
private static long incWeightTrail(long weight, int length) -
decWeightTrail
private static long decWeightTrail(long weight, int length) -
countBytes
private int countBytes(int idx) - Returns:
- number of usable byte values for byte idx
-
incWeight
private long incWeight(long weight, int length) -
incWeightByOffset
private long incWeightByOffset(long weight, int length, int offset) -
lengthenRange
-
getWeightRanges
private boolean getWeightRanges(long lowerLimit, long upperLimit) Takes two CE weights and calculates the possible ranges of weights between the two limits, excluding them. For weights with up to 4 bytes there are up to 2*4-1=7 ranges. -
allocWeightsInShortRanges
private boolean allocWeightsInShortRanges(int n, int minLength) -
allocWeightsInMinLengthRanges
private boolean allocWeightsInMinLengthRanges(int n, int minLength)
-