/** * Set holding pairs of osm nodes * * @author ab */ package btools.mapaccess; import btools.util.CompactLongMap; public class OsmNodePairSet { private long[] n1a; private long[] n2a; private int tempNodes = 0; private int maxTempNodes = 0; private int npairs = 0; private int freezecount = 0; public OsmNodePairSet( int maxTempNodeCount ) { maxTempNodes = maxTempNodeCount; n1a = new long[maxTempNodes]; n2a = new long[maxTempNodes]; } private static class OsmNodePair { public long node2; public OsmNodePair next; } private CompactLongMap map; public void addTempPair( long n1, long n2 ) { if ( tempNodes < maxTempNodes ) { n1a[tempNodes] = n1; n2a[tempNodes] = n2; tempNodes++; } } public void freezeTempPairs() { freezecount++; for( int i=0; i(); } npairs++; OsmNodePair e = getElement( n1, n2 ); if ( e == null ) { e = new OsmNodePair(); e.node2 = n2; OsmNodePair e0 = map.get( n1 ); if ( e0 != null ) { while( e0.next != null ) { e0 = e0.next; } e0.next = e; } else { map.fastPut( n1, e ); } } } public int size() { return npairs; } public int tempSize() { return tempNodes; } public int getFreezeCount() { return freezecount; } public boolean hasPair( long n1, long n2 ) { return map != null && ( getElement( n1, n2 ) != null || getElement( n2, n1 ) != null ); } private OsmNodePair getElement( long n1, long n2 ) { OsmNodePair e = map.get( n1 ); while (e != null) { if ( e.node2 == n2 ) { return e; } e = e.next; } return null; } }