net.walend.digraph
Interface CEDigraph

All Superinterfaces:
HasState
All Known Subinterfaces:
MutableCEDigraph
All Known Implementing Classes:
AbstractHashCEDigraph, MutableHashCEDigraph

public interface CEDigraph
extends HasState

CEDigraph is an interface for representing directed graphs of nodes linked by zero or one edge. Each node and edge must be a unique Object in the digraph. Reusing edges and nodes may produce unpredictable results.

By default, this digraph uses equals() as the method to determine identity. Persistent versions may use hasSameIdentity() instead, for example.

One could create a subclass of CEDigraph that will work with zero or more edges by extending this interface. I have not done that.

Direct implementations of CEDigraph should have a single constructor that takes a CEDigraph as a parameter. Some implementations should provide a view of this CEDigraph, by implementing the net.walend.collection.View interface. Others should copy the parameter to produced an immutable CEDigraph.

Since:
20010612
Author:
David Walend

Field Summary
static CEDigraph EMPTY
           
 
Method Summary
 boolean containsCEDigraph(CEDigraph digraph)
          Returns true if digraph is a subgraph of this CEDigraph.
 boolean containsEdge(java.lang.Object fromNode, java.lang.Object toNode)
          Returns true if the digraph contains any edge from fromNode to toNode
 boolean containsEdge(java.lang.Object fromNode, java.lang.Object toNode, java.lang.Object edge)
          Returns true if edge links fromNode to toNode
 boolean containsNode(java.lang.Object node)
           
 boolean containsNodes(Set nodes)
           
 int countInboundEdges(java.lang.Object node)
           
 int countOutboundEdges(java.lang.Object node)
           
 int edgeCount()
           
 EdgeIterator edgeIterator()
           
 java.lang.Object getEdge(java.lang.Object fromNode, java.lang.Object toNode)
          Returns null if either node is not in the digraph or if no edge links fromNode to toNode
 Set getFromNodes(java.lang.Object node)
          Returns the set of nodes that can reach this node by crossing one edge.
 Set getInboundEdges(java.lang.Object node)
          Returns the empty set if node is not in the digraph, or if node has no inbound edges.
 Set getNodes()
           
 Set getOutboundEdges(java.lang.Object node)
          Returns the empty set if node is not in the digraph, or if node has no outbound edges.
 Set getToNodes(java.lang.Object node)
          Returns the set of nodes that can be reached from this node by crossing one edge.
 CEDigraph intersectWithCEDigraph(CEDigraph digraph)
          Returns a new digraph that is the intersection of this with digraph.
 boolean isEdgeFree()
          Returns true if this CEDigraph has no edges.
 boolean isEmpty()
           
 int nodeCount()
           
 java.util.Iterator nodeIterator()
          Implementations should explicitly state how they interpret nodeIterator()'s remove method.
 boolean sameCEDigraphAs(CEDigraph digraph)
          Returns true if digraph is the same as this; that is, if this.containsCEDigraph(digraph) and digraph.containsCEDigraph(this).
 CEDigraph unionCEDigraph(CEDigraph digraph)
          Returns a new digraph that is the union of this with digraph.
 
Methods inherited from interface net.walend.collection.HasState
getPrincipleInterface, sameStateAs
 

Field Detail

EMPTY

public static final CEDigraph EMPTY
Method Detail

nodeCount

public int nodeCount()

edgeCount

public int edgeCount()

isEmpty

public boolean isEmpty()

containsNode

public boolean containsNode(java.lang.Object node)

containsEdge

public boolean containsEdge(java.lang.Object fromNode,
                            java.lang.Object toNode)
                     throws NodeMissingException
Returns true if the digraph contains any edge from fromNode to toNode

Throws:
NodeMissingException - if either node is missing from the digraph.

containsEdge

public boolean containsEdge(java.lang.Object fromNode,
                            java.lang.Object toNode,
                            java.lang.Object edge)
                     throws NodeMissingException
Returns true if edge links fromNode to toNode

Throws:
NodeMissingException - if either node is missing from the digraph.

countInboundEdges

public int countInboundEdges(java.lang.Object node)
                      throws NodeMissingException
Throws:
NodeMissingException - if node is not in the digraph.

countOutboundEdges

public int countOutboundEdges(java.lang.Object node)
                       throws NodeMissingException
Throws:
NodeMissingException - if node is not in the digraph.

getInboundEdges

public Set getInboundEdges(java.lang.Object node)
                    throws NodeMissingException
Returns the empty set if node is not in the digraph, or if node has no inbound edges.

Throws:
NodeMissingException - if node is not in the digraph.

getOutboundEdges

public Set getOutboundEdges(java.lang.Object node)
                     throws NodeMissingException
Returns the empty set if node is not in the digraph, or if node has no outbound edges.

Throws:
NodeMissingException - if node is not in the digraph.

getEdge

public java.lang.Object getEdge(java.lang.Object fromNode,
                                java.lang.Object toNode)
                         throws NodeMissingException
Returns null if either node is not in the digraph or if no edge links fromNode to toNode

Throws:
NodeMissingException - if either node is missing from the digraph.

getFromNodes

public Set getFromNodes(java.lang.Object node)
                 throws NodeMissingException
Returns the set of nodes that can reach this node by crossing one edge.

Throws:
NodeMissingException - if node is not in the digraph.

getToNodes

public Set getToNodes(java.lang.Object node)
               throws NodeMissingException
Returns the set of nodes that can be reached from this node by crossing one edge.

Throws:
NodeMissingException - if node is not in the digraph.

nodeIterator

public java.util.Iterator nodeIterator()
Implementations should explicitly state how they interpret nodeIterator()'s remove method. It should either throw an UnsupportedOperationException or cause a hidden side effect of removing edges.


edgeIterator

public EdgeIterator edgeIterator()

getNodes

public Set getNodes()

isEdgeFree

public boolean isEdgeFree()
Returns true if this CEDigraph has no edges.


containsNodes

public boolean containsNodes(Set nodes)

containsCEDigraph

public boolean containsCEDigraph(CEDigraph digraph)
Returns true if digraph is a subgraph of this CEDigraph.


sameCEDigraphAs

public boolean sameCEDigraphAs(CEDigraph digraph)
Returns true if digraph is the same as this; that is, if this.containsCEDigraph(digraph) and digraph.containsCEDigraph(this).


intersectWithCEDigraph

public CEDigraph intersectWithCEDigraph(CEDigraph digraph)
Returns a new digraph that is the intersection of this with digraph. Implementations should generally return the same implementation of CEDigraph as they have themselves.


unionCEDigraph

public CEDigraph unionCEDigraph(CEDigraph digraph)
Returns a new digraph that is the union of this with digraph. Implementations should generally return the same implementation of CEDigraph as they are themselves. If the digraphs contain conflicting edges, then (unless you have a better rule) let digraph's edge win out.



Copyright (c) 2000, 2001, David Walend