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 }