• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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