1 /* 2 ******************************************************************************* 3 * 4 * Copyright (C) 1999-2008, International Business Machines 5 * Corporation and others. All Rights Reserved. 6 * 7 ******************************************************************************* 8 * file name: ucol_wgt.h 9 * encoding: US-ASCII 10 * tab size: 8 (not used) 11 * indentation:4 12 * 13 * created on: 2001mar08 14 * created by: Markus W. Scherer 15 */ 16 17 #ifndef UCOL_WGT_H 18 #define UCOL_WGT_H 19 20 #include "unicode/utypes.h" 21 22 #if !UCONFIG_NO_COLLATION 23 24 /* definitions for CE weights */ 25 26 typedef struct WeightRange { 27 uint32_t start, end; 28 int32_t length, count; 29 int32_t length2; 30 uint32_t count2; 31 } WeightRange; 32 33 /** 34 * Determine heuristically 35 * what ranges to use for a given number of weights between (excluding) 36 * two limits. 37 * 38 * @param lowerLimit A collation element weight; the ranges will be filled to cover 39 * weights greater than this one. 40 * @param upperLimit A collation element weight; the ranges will be filled to cover 41 * weights less than this one. 42 * @param n The number of collation element weights w necessary such that 43 * lowerLimit<w<upperLimit in lexical order. 44 * @param maxByte The highest valid byte value. 45 * @param ranges An array that is filled in with one or more ranges to cover 46 * n weights between the limits. 47 * @return number of ranges, 0 if it is not possible to fit n elements between the limits 48 */ 49 U_CFUNC int32_t 50 ucol_allocWeights(uint32_t lowerLimit, uint32_t upperLimit, 51 uint32_t n, 52 uint32_t maxByte, 53 WeightRange ranges[7]); 54 55 /** 56 * Given a set of ranges calculated by ucol_allocWeights(), 57 * iterate through the weights. 58 * The ranges are modified to keep the current iteration state. 59 * 60 * @param ranges The array of ranges that ucol_allocWeights() filled in. 61 * The ranges are modified. 62 * @param pRangeCount The number of ranges. It will be decremented when necessary. 63 * @return The next weight in the ranges, or 0xffffffff if there is none left. 64 */ 65 U_CFUNC uint32_t 66 ucol_nextWeight(WeightRange ranges[], int32_t *pRangeCount); 67 68 #endif /* #if !UCONFIG_NO_COLLATION */ 69 70 #endif 71