abs_ugraph.sa
Generated by gen_html_sa_files from ICSI. Contact gomes@icsi.berkeley.edu for details
---------------------------> Sather 1.1 source file <--------------------------
-- Author: Benedict A. Gomes <gomes@icsi.berkeley.edu>
-- COPYRIGHT NOTICE: This code is provided WITHOUT ANY WARRANTY
-- and is subject to the terms of the SATHER LIBRARY GENERAL PUBLIC
-- LICENSE contained in the file: Sather/Doc/License of the
-- Sather distribution. The license is also available from ICSI,
-- 1947 Center St., Suite 600, Berkeley CA 94704, USA.
abstract class $RO_UGRAPH{NTP} < $GRAPH{NTP,UEDGE{NTP}}
abstract class $RO_UGRAPH{NTP} < $GRAPH{NTP,UEDGE{NTP}} is
-- Undirected graphs. NTP indicates the type of the node index
-- which is used internally by a graph implementation to access
-- its
--
-- Since there is no valid subtyping relationship between ugraphs
-- and digraphs (neither is a proper subtype of the other) and due
-- to the subtle relationships between them, there is no subtyping
-- relationship between directed and undirected graphs. We (will)
-- provide explicit conversion methods and adaptor "views" to see a
-- digraph as an undirected graph and vice versa
copy: $RO_UGRAPH{NTP};
-- Return a copy of the graph
equals(g: $RO_UGRAPH{NTP}): BOOL;
-- Return true if self = "g" i.e. if all the nodes and edges are equal
-- (by is_eq)
end;
abstract class $UGRAPH{NTP} < $RO_UGRAPH{NTP}
abstract class $UGRAPH{NTP} < $RO_UGRAPH{NTP} is
-- A modifiable undirected graph. It has edges of type UEDGE{NTP},
-- which are simply unordered pairs of nodes
add_node: NTP;
-- Add a node to the graph and return the node index, which is an
-- internal reference to the node (used within the graph implementation)
add_node(n: NTP): NTP;
-- Add a node to the graph and return the new node index, which is an
-- internal reference to the node (used within the graph implementation)
-- The node that is returned may or may not be the same as the node
-- "n" that is passed in as an argument.
connect(e: UEDGE{NTP});
-- Connect the nodes specified by edge "e". i.e. create an edge
-- between e.first and e.second
-- Usage: g: DIGRAPH{INT} := #;
-- n3 ::= g.add_node;
-- n4 ::= g.add_node;
-- g.connect(#DIEDGE{INT}(n3,n4));
-- Note that UGRAPH_INCL has wrappers to allow you to write g.connect(n3,n4);
delete_node(n: NTP);
-- Delete the node "n" from the graph, and any associated edges
disconnect(e: UEDGE{NTP});
-- Remove the edge "e" from the graph, from between nodes
-- e.first and e.second
end;