package de.westnordost.streetcomplete.data.osm.download;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/** Knows which vertices connect which ways. T is the identifier of a vertex */
public class NodeWayMap<T>
{
private final Map<T, List<List<T>>> wayEndpoints = new HashMap<>();
public NodeWayMap(List<List<T>> ways)
{
for (List<T> way : ways)
{
T firstNode = way.get(0);
T lastNode = way.get(way.size() - 1);
if (!wayEndpoints.containsKey(firstNode))
{
wayEndpoints.put(firstNode, new ArrayList<List<T>>());
}
if (!wayEndpoints.containsKey(lastNode))
{
wayEndpoints.put(lastNode, new ArrayList<List<T>>());
}
wayEndpoints.get(firstNode).add(way);
wayEndpoints.get(lastNode).add(way);
}
}
public boolean hasNextNode()
{
return !wayEndpoints.isEmpty();
}
public T getNextNode()
{
return wayEndpoints.keySet().iterator().next();
}
public List<List<T>> getWaysAtNode(T node)
{
return wayEndpoints.get(node);
}
public void removeWay(List<T> way)
{
Iterator<List<List<T>>> it = wayEndpoints.values().iterator();
while(it.hasNext())
{
List<List<T>> waysPerNode = it.next();
Iterator<List<T>> waysIt = waysPerNode.iterator();
while(waysIt.hasNext())
{
if(waysIt.next() == way)
{
waysIt.remove();
}
}
if(waysPerNode.isEmpty())
{
it.remove();
}
}
}
}