Package org.apache.lucene.util

# Class MSBRadixSorter

java.lang.Object
org.apache.lucene.util.Sorter
org.apache.lucene.util.MSBRadixSorter

Direct Known Subclasses:
  `StableMSBRadixSorter`, `StringSorter.MSBStringRadixSorter`

public abstract class MSBRadixSorter extends Sorter
Radix sorter for variable-length strings. This class sorts based on the most significant byte first and falls back to `IntroSorter` when the size of the buckets to sort becomes small.

This algorithm is NOT stable. Worst-case memory usage is about `2.3 KB`.

NOTE: This API is for internal purposes only and might change in incompatible ways in the next release.

## Field Summary

Fields
Modifier and Type
Field
Description
`protected static final int`
`HISTOGRAM_SIZE`
`protected static final int`
`LENGTH_THRESHOLD`
`protected static final int`
`LEVEL_THRESHOLD`
`protected final int`
`maxLength`

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`MSBRadixSorter(int maxLength)`
Sole constructor.

## Method Summary

Modifier and Type
Method
Description
`protected void`
`buildHistogram(int prefixCommonBucket, int prefixCommonLen, int from, int to, int k, int[] histogram)`
Build an histogram of the k-th characters of values occurring between offsets `from` and `to`, using `getBucket(int, int)`.
`protected abstract int`
`byteAt(int i, int k)`
Return the k-th byte of the entry at index `i`, or `-1` if its length is less than or equal to `k`.
`protected final int`
`compare(int i, int j)`
Compare entries found in slots `i` and `j`.
`protected int`
`getBucket(int i, int k)`
Return a number for the k-th character between 0 and `HISTOGRAM_SIZE`.
`protected Sorter`
`getFallbackSorter(int k)`
Get a fall-back sorter which may assume that the first k bytes of all compared strings are equal.
`protected void`
`reorder(int from, int to, int[] startOffsets, int[] endOffsets, int k)`
Reorder based on start/end offsets for each bucket.
`protected boolean`
`shouldFallback(int from, int to, int l)`
`void`
`sort(int from, int to)`
Sort the slice which starts at `from` (inclusive) and ends at `to` (exclusive).
`protected void`
`sort(int from, int to, int k, int l)`

### Methods inherited from class org.apache.lucene.util.Sorter

`comparePivot, setPivot, swap`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### LEVEL_THRESHOLD

protected static final int LEVEL_THRESHOLD

See Also:
  - Constant Field Values

### HISTOGRAM_SIZE

protected static final int HISTOGRAM_SIZE

See Also:
  - Constant Field Values

### LENGTH_THRESHOLD

protected static final int LENGTH_THRESHOLD

See Also:
  - Constant Field Values

### maxLength

protected final int maxLength

## Constructor Details

### MSBRadixSorter

protected MSBRadixSorter(int maxLength)
Sole constructor.

Parameters:
  `maxLength` - the maximum length of keys, pass `Integer.MAX_VALUE` if unknown.

## Method Details

### byteAt

protected abstract int byteAt(int i, int k)
Return the k-th byte of the entry at index `i`, or `-1` if its length is less than or equal to `k`. This may only be called with a value of `i` between `0` included and `maxLength` excluded.

### getFallbackSorter

protected Sorter getFallbackSorter(int k)
Get a fall-back sorter which may assume that the first k bytes of all compared strings are equal.

### compare

protected final int compare(int i, int j)
Description copied from class: `Sorter`
Compare entries found in slots `i` and `j`. The contract for the returned value is the same as `Comparator.compare(Object, Object)`.

Specified by:
  `compare` in class `Sorter`

### sort

public void sort(int from, int to)
Description copied from class: `Sorter`
Sort the slice which starts at `from` (inclusive) and ends at `to` (exclusive).

Specified by:
  `sort` in class `Sorter`

### sort

protected void sort(int from, int to, int k, int l)

### shouldFallback

protected boolean shouldFallback(int from, int to, int l)

### getBucket

protected int getBucket(int i, int k)
Return a number for the k-th character between 0 and `HISTOGRAM_SIZE`.

### buildHistogram

protected void buildHistogram(int prefixCommonBucket, int prefixCommonLen, int from, int to, int k, int[] histogram)
Build an histogram of the k-th characters of values occurring between offsets `from` and `to`, using `getBucket(int, int)`.

### reorder

protected void reorder(int from, int to, int[] startOffsets, int[] endOffsets, int k)
Reorder based on start/end offsets for each bucket. When this method returns, startOffsets and endOffsets are equal.

Parameters:
  `startOffsets` - start offsets per bucket
  `endOffsets` - end offsets per bucket