org.openstreetmap.josm.gui.dialogs.relation
Class RelationNodeMap

java.lang.Object
  extended by org.openstreetmap.josm.gui.dialogs.relation.RelationNodeMap

public class RelationNodeMap
extends java.lang.Object

Auxiliary class for relation sorting. Constructs two mappings: One that maps each way to its nodes and the inverse mapping that maps each node to all ways that have this node. After construction both maps are consistent, but later on objects that are no longer needed are removed from the value sets. However the corresponding keys are not deleted even if they map to an empty set. Note that normal ways have 2 nodes (beginning and end) but roundabouts can have less or more (that are shared by other members).


Nested Class Summary
private static class RelationNodeMap.NodesWays
           
 
Field Summary
(package private)  Node firstCircular
           
(package private)  java.lang.Integer firstOneway
           
(package private)  Node lastOnewayNode
           
private  RelationNodeMap.NodesWays map
           
private  java.util.List<java.lang.Integer> notSortable
          All members that are incomplete or not a way
private  RelationNodeMap.NodesWays onewayMap
           
private  RelationNodeMap.NodesWays onewayReverseMap
           
private  java.util.Set<java.lang.Integer> remaining
           
private  java.util.Map<java.lang.Integer,java.util.Set<Node>> remainingOneway
           
 
Constructor Summary
RelationNodeMap(java.util.List<RelationMember> members)
           
 
Method Summary
private  void addNodeWayMap(Node n, int i)
           
private  void addNodeWayMapReverse(Node n, int i)
           
private  void addPair(Node n, int i)
           
private  void addRemainingForward(Node n, int i)
           
private  void addWayNodeMap(Node n, int i)
           
private  void addWayNodeMapReverse(Node n, int i)
           
private  java.lang.Integer deleteAndGetAdjacentNode(RelationNodeMap.NodesWays nw, Node n)
          find next node in nw NodeWays structure, if the node is found delete and return it
private  void deleteWayNode(RelationNodeMap.NodesWays nw, java.lang.Integer way, Node n)
           
private  void done(java.lang.Integer i)
           
private  void doneOneway(java.lang.Integer i)
          This relation member has been processed.
private  java.lang.Integer findAdjacentWay(RelationNodeMap.NodesWays nw, Node n)
           
static Node firstOnewayNode(RelationMember m)
           
 java.util.List<java.lang.Integer> getNotSortableMembers()
           
static Node lastOnewayNode(RelationMember m)
           
 java.lang.Integer pop()
          Returns some remaining member or null if every sortable member has been processed.
 java.lang.Integer popAdjacent(java.lang.Integer way)
          Return a relation member that is linked to the member 'i', but has not been popped yet.
private  java.lang.Integer popBackwardOnewayPart(int way)
           
private  java.lang.Integer popForwardOnewayPart(java.lang.Integer way)
           
private  Node processBackwardIfEndOfLoopReached(java.lang.Integer way)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

map

private RelationNodeMap.NodesWays map

onewayMap

private RelationNodeMap.NodesWays onewayMap

onewayReverseMap

private RelationNodeMap.NodesWays onewayReverseMap

remaining

private java.util.Set<java.lang.Integer> remaining

remainingOneway

private java.util.Map<java.lang.Integer,java.util.Set<Node>> remainingOneway

notSortable

private java.util.List<java.lang.Integer> notSortable
All members that are incomplete or not a way


firstOneway

java.lang.Integer firstOneway

lastOnewayNode

Node lastOnewayNode

firstCircular

Node firstCircular
Constructor Detail

RelationNodeMap

RelationNodeMap(java.util.List<RelationMember> members)
Method Detail

firstOnewayNode

public static Node firstOnewayNode(RelationMember m)

lastOnewayNode

public static Node lastOnewayNode(RelationMember m)

addPair

private void addPair(Node n,
                     int i)

addNodeWayMap

private void addNodeWayMap(Node n,
                           int i)

addWayNodeMap

private void addWayNodeMap(Node n,
                           int i)

addNodeWayMapReverse

private void addNodeWayMapReverse(Node n,
                                  int i)

addWayNodeMapReverse

private void addWayNodeMapReverse(Node n,
                                  int i)

addRemainingForward

private void addRemainingForward(Node n,
                                 int i)

popAdjacent

public java.lang.Integer popAdjacent(java.lang.Integer way)
Return a relation member that is linked to the member 'i', but has not been popped yet. Return null if there is no such member left.


popForwardOnewayPart

private java.lang.Integer popForwardOnewayPart(java.lang.Integer way)

processBackwardIfEndOfLoopReached

private Node processBackwardIfEndOfLoopReached(java.lang.Integer way)

popBackwardOnewayPart

private java.lang.Integer popBackwardOnewayPart(int way)

deleteAndGetAdjacentNode

private java.lang.Integer deleteAndGetAdjacentNode(RelationNodeMap.NodesWays nw,
                                                   Node n)
find next node in nw NodeWays structure, if the node is found delete and return it

Parameters:
nw -
n -
Returns:
node next to n

findAdjacentWay

private java.lang.Integer findAdjacentWay(RelationNodeMap.NodesWays nw,
                                          Node n)

deleteWayNode

private void deleteWayNode(RelationNodeMap.NodesWays nw,
                           java.lang.Integer way,
                           Node n)

pop

public java.lang.Integer pop()
Returns some remaining member or null if every sortable member has been processed.


doneOneway

private void doneOneway(java.lang.Integer i)
This relation member has been processed. Remove references in the map.nodes.


done

private void done(java.lang.Integer i)

getNotSortableMembers

public java.util.List<java.lang.Integer> getNotSortableMembers()


JOSM