package bsearch.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
/* TODO: This class needs more functionality, and needs tested.
*/
public class SimpleDiGraph<T> {
List<T> vertices;
HashMap<T,Set<T>> edges;
private SimpleDiGraph()
{
vertices = new LinkedList<T>();
edges = new HashMap<T,Set<T>>();
}
public Set<T> neighbors(T node)
{
if (edges.containsKey(node))
{
return edges.get(node);
}
else
{
throw new IllegalStateException("node key not found");
}
}
public static SimpleDiGraph<String> readEdgeListFromFile(String filename) throws FileNotFoundException
{
SimpleDiGraph<String> G = new SimpleDiGraph<String>();
Scanner scanner = new Scanner(new File(filename));
while (scanner.hasNext())
{
String line = scanner.nextLine();
String[] lineItems = line.trim().split("\\W");
G.vertices.add(lineItems[0]);
G.vertices.add(lineItems[1]);
if (!G.edges.containsKey(lineItems[0]))
{
G.edges.put(lineItems[0], new LinkedHashSet<String>());
}
if (!G.edges.containsKey(lineItems[1]))
{
G.edges.put(lineItems[1], new LinkedHashSet<String>());
}
G.edges.get(lineItems[0]).add(lineItems[1]);
}
return G;
}
}