diff options
Diffstat (limited to 'java/rasj/RasGMArray.java')
| -rw-r--r-- | java/rasj/RasGMArray.java | 532 |
1 files changed, 0 insertions, 532 deletions
diff --git a/java/rasj/RasGMArray.java b/java/rasj/RasGMArray.java deleted file mode 100644 index da0843c..0000000 --- a/java/rasj/RasGMArray.java +++ /dev/null @@ -1,532 +0,0 @@ -package rasj; - -import rasj.*; -import rasj.odmg.*; -import rasj.global.*; - -import java.io.*; - -/* -* This file is part of rasdaman community. -* -* Rasdaman community is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* Rasdaman community is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with rasdaman community. If not, see <http://www.gnu.org/licenses/>. -* -* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / -rasdaman GmbH. -* -* For more information please see <http://www.rasdaman.org> -* or contact Peter Baumann via <baumann@rasdaman.com>. -*/ -/** *********************************************************** - * <pre> - * - * PURPOSE: - * This class represents a generic MDD in the sense that it - * is independent of the cell base type. The only information - * available is the length in bytes of the base type. - * <P>More specific MDDs including base type information for more - * type safety are represented by a set of typed subclasses. - * @version $Revision: 1.26 $ - * - * - * COMMENTS: - * - * </pre> - *********************************************************** */ - -public class RasGMArray extends RasObject implements RasGlobalDefs -{ - static final String rcsid = "@(#)Package rasj, class RasGMArray: $Header: /home/rasdev/CVS-repository/rasdaman/java/rasj/RasGMArray.java,v 1.26 2003/12/10 21:04:23 rasdev Exp $"; - - /** spatial domain */ - protected RasMInterval domain; - - /** internal array representation in bytes*/ - protected byte[] data; - - /** internal array representation as Object for use in special marrays*/ - protected Object objectData; - - /** internal object for accessing one cell of the array */ - protected byte[] currentCell; - - /** size of internal array representation in bytes */ - protected long dataSize; - - /** length of the cell base type in bytes */ - protected long typeLength; - - /** store current data format */ - protected int currentFormat; //RasDataFormat -> RasGlobalDefs - - /** storage layout object */ - protected RasStorageLayout storageLayout; - - /** - * Default constructor. - **/ - public RasGMArray() - { - super(RAS_MARRAY); - data = null; - objectData = null; - currentCell = null; - dataSize = 0; - domain = null; - typeLength = 0; - currentFormat = RAS_ARRAY; - storageLayout = new RasStorageLayout(); - } - - /** - * Constructor for uninitialized MDD objects - * @param initDomain The initial Domain of the GMArray - * @param cellTypeLength The length of the cell type used - */ - public RasGMArray(final RasMInterval initDomain, long cellTypeLength) - { - super(RAS_MARRAY); - data = null; - objectData = null; - dataSize = 0; - domain = initDomain; - typeLength = cellTypeLength; - currentFormat = RAS_ARRAY; - storageLayout = new RasStorageLayout(); - - // If dimensionality is zero, just one scalar value is stored. - dataSize = ((domain.dimension() != 0) ? domain.cellCount() : 1) * typeLength; - data = new byte[(int)dataSize]; - currentCell = new byte[(int)cellTypeLength]; - } - - /** - * Constructor for uninitialized MDD objects with Storage Layout - * @param initDomain The initial Domain of the GMArray - * @param cellTypeLength The length of the cell type used - * @param RasStorageLayout The storage layout to be used - */ - public RasGMArray(final RasMInterval initDomain, long cellTypeLength, RasStorageLayout stl) - { - super(RAS_MARRAY); - data = null; - objectData = null; - dataSize = 0; - domain = initDomain; - typeLength = cellTypeLength; - currentFormat = RAS_ARRAY; - storageLayout = stl; - - // If dimensionality is zero, just one scalar value is stored. - dataSize = ((domain.dimension() != 0) ? domain.cellCount() : 1) * typeLength; - data = new byte[(int)dataSize]; - currentCell = new byte[(int)cellTypeLength]; - } - - - /** - * Copy constructor. - * @param obj a copy of this object will be created - **/ - public RasGMArray(final RasGMArray obj) - { - super(obj, RAS_MARRAY); - if(data!=null) - { - System.arraycopy(obj.getArray(), 0, data, 0, (int)obj.dataSize); - objectData = null; - } - dataSize = obj.getArraySize(); - domain = obj.spatialDomain(); - typeLength = obj.typeLength; - currentFormat = obj.currentFormat; - storageLayout = new RasStorageLayout(obj.storageLayout); - if(obj.typeLength != 0) - currentCell = new byte[(int)obj.typeLength]; - } - - /** - * This method copies the values of mArray to itself. - * @param mArray the values of this MArray will be copied - * @return itself (after having copied the values from mArray) - **/ - public RasGMArray setTo(final RasGMArray mArray) - { - if(this != mArray) - { - if(data != null) - { - data = null; - } - - if (mArray.data != null) - { - dataSize = mArray.dataSize; - data = mArray.data; - } - if (mArray.objectData != null) - { - dataSize = mArray.dataSize; - objectData = mArray.objectData; - } - - if(storageLayout != null) - { - storageLayout = null; - } - - - // this has to be changed to a clone() function in future - if(mArray.storageLayout != null) - storageLayout = new RasStorageLayout(mArray.storageLayout); - - domain = mArray.domain; - typeLength = mArray.typeLength; - currentFormat = mArray.currentFormat; - } - return this; - } - - /** - * Reads a cell of the MDD. The cell's value is returned - * as a byte array, the length of which depends on the size of the base type. - * If you want to get the cell value as a primitive type (like integer or byte), - * you either have to do a cast or use the type-specific MArrays - * that are derived from this class. - * @param point the coordinates of the requested cell - * @return a byte array representing the value of the requested cell. - **/ - public byte[] getCell(RasPoint point) throws RasDimensionMismatchException, RasIndexOutOfBoundsException - { - // first test dimensionality - if(point.dimension() != domain.dimension()) - throw new RasDimensionMismatchException(point.dimension(), domain.dimension()); - if(typeLength == 0) - return null; - - System.arraycopy(data, (int)(domain.cellOffset(point)*typeLength), currentCell, 0, (int)typeLength); - return currentCell; - - } - - /** - * Returns the storage layout object of this MDD. - * @return the storage layout object - **/ - public final RasStorageLayout getStorageLayout() - { - return storageLayout; - } - - /** - * Sets the storage layout object and checks compatibility with the domain. - * @param stl the new storage layout - */ - public void setStorageLayout(RasStorageLayout stl) throws RasDimensionMismatchException - { - if (!stl.isCompatible(domain)) - throw new RasDimensionMismatchException(domain.dimension(),stl.getSpatialDomain().dimension()); - else - storageLayout = stl; - } - - /** - * Returns a RasGMArray that is the intersection of the current domain - * with the specified interval. - * @param where the interval that is used for the intersection - * @return the result of the intersection of this GMArray with the parameter interval - */ - public RasGMArray intersectionWith(RasMInterval where) - { - RasGMArray tile = new RasGMArray(); - - try { - RasMInterval objDomain = spatialDomain(); - int numDims = objDomain.dimension(); - long tlength = getTypeLength(); - - byte[] objData = new byte[(int)(where.cellCount() * tlength)]; - tile.setSpatialDomain(where); - tile.setTypeLength(tlength); - tile.setArray(objData); - tile.setArraySize(where.cellCount() * tlength); - - long blockLength = - where.item(numDims-1).high() - where.item(numDims-1).low() + 1; - long total = where.cellCount()/blockLength; - - byte[] dest = objData; - byte[] source = getArray(); - int blength = (int)(blockLength * tlength); - - for (long cell=0; cell<total; cell++) - { - RasPoint p = where.cellPoint(cell*blockLength); - - System.arraycopy(source, (int)(objDomain.cellOffset(p) * tlength), dest, - (int)(where.cellOffset(p) * tlength), blength); - } - - return tile; - } - - catch(RasIndexOutOfBoundsException e1) { - // this canno toccur (theoretically) - throw new RasClientInternalException("RasGMArray","intersectionWith()",e1.getMessage()); - } - catch(RasResultIsNoCellException e2) { - // this canno toccur (theoretically) - throw new RasClientInternalException("RasGMArray","intersectionWith()",e2.getMessage()); - } - - } - - - // Read methods - /** - * Gets the spatial domain. - * @return the spatial domain of this GMArray - **/ - public final RasMInterval spatialDomain() - { - return domain; - } - - /** - * Gets the internal representation of this GMAarray (the byte array). - * @return the byte array representing this GMArray - **/ - public byte[] getArray() - { - return data; - } - - /** - * Gets the size of the internal representation of this GMArray (in bytes). - * @return the size of this GMArray - **/ - public final long getArraySize() - { - return dataSize; - } - - /** - * Gets the length of cell type (in bytes). - * @return the cell type length - **/ - public final long getTypeLength() - { - return typeLength; - } - - /** - * Gets the current data format (RAS_ARRAY). - * @return the current data format - **/ - public final int getCurrentFormat() - { - return currentFormat; - } - - - // Write methods - /** - * Sets the spatial domain. - * @param dom the new spatial domain of this GMArray - **/ - public void setSpatialDomain(final RasMInterval dom) - { - domain = dom; - } - - /** - * Sets the internal representation of the GMArray. - * @param newData the new byte array representing the contents of this GMArray - **/ - public void setArray(byte[] newData) - { - data = newData; - dataSize = newData.length; - objectData = null; - } - - /** - * Sets the size of the internal representation (in bytes). - * @param newValue the size of the internal representation (the byte array) - **/ - public void setArraySize(long newValue) - { - dataSize = newValue; - } - - /** - * Sets the length of the cell type (in bytes). - * @param newValue the cell type length - **/ - public void setTypeLength(long newValue) - { - typeLength = newValue; - /* Now create the byte array object used for returning cell values */ - currentCell = new byte[(int)newValue]; - } - - /** - * Sets the current data format. - * @param newFormat the new data format - **/ - public void setCurrentFormat(int newFormat) - { - currentFormat = newFormat; - } - - // Methods for database communication (internal use only) - - /* inserts an object into the database - public void insertObjIntoDB() - { - // Nothing is done in that case. RasMArray objects can just be inserted as elements - // of a collection which invokes RasGMArray.insertObjIntoDB(String collName) - // of the RasMArray objects. - - //RasDatabase.currentDatabase.communication.insertSingleMDDObj(this); - System.out.println(" do nothing "); - } - */ - - /* inserts myself into a specific collection in the database - public void insertObjIntoDB(String collName) throws RasException - { - // Insert myself in database only if I have a type name, otherwise - // an exception is thrown. - if(!typeName) - { - throw new RasErrorDatabaseClassUndefined(); - } - //RasDatabase.currentDatabase.communication.insertMDD(collName, this); - } - */ - - /** gets the String representation */ - public String toString() - { - String tileDomain = ""; - - RasType typeSchema = (RasType)(((RasGMArray)this).getTypeSchema()); - RasBaseType baseTypeSchema = (RasBaseType)(((RasGMArray)this).getBaseTypeSchema()); - - if(storageLayout.getSpatialDomain() == null) - tileDomain = getTilingDomain(domain,typeLength); - else - tileDomain = storageLayout.getSpatialDomain().toString(); - - String s = "\n" + getClass().getName(); - s = s + "\n" - + " Oid...................: " + getOID() + "\n" - + " Object Name...........: " + getObjectName() + "\n" - + " Object Type...........: " + getObjectType() + "\n" - + " Object Type Name......: " + getObjectTypeName() + "\n" - + " Type Structure........: " + ((getTypeStructure() != null) ? getTypeStructure() : "<nn>") + "\n" - + " Type Schema...........: " + ((typeSchema != null) ? typeSchema.toString() : "<nn>") + "\n" - + " Domain................: " + domain + "\n" - + " TilingDomain..........: " + tileDomain + "\n" - + " TileSize..............: " + storageLayout.getTileSize() + " bytes\n" - + " Base Type Schema......: " + ((baseTypeSchema != null) ? baseTypeSchema.toString() : "<nn>") + "\n" - + " Base Type Length......: " + typeLength + "\n" - + " Data format...........: " + currentFormat + "\n" - + " Data size (bytes).....: " + dataSize + "\n"; - - return s; - } - - /** gets the String for testing */ - public String toTestString() - { - String tileDomain = ""; - - RasType typeSchema = (RasType)(((RasGMArray)this).getTypeSchema()); - RasBaseType baseTypeSchema = (RasBaseType)(((RasGMArray)this).getBaseTypeSchema()); - - if(storageLayout.getSpatialDomain() == null) - tileDomain = getTilingDomain(domain,typeLength); - else - tileDomain = storageLayout.getSpatialDomain().toString(); - - StringBuffer buffer = new StringBuffer(getArray().length * 4); // for most elements 3 characters and a space - buffer.append("\n" + getClass().getName()); - buffer.append("\n" - //+ " Oid...................: " + getOID() + "\n" - + " Object Name...........: " + getObjectName() + "\n" - + " Object Type...........: " + getObjectType() + "\n" - + " Object Type Name......: " + getObjectTypeName() + "\n" - + " Type Structure........: " + ((getTypeStructure() != null) ? getTypeStructure() : "<nn>") + "\n" - + " Type Schema...........: " + ((typeSchema != null) ? typeSchema.toString() : "<nn>") + "\n" - + " Domain................: " + domain + "\n" - + " TilingDomain..........: " + tileDomain + "\n" - + " TileSize..............: " + storageLayout.getTileSize() + " bytes\n" - + " Base Type Schema......: " + ((baseTypeSchema != null) ? baseTypeSchema.toString() : "<nn>") + "\n" - + " Base Type Length......: " + typeLength + "\n" - + " Data format...........: " + currentFormat + "\n" - + " Data size (bytes).....: " + dataSize + "\n" - ); - - //print bytes, just for testing!!! - for(int j=0; j < getArray().length; j++) - { - buffer.append(" " + getArray()[j]); - } - - return buffer.toString(); - } - - /** - * Returns the base type schema of this GMArray. - * @return the base type schema - **/ - public RasBaseType getBaseTypeSchema() - { - RasType type = getTypeSchema(); - RasBaseType baseType = null; - - if (type != null) - { - if (type.getTypeID() == RasGlobalDefs.RAS_MARRAY) - { - RasMArrayType mArrayType = (RasMArrayType)type; - baseType = (mArrayType.getBaseType()); - } - } - - return baseType; - } - - - //######### for internal use - - // calculates the tiling domain based on the original MDD, the type length and the tileSize - // of the MDD's storageLayout. - private String getTilingDomain(final RasMInterval originalDomain, final long typeLength) - { - long tileSize = storageLayout.getTileSize(); - int dim = originalDomain.dimension(); - double tmp = 1.0/dim; - int size=(int)(Math.pow((double)(tileSize / typeLength),tmp))-1; - String retVal = "0:"+String.valueOf(size); - for(int x=1; x<dim; x++) - retVal = retVal + ",0:" + size; - return "["+retVal+"]"; - } - -} - - |
