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 class
RelationNodeMap.NodesWays
-
Field Summary
Fields Modifier and Type Field Description private INode
firstCircular
private java.lang.Integer
firstOneway
private INode
lastOnewayNode
private RelationNodeMap.NodesWays
map
private java.util.List<java.lang.Integer>
notSortable
All members that are incomplete or not a wayprivate 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<INode>>
remainingOneway
private static java.lang.String
ROLE_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 void
addNodeWayMap(INode n, int i)
private void
addNodeWayMapReverse(INode n, int i)
private void
addPair(INode n, int i)
private void
addRemainingForward(INode n, int i)
private void
addWayNodeMap(INode n, int i)
private void
addWayNodeMapReverse(INode n, int i)
private boolean
checkIfEndOfLoopReached(INode n)
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 itprivate void
deleteWayNode(RelationNodeMap.NodesWays nw, java.lang.Integer way, INode n)
private void
done(java.lang.Integer i)
private void
doneOneway(java.lang.Integer i)
This relation member has been processed.private static java.lang.Integer
findAdjacentWay(RelationNodeMap.NodesWays nw, INode n)
static INode
firstOnewayNode(IRelationMember<?> m)
Gets the start node of the member, respecting the direction role.java.util.List<java.lang.Integer>
getNotSortableMembers()
static INode
lastOnewayNode(IRelationMember<?> m)
Gets the end node of the member, respecting the direction role.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)
-
-
-
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:
null
if 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:
null
if 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()
-
-