package org.opensha2.eq.fault.surface;
import org.opensha2.util.Named;
import java.util.ListIterator;
/**
* <b>Title:</b> Container2DAPI<p>
*
* <b>Description:</b> Main interface that all 2D data containers must
* implement. These provide functions for iteration through the elements,
* replacing elements, etc. Each element is any object that extends Object. <p>
*
* This two dimensional grid acts more like a matrix than a geographical array
* of location objects. You can store anything in each grid point. One of the
* main purposes we use this class for is to store Location objects (latitude,
* longitude) at each grid point. It just so happens that the location objects
* are sorted spatially so that locations next to each other in real space are
* next to each other in the grid. The confusing point is that even though the
* grid is rectangular, the location objects may not map out to a rectangular
* grid on the earth's surface at all. This is a fine point distintion but worth
* noting due to confusion in designing this class.<p>
*
* @author Steven W. Rock
*/
@Deprecated
public interface Container2D<T> extends Named, Iterable<T> {
/**
* Returns the number of rows int this two dimensional container.
*
* @return Number of rows.
*/
public int getNumRows();
/**
* Every container has a name associated with it to distinguish it from other
* container instances.
* @param name
*/
public void setName(String name);
/**
* Returns the number of columns in this two dimensional container.
*
* @return Get number of columns.
*/
public int getNumCols();
/**
* Empties the list of all data. Note, the data may still exist elsewhere if
* it is referenced elsewhere.
*/
public void clear();
/**
* Check if this grid cell has a java object stored in it. Returns false if
* this gird point object is null.
*
* @param row The x coordinate of the cell.
* @param column The y coordinate of the cell.
* @return True if an object has been set in this cell.
*/
public boolean exist(int row, int column);
/**
* returns the number of cells in this two dimensional matrix, i.e. numwRows *
* numCols.
*
* @return The number of cells.
*/
public long size();
/**
* Places a Java object into one cell in this two dimensional matrix specified
* by the row and column indices.
*
* @param row The x coordinate of the cell.
* @param column The y coordinate of the cell.
* @param obj The Java object to place in the cell.
* @exception ArrayIndexOutOfBoundsException Thrown if the row and column are
* beyond the two dimensional matrix range.
* @exception ClassCastException Thrown by subclasses that expect a particular
* type of Java object.
*/
public void set(int row, int column, T obj) throws ArrayIndexOutOfBoundsException,
ClassCastException;
// TODO should be immutable and have a Builder
/**
* Returns the object stored in this two dimensional grid cell.
*
* @param row The x coordinate of the cell.
* @param column The y coordinate of the cell.
*/
public T get(int row, int column);
/**
* Returns an ordered list iterator over all columns associated with one row.
* This returns all the objects in that row. The results are returned from
* lowest index to highest along the interating row.
*
* @param row The x coordinate of the cell.
* @return The columnIterator value
* @exception ArrayIndexOutOfBoundsException Thrown if the row is beyond the
* two dimensional matrix range.
*/
public ListIterator<T> getColumnIterator(int row) throws ArrayIndexOutOfBoundsException;
/**
* Returns an ordered list iterator over all rows associated with one column.
* This returns all the objects in that column. The results are returned from
* lowest index to highest along the interating column.
*
* @param column The y coordinate of the cell.
* @return The rowIterator value
* @exception ArrayIndexOutOfBoundsException Thrown if the column is beyond
* the two dimensional matrix range.
*/
public ListIterator<T> getRowIterator(int column) throws ArrayIndexOutOfBoundsException;
/**
* This returns an iterator of all the Java objects stored in this two
* dimensional matrix iterating over all rows within a column and then moving
* to the next column until iteration has been done over all rows and all
* columns.
*
* @return The allByColumnsIterator value
*/
public ListIterator<T> getAllByColumnsIterator();
/**
* This returns an iterator of all the Java objects stored in this two
* dimensional matrix iterating over all columns within a rows and then moving
* to the next column until iteration has been done over all columns and all
* rows.
*
* @return The allByRowsIterator value
*/
public ListIterator<T> getAllByRowsIterator();
}