From 7c279747beb43c7e88633a6228a155a30e6834f7 Mon Sep 17 00:00:00 2001 From: Benjamin Culkin Date: Mon, 27 May 2024 11:38:33 -0400 Subject: Initial import --- .../foundation/collections/nspace/NSpace.java | 98 ++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100755 israfil-foundation-nspace/src/main/java/net/israfil/foundation/collections/nspace/NSpace.java (limited to 'israfil-foundation-nspace/src/main/java/net/israfil/foundation/collections/nspace/NSpace.java') diff --git a/israfil-foundation-nspace/src/main/java/net/israfil/foundation/collections/nspace/NSpace.java b/israfil-foundation-nspace/src/main/java/net/israfil/foundation/collections/nspace/NSpace.java new file mode 100755 index 0000000..196f4e9 --- /dev/null +++ b/israfil-foundation-nspace/src/main/java/net/israfil/foundation/collections/nspace/NSpace.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2003, Mishkin Berteig and Christian Gruber + * + * $Id: NSpace.java 259 2004-08-23 21:30:01Z mberteig $ + */ +package net.israfil.foundation.collections.nspace; + +import java.util.Set; + +/** + * An N-Dimensional Space representation, such that: + *
    + *
  1. Each dimension is named
  2. + *
  3. Each co-ordinate is specified using names not numbers IOW: + * Domain of each dim. is specified as an ordered set of names + *
  4. + *
  5. Number of dimensions can change throughout lifecycle
  6. + *
  7. Dimensions + *
+ *

+ * A SparseNSpace represents a set of tuples of the form (D1,D2,D3,...,Dn;V) + * where Dx represents a location in dimension x and V represents a value in + * the n-dimensional space at a location specified by the dimensional locations + * D1..Dn. Dimensions can be added or removed at any time with well-defined + * results.

+ *

Note: Maybe have origin

+ * + * @author Mishkin Berteig + * @author Christian Gruber + * @version $Revision: 259 $ + */ +public interface NSpace { + + /* + * Content Management + */ + + /** + * Returns an NSpace such that each coordinate of the receiver that contains the values of the passed in + * coordinate becomes a part of the resulting NSpace. The dimensionality of the resulting NSpace is the difference + * of the dimensionality of the receiver and the coordinate. E.g. say we have 3-NSpace with dimensions (D1,D2,D3) + * and data [0,0,0;A], [0,1,0;B], [1,0,0;C], [1,1,0;D]. If we lookup a coordinate with dimensions (D2,D3) and values + * [0,0] we will get a resulting 1-NSpace with dimension (D1) and data [0;A], [1;C]. + */ + public NSpace lookup(Coordinate c); + + /** + * Returns an NSpace such that each coordinate of the receiver that contains the values of the passed in + * coordinate is not a part of the resulting NSpace. The dimensionality of the resulting NSpace is the dimensionality + * of the receiver. E.g. say we have 3-NSpace with dimensions (D1,D2,D3) + * and data [0,0,0;A], [0,1,0;B], [1,0,0;C], [1,1,0;D]. If we slice with a coordinate with dimensions (D2,D3) and values + * [0,0] we will get a resulting 3-NSpace with dimension (D1,D2,D3) and data [0,1,0;B], [1,1,0;D]. + */ + public NSpace slice(Coordinate c); + + /** + * Returns an array of NSpace instances such that for each ordinal in Dimension d, there is an NSpace in the array + * of dimensionality one less than the receiver that contains the data from the receiver that contains the ordinal. + * E.g. say we have 3-NSpace with dimensions (D1,D2,D3) + * and data [0,0,0;A], [0,1,0;B], [1,0,0;C], [1,1,0;D]. + * then slicing on dimension D2 would give us two 2-NSpaces with dimensions (D1,D3): + * [0,0;A], [1,0;C] and + * [0,0;B], [1,0;D] + * @param d the dimension to use to make the cuts in the receiver + * @return all the sub-NSpaces, one for each ordinal of d + */ + public NSpace[] slice(Dimension d); + + /** + * Returns true if NSpace contains zero dimensions, or if the size of each + * dimension == 1. + * @return boolean + */ + public boolean isPoint(); + public Object getValue(Coordinate c); + + public NSpace setValue(Coordinate c, Object value) + throws InvalidDimensionalityException; + public NSpace setValue(Coordinate c, NSpace value) + throws InvalidDimensionalityException; + + /* + * Dimension Management + */ + public Dimension createDimension(String name, String initialSlot) + throws DimensionExistsException; + public void deleteDimension(Dimension dimension); + public Set getDimensions(); + public Dimension getDimension(String name); + + /* + * Notifications + */ + + void dimensionAddedPosition(Dimension dimension,String position); + void dimensionRemovedPosition(Dimension dimension, String position); + +} -- cgit v1.2.3