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
26typedef 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 */
49U_CFUNC int32_t
50ucol_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 */
65U_CFUNC uint32_t
66ucol_nextWeight(WeightRange ranges[], int32_t *pRangeCount);
67
68#endif /* #if !UCONFIG_NO_COLLATION */
69
70#endif
71