package mil.nga.giat.geowave.core.index; import java.nio.ByteBuffer; public class MultiDimensionalCoordinateRangesArray implements Persistable { private MultiDimensionalCoordinateRanges[] rangesArray; public MultiDimensionalCoordinateRangesArray() {} public MultiDimensionalCoordinateRangesArray( final MultiDimensionalCoordinateRanges[] rangesArray ) { this.rangesArray = rangesArray; } public MultiDimensionalCoordinateRanges[] getRangesArray() { return rangesArray; } @Override public byte[] toBinary() { final byte[][] rangesBinaries = new byte[rangesArray.length][]; int binaryLength = 4; for (int i = 0; i < rangesArray.length; i++) { rangesBinaries[i] = rangesArray[i].toBinary(); binaryLength += (4 + rangesBinaries[i].length); } final ByteBuffer buf = ByteBuffer.allocate(binaryLength); buf.putInt(rangesBinaries.length); for (final byte[] rangesBinary : rangesBinaries) { buf.putInt(rangesBinary.length); buf.put(rangesBinary); } return buf.array(); } @Override public void fromBinary( final byte[] bytes ) { final ByteBuffer buf = ByteBuffer.wrap(bytes); rangesArray = new MultiDimensionalCoordinateRanges[buf.getInt()]; for (int i = 0; i < rangesArray.length; i++) { final byte[] rangesBinary = new byte[buf.getInt()]; buf.get(rangesBinary); rangesArray[i] = new MultiDimensionalCoordinateRanges(); rangesArray[i].fromBinary(rangesBinary); } } public static class ArrayOfArrays implements Persistable { private MultiDimensionalCoordinateRangesArray[] coordinateArrays; public ArrayOfArrays() { } public ArrayOfArrays( MultiDimensionalCoordinateRangesArray[] coordinateArrays ) { this.coordinateArrays = coordinateArrays; } public MultiDimensionalCoordinateRangesArray[] getCoordinateArrays() { return coordinateArrays; } @Override public byte[] toBinary() { final byte[][] rangesBinaries = new byte[coordinateArrays.length][]; int binaryLength = 4; for (int i = 0; i < coordinateArrays.length; i++) { rangesBinaries[i] = coordinateArrays[i].toBinary(); binaryLength += (4 + rangesBinaries[i].length); } final ByteBuffer buf = ByteBuffer.allocate(binaryLength); buf.putInt(rangesBinaries.length); for (final byte[] rangesBinary : rangesBinaries) { buf.putInt(rangesBinary.length); buf.put(rangesBinary); } return buf.array(); } @Override public void fromBinary( byte[] bytes ) { final ByteBuffer buf = ByteBuffer.wrap(bytes); coordinateArrays = new MultiDimensionalCoordinateRangesArray[buf.getInt()]; for (int i = 0; i < coordinateArrays.length; i++) { final byte[] rangesBinary = new byte[buf.getInt()]; buf.get(rangesBinary); coordinateArrays[i] = new MultiDimensionalCoordinateRangesArray(); coordinateArrays[i].fromBinary(rangesBinary); } } } }