package btools.mapcreator; import btools.util.DiffCoderDataInputStream; import btools.util.DiffCoderDataOutputStream; /** * Container for node data on the preprocessor level * * @author ab */ public class NodeData extends MapCreatorBase { public long nid; public int ilon; public int ilat; public byte[] description; public short selev = Short.MIN_VALUE; public NodeData( long id, double lon, double lat ) { nid = id; ilat = (int)( ( lat + 90. )*1000000. + 0.5); ilon = (int)( ( lon + 180. )*1000000. + 0.5); } public NodeData( DiffCoderDataInputStream dis ) throws Exception { nid = dis.readDiffed( 0 ); ilon = (int)dis.readDiffed( 1 ); ilat = (int)dis.readDiffed( 2 ); int mode = dis.readByte(); if ( ( mode & 1 ) != 0 ) { int dlen = dis.readShort(); description = new byte[dlen]; dis.readFully( description ); } if ( ( mode & 2 ) != 0 ) selev = dis.readShort(); } public void writeTo( DiffCoderDataOutputStream dos ) throws Exception { dos.writeDiffed( nid, 0 ); dos.writeDiffed( ilon, 1 ); dos.writeDiffed( ilat, 2 ); int mode = (description == null ? 0 : 1 ) | ( selev == Short.MIN_VALUE ? 0 : 2 ); dos.writeByte( (byte) mode); if ( ( mode & 1 ) != 0 ) { dos.writeShort( description.length ); dos.write( description ); } if ( ( mode & 2 ) != 0 ) dos.writeShort( selev ); } }