Class RelationNodeMap<T extends IRelationMember<? extends IPrimitive>>
- java.lang.Object
-
- org.openstreetmap.josm.gui.dialogs.relation.sort.RelationNodeMap<T>
-
- Type Parameters:
T- The type ofIRelationMember
public class RelationNodeMap<T extends IRelationMember<? extends IPrimitive>> 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).- Since:
- 1785, 17862 (generics)
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classRelationNodeMap.NodesWays
-
Field Summary
Fields Modifier and Type Field Description private INodefirstCircularprivate java.lang.IntegerfirstOnewayprivate INodelastOnewayNodeprivate RelationNodeMap.NodesWaysmapprivate java.util.List<java.lang.Integer>notSortableAll members that are incomplete or not a wayprivate RelationNodeMap.NodesWaysonewayMapprivate RelationNodeMap.NodesWaysonewayReverseMapprivate java.util.Set<java.lang.Integer>remainingprivate java.util.Map<java.lang.Integer,java.util.Set<INode>>remainingOnewayprivate static java.lang.StringROLE_BACKWARD
-
Constructor Summary
Constructors Constructor Description RelationNodeMap(java.util.List<T> members)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidaddNodeWayMap(INode n, int i)private voidaddNodeWayMapReverse(INode n, int i)private voidaddPair(INode n, int i)private voidaddRemainingForward(INode n, int i)private voidaddWayNodeMap(INode n, int i)private voidaddWayNodeMapReverse(INode n, int i)private booleancheckIfEndOfLoopReached(INode n)private java.lang.IntegerdeleteAndGetAdjacentNode(RelationNodeMap.NodesWays nw, INode n)find next node in nw NodeWays structure, if the node is found delete and return itprivate voiddeleteWayNode(RelationNodeMap.NodesWays nw, java.lang.Integer way, INode n)private voiddone(java.lang.Integer i)private voiddoneOneway(java.lang.Integer i)This relation member has been processed.private static java.lang.IntegerfindAdjacentWay(RelationNodeMap.NodesWays nw, INode n)static INodefirstOnewayNode(IRelationMember<?> m)Gets the start node of the member, respecting the direction role.java.util.List<java.lang.Integer>getNotSortableMembers()static INodelastOnewayNode(IRelationMember<?> m)Gets the end node of the member, respecting the direction role.java.lang.Integerpop()Returns some remaining member or null if every sortable member has been processed.java.lang.IntegerpopAdjacent(java.lang.Integer way)Return a relation member that is linked to the member 'i', but has not been popped yet.private java.lang.IntegerpopBackwardOnewayPart(int way)private java.lang.IntegerpopForwardOnewayPart(java.lang.Integer way)
-
-
-
Field Detail
-
ROLE_BACKWARD
private static final java.lang.String ROLE_BACKWARD
- See Also:
- Constant Field Values
-
map
private final RelationNodeMap.NodesWays map
-
onewayMap
private final RelationNodeMap.NodesWays onewayMap
-
onewayReverseMap
private final RelationNodeMap.NodesWays onewayReverseMap
-
remaining
private final java.util.Set<java.lang.Integer> remaining
-
remainingOneway
private final java.util.Map<java.lang.Integer,java.util.Set<INode>> remainingOneway
-
notSortable
private final java.util.List<java.lang.Integer> notSortable
All members that are incomplete or not a way
-
firstOneway
private java.lang.Integer firstOneway
-
lastOnewayNode
private INode lastOnewayNode
-
firstCircular
private INode firstCircular
-
-
Constructor Detail
-
RelationNodeMap
RelationNodeMap(java.util.List<T> members)
-
-
Method Detail
-
firstOnewayNode
public static INode firstOnewayNode(IRelationMember<?> m)
Gets the start node of the member, respecting the direction role.- Parameters:
m- The relation member.- Returns:
nullif the member is no way, the node otherwise.- Since:
- 17862 (generics)
-
lastOnewayNode
public static INode lastOnewayNode(IRelationMember<?> m)
Gets the end node of the member, respecting the direction role.- Parameters:
m- The relation member.- Returns:
nullif the member is no way, the node otherwise.
-
addNodeWayMap
private void addNodeWayMap(INode n, int i)
-
addWayNodeMap
private void addWayNodeMap(INode n, int i)
-
addNodeWayMapReverse
private void addNodeWayMapReverse(INode n, int i)
-
addWayNodeMapReverse
private void addWayNodeMapReverse(INode n, int i)
-
addRemainingForward
private void addRemainingForward(INode 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.- Parameters:
way- way key- Returns:
- a relation member that is linked to the member 'i', but has not been popped yet
-
popForwardOnewayPart
private java.lang.Integer popForwardOnewayPart(java.lang.Integer way)
-
checkIfEndOfLoopReached
private boolean checkIfEndOfLoopReached(INode n)
-
popBackwardOnewayPart
private java.lang.Integer popBackwardOnewayPart(int way)
-
deleteAndGetAdjacentNode
private java.lang.Integer deleteAndGetAdjacentNode(RelationNodeMap.NodesWays nw, INode n)
find next node in nw NodeWays structure, if the node is found delete and return it- Parameters:
nw- nodes and waysn- node- Returns:
- node next to n
-
findAdjacentWay
private static java.lang.Integer findAdjacentWay(RelationNodeMap.NodesWays nw, INode n)
-
deleteWayNode
private void deleteWayNode(RelationNodeMap.NodesWays nw, java.lang.Integer way, INode n)
-
pop
public java.lang.Integer pop()
Returns some remaining member or null if every sortable member has been processed.- Returns:
- member key
-
doneOneway
private void doneOneway(java.lang.Integer i)
This relation member has been processed. Remove references in the map.nodes.- Parameters:
i- member key
-
done
private void done(java.lang.Integer i)
-
getNotSortableMembers
public java.util.List<java.lang.Integer> getNotSortableMembers()
-
-