mondrian.rolap
Interface CellKey

All Superinterfaces:
Serializable
All Known Implementing Classes:
CellKey.Four, CellKey.Many, CellKey.One, CellKey.Three, CellKey.Two, CellKey.Zero

public interface CellKey
extends Serializable

A CellKey is used as a key in maps which access cells by their position.

CellKey is also used within SparseSegmentDataset to store values within aggregations.

It is important that CellKey is memory-efficient, and that the Object.hashCode() and Object.equals(java.lang.Object) methods are extremely efficient. There are particular implementations for the most likely cases where the number of axes is 1, 2, 3 and 4 as well as a general implementation.

To create a key, call the CellKey.Generator.newCellKey(int[]) method.

Since:
10 August, 2001
Author:
jhyde

Nested Class Summary
static class CellKey.Four
           
static class CellKey.Generator
           
static class CellKey.Many
           
static class CellKey.One
           
static class CellKey.Three
           
static class CellKey.Two
           
static class CellKey.Zero
           
 
Method Summary
 CellKey copy()
          Returns a mutable copy of this CellKey.
 int getAxis(int axis)
          Returns the axisth axis value.
 int getOffset(int[] axisMultipliers)
          Returns the offset of the cell in a raster-scan order.
 int[] getOrdinals()
          Returns the axis keys as an array.
 void setAxis(int axis, int value)
          Sets a given axis.
 void setOrdinals(int[] pos)
          This method make a copy of the int array parameter.
 int size()
          Returns the number of axes.
 

Method Detail

size

int size()
Returns the number of axes.

Returns:
number of axes

getOrdinals

int[] getOrdinals()
Returns the axis keys as an array.

Note: caller should treat the array as immutable. If the contents of the array are modified, behavior is unspecified.

Returns:
Array of axis keys

setOrdinals

void setOrdinals(int[] pos)
This method make a copy of the int array parameter. Throws a RuntimeException if the int array size is not the size of the CellKey.

Parameters:
pos - Array of axis keys

getAxis

int getAxis(int axis)
Returns the axisth axis value.

Parameters:
axis - Axis ordinal
Returns:
Value of the axisth axis
Throws:
ArrayIndexOutOfBoundsException - if axis is out of range

setAxis

void setAxis(int axis,
             int value)
Sets a given axis.

Parameters:
axis - Axis ordinal
value - Value
Throws:
RuntimeException - if axis parameter is larger than size()

copy

CellKey copy()
Returns a mutable copy of this CellKey.

Returns:
Mutable copy

getOffset

int getOffset(int[] axisMultipliers)
Returns the offset of the cell in a raster-scan order.

For example, if the axes have lengths {2, 5, 10} then cell (2, 3, 4) has offset

(2 * mulitiplers[0]) + (3 * multipliers[1]) + (4 * multipliers[2])
= (2 * 50) + (3 * 10) + (4 * 1)
= 134

The multipliers are the product of the lengths of all later axes, in this case (50, 10, 1).

Parameters:
axisMultipliers - For each axis, the product of the lengths of later axes
Returns:
The raster-scan ordinal of this cell

Get Mondrian at SourceForge.net. Fast, secure and free Open Source software downloads