1 cananian 1.1a // Graph.java, created Sat May 3 19:05:43 2003 by cananian 2 cananian 1.1a // Copyright (C) 2003 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1a // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1 package harpoon.Util.Collections; 5 cananian 1.1a 6 cananian 1.1a import java.util.Collection; 7 cananian 1.1a import java.util.List; 8 cananian 1.1a import java.util.Set; 9 cananian 1.1a 10 cananian 1.1a /** 11 cananian 1.1a * This is a generic <code>Graph</code> implementation. 12 cananian 1.1a * 13 cananian 1.1a * @author C. Scott Ananian <cananian@alumni.princeton.edu> 14 cananian 1.3 * @version $Id: Graph.java,v 1.3 2004/02/08 01:56:38 cananian Exp $ 15 cananian 1.1a */ 16 cananian 1.3 public interface Graph<N extends Graph.Node<N,E>, E extends Graph.Edge<N,E>> { 17 cananian 1.1a /** Return the set of nodes comprising this Graph. */ 18 cananian 1.1a Set<N> nodes(); 19 cananian 1.1a 20 cananian 1.1a /** Find a path from start to end. */ 21 cananian 1.2 //XXX this method should be in a "GraphUtilities" class. 22 cananian 1.2 //List<E> findPath(N start, N end); 23 cananian 1.1a 24 cananian 1.2a /** 25 cananian 1.2a * This class represents nodes in a <code>Graph</code>. 26 cananian 1.2a * 27 cananian 1.2a * @author C. Scott Ananian <cananian@alumni.princeton.edu> 28 cananian 1.3 * @version $Id: Graph.java,v 1.3 2004/02/08 01:56:38 cananian Exp $ 29 cananian 1.2a */ 30 cananian 1.3a public static interface Node<N extends Node<N,E>,E extends Edge<N,E>> 31 cananian 1.1a { 32 cananian 1.1a /** Return a collection of edges leading to this node. */ 33 cananian 1.3a Collection<E> predC(); 34 cananian 1.1a /** Return a collection of edges leaving this node. */ 35 cananian 1.3a Collection<E> succC(); 36 cananian 1.1a 37 cananian 1.1a /** Return true iff the given node is a successor of this node. */ 38 cananian 1.1a boolean isSucc(N n); 39 cananian 1.1a /** Return true iff the given node is a predecessor of this node. */ 40 cananian 1.1a boolean isPred(N n); 41 cananian 1.1a } 42 cananian 1.1a 43 cananian 1.2a /** 44 cananian 1.2a * This class represents edges between <code>Node</code>s in a 45 cananian 1.2a * <code>Graph</code>. 46 cananian 1.2a * 47 cananian 1.2a * @author C. Scott Ananian <cananian@alumni.princeton.edu> 48 cananian 1.3 * @version $Id: Graph.java,v 1.3 2004/02/08 01:56:38 cananian Exp $ 49 cananian 1.2a */ 50 cananian 1.3a public static interface Edge<N extends Node<N,E>,E extends Edge<N,E>> 51 cananian 1.1a { 52 cananian 1.1a /** Returns the node this edge comes from. */ 53 cananian 1.1a N from(); 54 cananian 1.1a /** Returns the node this edges goes to. */ 55 cananian 1.1a N to(); 56 cananian 1.1a } 57 cananian 1.1a }