package prefuse.data.util;
import java.util.Comparator;
import prefuse.util.collections.IntIterator;
/**
* Represents an index over a column of data, allowing quick lookups by
* data value and providing iterators over sorted ranges of data. For
* convenience, there are index lookup methods for a variety of data
* types; which ones to use depend on the data type of the column
* being indexed and calling a lookup method for an incompatible
* data type could lead to an exception being thrown.
*
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public interface Index {
/** Flag for an ascending sort order. */
public static final int TYPE_ASCENDING = 1<<5;
/** Flag for a descending sort order. */
public static final int TYPE_DESCENDING = 1<<4;
/** Flag for including the lowest value of a range. */
public static final int TYPE_LEFT_INCLUSIVE = 1<<3;
/** Flag for excluding the lowest value of a range. */
public static final int TYPE_LEFT_EXCLUSIVE = 1<<2;
/** Flag for including the highest value of a range. */
public static final int TYPE_RIGHT_INCLUSIVE = 1<<1;
/** Flag for excluding the highest value of a range. */
public static final int TYPE_RIGHT_EXCLUSIVE = 1;
/** Composite flag for an ascending, left and right inclusive range. */
public static final int TYPE_AII =
TYPE_ASCENDING | TYPE_LEFT_INCLUSIVE | TYPE_RIGHT_INCLUSIVE;
/** Composite flag for a descending, left and right inclusive range. */
public static final int TYPE_DII =
TYPE_DESCENDING | TYPE_LEFT_INCLUSIVE | TYPE_RIGHT_INCLUSIVE;
/** Composite flag for an ascending, left exclusive, right inclusive
* range. */
public static final int TYPE_AEI =
TYPE_ASCENDING | TYPE_LEFT_EXCLUSIVE | TYPE_RIGHT_INCLUSIVE;
/** Composite flag for a descending, left exclusive, right inclusive
* range. */
public static final int TYPE_DEI =
TYPE_DESCENDING | TYPE_LEFT_EXCLUSIVE | TYPE_RIGHT_INCLUSIVE;
/** Composite flag for an ascending, left inclusive, right exclusive
* range. */
public static final int TYPE_AIE =
TYPE_ASCENDING | TYPE_LEFT_INCLUSIVE | TYPE_RIGHT_EXCLUSIVE;
/** Composite flag for a descending, left inclusive, right exclusive
* range. */
public static final int TYPE_DIE =
TYPE_DESCENDING | TYPE_LEFT_INCLUSIVE | TYPE_RIGHT_EXCLUSIVE;
/** Composite flag for an ascending, left and right exclusive range. */
public static final int TYPE_AEE =
TYPE_ASCENDING | TYPE_LEFT_EXCLUSIVE | TYPE_RIGHT_EXCLUSIVE;
/** Composite flag for a descending, left and right exclusive range. */
public static final int TYPE_DEE =
TYPE_DESCENDING | TYPE_LEFT_EXCLUSIVE | TYPE_RIGHT_EXCLUSIVE;
/**
* Perform an initial indexing of a data column.
*/
public void index();
/**
* Dispose of an index, deregistering all listeners.
*/
public void dispose();
/**
* Get the comparator used to compare column data values.
* @return the sort comparator
*/
public Comparator getComparator();
/**
* Get the row (or one of the rows) with the minimum data value.
* @return a row with a minimum data value
*/
public int minimum();
/**
* Get the row (or one of the rows) with the maximum data value.
* @return a row with a maximum data value
*/
public int maximum();
/**
* Get the row (or one of the rows) with the median data value.
* @return a row with a median data value
*/
public int median();
/**
* Get the number of unique data values in the index.
* @return the number of unique data values
*/
public int uniqueCount();
/**
* Get the size of this index, the number of data value / row
* pairs included.
* @return the size of the index
*/
public int size();
/**
* Get an iterator over all rows in the index, in sorted order.
* @param type the sort type, one of {@link #TYPE_ASCENDING} or
* {@link #TYPE_DESCENDING}.
* @return an iterator over all rows in the index
*/
public IntIterator allRows(int type);
/**
* Get an iterator over a sorted range of rows.
* @param lo the minimum data value
* @param hi the maximum data value
* @param type the iteration type, one of the composite flags
* involving both a sort order, and whether each bound of
* the range should inclusive or exclusive
* @return an iterator over a sorted range of rows
*/
public IntIterator rows(Object lo, Object hi, int type);
/**
* Get an iterator over a sorted range of rows.
* @param lo the minimum data value
* @param hi the maximum data value
* @param type the iteration type, one of the composite flags
* involving both a sort order, and whether each bound of
* the range should inclusive or exclusive
* @return an iterator over a sorted range of rows
*/
public IntIterator rows(int lo, int hi, int type);
/**
* Get an iterator over a sorted range of rows.
* @param lo the minimum data value
* @param hi the maximum data value
* @param type the iteration type, one of the composite flags
* involving both a sort order, and whether each bound of
* the range should inclusive or exclusive
* @return an iterator over a sorted range of rows
*/
public IntIterator rows(long lo, long hi, int type);
/**
* Get an iterator over a sorted range of rows.
* @param lo the minimum data value
* @param hi the maximum data value
* @param type the iteration type, one of the composite flags
* involving both a sort order, and whether each bound of
* the range should inclusive or exclusive
* @return an iterator over a sorted range of rows
*/
public IntIterator rows(float lo, float hi, int type);
/**
* Get an iterator over a sorted range of rows.
* @param lo the minimum data value
* @param hi the maximum data value
* @param type the iteration type, one of the composite flags
* involving both a sort order, and whether each bound of
* the range should inclusive or exclusive
* @return an iterator over a sorted range of rows
*/
public IntIterator rows(double lo, double hi, int type);
/**
* Get an iterator over all rows with the given data value.
* @param val the data value
* @return an iterator over all rows matching the data value
*/
public IntIterator rows(Object val);
/**
* Get an iterator over all rows with the given data value.
* @param val the data value
* @return an iterator over all rows matching the data value
*/
public IntIterator rows(int val);
/**
* Get an iterator over all rows with the given data value.
* @param val the data value
* @return an iterator over all rows matching the data value
*/
public IntIterator rows(long val);
/**
* Get an iterator over all rows with the given data value.
* @param val the data value
* @return an iterator over all rows matching the data value
*/
public IntIterator rows(float val);
/**
* Get an iterator over all rows with the given data value.
* @param val the data value
* @return an iterator over all rows matching the data value
*/
public IntIterator rows(double val);
/**
* Get an iterator over all rows with the given data value.
* @param val the data value
* @return an iterator over all rows matching the data value
*/
public IntIterator rows(boolean val);
/**
* Get the first row found with the given data value.
* @param x the data value
* @return the first row matching the data value
*/
public int get(Object x);
/**
* Get the first row found with the given data value.
* @param x the data value
* @return the first row matching the data value
*/
public int get(int x);
/**
* Get the first row found with the given data value.
* @param x the data value
* @return the first row matching the data value
*/
public int get(long x);
/**
* Get the first row found with the given data value.
* @param x the data value
* @return the first row matching the data value
*/
public int get(float x);
/**
* Get the first row found with the given data value.
* @param x the data value
* @return the first row matching the data value
*/
public int get(double x);
} // end of interface Index