Package com.mckoi.database

## Class CollatedBaseSearch

- java.lang.Object
- - com.mckoi.database.SelectableScheme
  - - com.mckoi.database.CollatedBaseSearch

Direct Known Subclasses:
  `InsertSearch`

    public abstract class CollatedBaseSearch
    extends SelectableScheme

An implementation of SelectableScheme that is based on some collated set of data. This can be used to implement more advanced types of selectable schemes based on presistant indexes (see InsertSearch).

The default implementation maintains no state,

Derived classes are required to implement 'copy', 'searchFirst' and 'searchLast' methods. With these basic methods, a selectable scheme can be generated provided the column is sorted in ascending order (value of row i is <= value of row i+1). Overwrite 'firstInCollationOrder', 'lastInCollationOrder' and 'addRangeToSet' methods for non sorted underlying sets.

Assumptions - the underlying column is sorted low to high (value of row i is <= value of row i+1).

Author:
  Tobias Downer

### Field Summary

### Fields inherited from class com.mckoi.database.SelectableScheme

`EMPTY_LIST, ONE_LIST`

### Constructor Summary

Constructors
`CollatedBaseSearch​(TableDataSource table, int column)` The Constructor.

### Method Summary

All Methods Instance Methods Abstract Methods Concrete Methods
`protected IntegerVector` `addRangeToSet​(int start, int end, IntegerVector ivec)` Adds the set indexes to the list that represent the range of values between the start (inclusive) and end offset (inclusive) given.
`void` `dispose()` Disposes and invalidates the BlindSearch.
`protected TObject` `firstInCollationOrder()` Returns the first value of this column (in collated order).
`void` `insert​(int row)` This scheme doesn't take any notice of insertions or removals.
`protected TObject` `lastInCollationOrder()` Returns the last value of this column (in collated order).
`void` `readFrom​(java.io.InputStream in)` Reads the entire state of the scheme from the input stream.
`void` `remove​(int row)` This scheme doesn't take any notice of insertions or removals.
`protected abstract int` `searchFirst​(TObject val)` Finds the position in the collated set of the first value in the column equal to the given value.
`protected abstract int` `searchLast​(TObject val)` Finds the position in the collated set of the last value in the column equal to the given value.
`IntegerVector` `selectAll()` These are the select operations that are the main purpose of the scheme.
`IntegerVector` `selectRange​(SelectableRange range)`
`IntegerVector` `selectRange​(SelectableRange[] ranges)`
`protected int` `setSize()` The size of the set (the number of rows in this column).
`void` `writeTo​(java.io.OutputStream out)` Writes the entire state of the scheme to the output stream.

### Methods inherited from class com.mckoi.database.SelectableScheme

`copy, Debug, getCellContents, getColumn, getSubsetScheme, getSystem, getTable, internalOrderIndexSet, isImmutable, selectAllNonNull, selectBetween, selectEqual, selectFirst, selectGreater, selectGreaterOrEqual, selectLast, selectLess, selectLessOrEqual, selectNotEqual, selectNotFirst, selectNotLast, setImmutable, toString`

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

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

### Constructor Detail

#### CollatedBaseSearch

    public CollatedBaseSearch​(TableDataSource table,
                              int column)

The Constructor.

### Method Detail

#### insert

    public void insert​(int row)

This scheme doesn't take any notice of insertions or removals.

#### remove

    public void remove​(int row)

This scheme doesn't take any notice of insertions or removals.

#### readFrom

    public void readFrom​(java.io.InputStream in)
                  throws java.io.IOException

Reads the entire state of the scheme from the input stream. This is a trivial case for BlindSearch which doesn't require any data to be stored.

Specified by:
  `readFrom` in class `SelectableScheme`
Throws:
  `java.io.IOException`

#### writeTo

    public void writeTo​(java.io.OutputStream out)
                 throws java.io.IOException

Writes the entire state of the scheme to the output stream. This is a trivial case for BlindSearch which doesn't require any data to be stored.

Specified by:
  `writeTo` in class `SelectableScheme`
Throws:
  `java.io.IOException`

#### dispose

    public void dispose()

Disposes and invalidates the BlindSearch.

Specified by:
  `dispose` in class `SelectableScheme`

#### searchFirst

    protected abstract int searchFirst​(TObject val)

Finds the position in the collated set of the first value in the column equal to the given value. If the value is not to be found in the column, it returns -(insert_position + 1).

#### searchLast

    protected abstract int searchLast​(TObject val)

Finds the position in the collated set of the last value in the column equal to the given value. If the value is not to be found in the column, it returns -(insert_position + 1).

#### setSize

    protected int setSize()

The size of the set (the number of rows in this column).

#### firstInCollationOrder

    protected TObject firstInCollationOrder()

Returns the first value of this column (in collated order). For example, if the column contains (1, 4, 8} then '1' is returned.

#### lastInCollationOrder

    protected TObject lastInCollationOrder()

Returns the last value of this column (in collated order). For example, if the column contains (1, 4, 8} then '8' is returned.

#### addRangeToSet

    protected IntegerVector addRangeToSet​(int start,
                                          int end,
                                          IntegerVector ivec)

Adds the set indexes to the list that represent the range of values between the start (inclusive) and end offset (inclusive) given.

#### selectAll

    public IntegerVector selectAll()

Description copied from class: `SelectableScheme`
These are the select operations that are the main purpose of the scheme. They retrieve the given information from the set. Different schemes will have varying performance on different types of data sets. The select operations must *always* return a resultant row set that is sorted from lowest to highest.

Overrides:
  `selectAll` in class `SelectableScheme`

#### selectRange

    public IntegerVector selectRange​(SelectableRange range)

#### selectRange

    public IntegerVector selectRange​(SelectableRange[] ranges)