Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
Copyright (c) 2005-2008 Whirlwind Match Limited. All rights reserved. This is open source software; you can use, redistribute and/or modify it under the terms of the Open Software Licence v 3.0 as published by the Open Source Initiative. You should have received a copy of the Open Software Licence along with this application. if not, contact the Open Source Initiative (www.opensource.org) /
 
 package org.fuzzydb.attrs.byteencoding;
 
Provides encoding for DimensionRange
 
 public class DimensionRangeCodec extends CompactConstraintCodec {
 
 	private static final int LENGTH_OFFSET = ;
 	private static final byte IDIM_BASE_SIZE =  + 1; // ( we use 1st byte for length) + numDimensions * 8 bytes:  1 for size, 4 for attrId, n*8 for n floats for min/max
 
 	private static final int IDIM_MIN_VALUE_OFFSET =  + 1;
 
 	
 	
     static DimensionRangeCodec instance = null;
     
     public static synchronized CompactAttrCodec getInstance() {
         if ( == null) {
              = new DimensionRangeCodec();
         }
         return ;
     }
 
 
 	public void encodeToByteArray(ByteArray bytesint attrIdObject value) {
 
 		
 		IDimensions max = dr.getMax();
 		IDimensions min = dr.getMin();
 		
 		byte dims = (bytemin.getNumDimensions(); // we expect both to be the same
 		byte size = (byte) ( + 8 * dims);
 		
 		// Find if there's one to overwrite
 		int i = findAttrInBuf(bytesattrId);
 		
 		// If not, allocate some space on the end
 		if ( i < 0 ) {
 			i = bytes.getIndexForWrite(size);
 		}
 		bytes.putByte(i + size);
 		setConstraintAttrId(bytesiattrIddr.isIncludesNotSpecified());
 		
 		// Write in whatever form has been stored as IDimensions (in fact... 
 		int iDimMaxValueOffset =  + 4 * dims;
 		for (int d = 0; d < dimsd++) {
 			bytes.putFloat(i +  + 4 * dmin.getDimension(d));
 			bytes.putFloat(i + iDimMaxValueOffset + 4 * dmax.getDimension(d));
 		}		
 	}
 
 	
 	public DimensionsRangeConstraint getDecoded(ByteArray bytesint index) {
 
         int headerWord = getHeaderWordbytesindex);
 		int attrId = getAttrIdheaderWord );
 		boolean notSpecified = getIncludesNotSpecified(headerWord);
 
 		// work out length from size
 		int nDimensions = (bytes.getByte(index + ) - ) / 8; 
 
 		// Create and populate the max and min Dimensions objects
 		IDimensions min = new Dimensions(nDimensions);
 		IDimensions max = new Dimensions(nDimensions);
 
 		populateIDimensions(bytesindex + min);
 		int iDimMaxValueOffset =  + 4 * nDimensions;
 		populateIDimensions(bytesindex + iDimMaxValueOffsetmax);
 		
 		DimensionsRangeConstraint dr = new DimensionsRangeConstraint(attrIdminmax);
 		dr.setIncludesNotSpecified(notSpecified);
 		return dr;
 	}
 	
 
 	
 	private void populateIDimensions(ByteArray bytesint indexIDimensions idim) {
 		for (int i = 0; i < idim.getNumDimensions(); i++) {
			float floatValue = bytes.getFloat(index + i * 4);
			idim.setDimension(ifloatValue);
		}
	}
New to GrepCode? Check out our FAQ X