edu.umd.cfar.lamp.viper.util
Class SparseMatrix

java.lang.Object
  extended byedu.umd.cfar.lamp.viper.util.SparseMatrix
All Implemented Interfaces:
DataMatrix2d

public class SparseMatrix
extends java.lang.Object
implements DataMatrix2d

This class implements a simple 2-dimensional sparse matrix.

Author:
David Mihalcik
See Also:
MatrixIndexOutOfBoundsException

Constructor Summary
SparseMatrix()
          Creates an empty matrix.
SparseMatrix(DataMatrix2d old, java.util.BitSet cols, java.util.BitSet rows)
          Creates a new SparseMatrix, carving out from an old one.
SparseMatrix(int maxWidth, int maxHeight)
          Creates a new SparseMatrix that cannot have data beyond the specified dimensions.
 
Method Summary
 boolean equals(java.lang.Object other)
          Determines if this is the same as another DataMatrix2d.
 java.lang.Object get(int column, int row)
          Returns the object at the given location.
 MatrixIterator getMatrixIterator()
          Returns a MatrixIterator for this matrix.
 int getUsedNodeCount()
          Gets the current count of occupied cells.
 int height()
          Returns the current real height, that is, the largest row number (+1) that contains data.
 java.lang.Object remove(int column, int row)
          Sets the object at the specified location to null.
 void set(int column, int row, java.lang.Object data)
          Sets the data at the specific location to the given value.
 int sizeHigh()
          Get the logical height of the matrix.
 int sizeWide()
          Get the logical width of the matrix.
 int width()
          Returns the current real height, that is, the index of the rightmost column that contains data +1.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

SparseMatrix

public SparseMatrix()
Creates an empty matrix. Maximum size defaults to Integer.MAX_VALUE.


SparseMatrix

public SparseMatrix(int maxWidth,
                    int maxHeight)
Creates a new SparseMatrix that cannot have data beyond the specified dimensions.

Parameters:
maxWidth - The greatest column offset.
maxHeight - The greatest row offset.

SparseMatrix

public SparseMatrix(DataMatrix2d old,
                    java.util.BitSet cols,
                    java.util.BitSet rows)
Creates a new SparseMatrix, carving out from an old one. Logically, it creates a matrix of the count of all set bits in cols wide and the count of all set bits in rows high, and fills it with the data from those rows and columns in the old matrix.

Parameters:
old - The matrix to canabalize.
cols - The columns to copy.
rows - The rows to copy.
Method Detail

equals

public boolean equals(java.lang.Object other)
Determines if this is the same as another DataMatrix2d. Requires that all of the data implement equals() as well.

Parameters:
other - Another DataMatrix2d.
Returns:
true if the other has all the same data as this.

width

public int width()
Returns the current real height, that is, the index of the rightmost column that contains data +1.

Specified by:
width in interface DataMatrix2d
Returns:
An integer set to the index eastmost column containing data +1.

height

public int height()
Returns the current real height, that is, the largest row number (+1) that contains data.

Specified by:
height in interface DataMatrix2d
Returns:
An integer set to the index northmost column containing data +1.

sizeWide

public int sizeWide()
Get the logical width of the matrix. This is equivalent to the number of possible columns, x-length, or .length.

Specified by:
sizeWide in interface DataMatrix2d
Returns:
The maximum possible column index + 1.

sizeHigh

public int sizeHigh()
Get the logical height of the matrix. This is equivalent to the number of rows, y-length, or [0].length.

Specified by:
sizeHigh in interface DataMatrix2d
Returns:
The maximum possible row index + 1.

set

public void set(int column,
                int row,
                java.lang.Object data)
Sets the data at the specific location to the given value.

Specified by:
set in interface DataMatrix2d
Parameters:
column - The column (x position) of the cell to set.
row - The row (y position) of the cell to set.
data - The object to put into the specified cell.

get

public java.lang.Object get(int column,
                            int row)
Returns the object at the given location. Take O(column+row).

Specified by:
get in interface DataMatrix2d
Parameters:
column - The column (x position) of the cell to get.
row - The row (y position) of the cell to get.
Returns:
A reference to the object in the specified cell, or null if none is found.

remove

public java.lang.Object remove(int column,
                               int row)
Sets the object at the specified location to null. It will no longer be found by a MatrixIterator or an unordered Iterator. Take O(column+row).

Specified by:
remove in interface DataMatrix2d
Parameters:
column - The column (x position) of the cell to remove.
row - The row (y position) of the cell to remove.
Returns:
A reference to the object that was in the specified cell, or null if none is found.

getUsedNodeCount

public int getUsedNodeCount()
Gets the current count of occupied cells.

Returns:
Number of occupied cells.

getMatrixIterator

public MatrixIterator getMatrixIterator()
Returns a MatrixIterator for this matrix. Use this whenever possible, as random access is slow.

Specified by:
getMatrixIterator in interface DataMatrix2d
Returns:
A MatrixIterator that can find all set cells.