summaryrefslogtreecommitdiffstats
path: root/tcllib/modules/struct/graph1.man
diff options
context:
space:
mode:
Diffstat (limited to 'tcllib/modules/struct/graph1.man')
-rw-r--r--tcllib/modules/struct/graph1.man375
1 files changed, 375 insertions, 0 deletions
diff --git a/tcllib/modules/struct/graph1.man b/tcllib/modules/struct/graph1.man
new file mode 100644
index 0000000..e548575
--- /dev/null
+++ b/tcllib/modules/struct/graph1.man
@@ -0,0 +1,375 @@
+[comment {-*- tcl -*-}]
+[manpage_begin {struct::graph_v1} n 1.2.1]
+[keywords cgraph]
+[keywords graph]
+[copyright {2002 Andreas Kupries <andreas_kupries@users.sourceforge.net>}]
+[moddesc {Tcl Data Structures}]
+[titledesc {Create and manipulate directed graph objects}]
+[category {Data structures}]
+[require Tcl 8.2]
+[require struct::graph [opt 1.2.1]]
+[description]
+[para]
+
+The [cmd ::struct::graph] command creates a new graph object with an
+associated global Tcl command whose name is [arg graphName]. This
+command may be used to invoke various operations on the graph. It has
+the following general form:
+
+[list_begin definitions]
+[call [cmd graphName] [arg option] [opt [arg "arg arg ..."]]]
+
+[arg Option] and the [arg arg]s determine the exact behavior of the
+command.
+
+[list_end]
+
+[para]
+
+A directed graph is a structure containing two collections of
+elements, called [emph nodes] and [emph arcs] respectively, together
+with a relation ("connectivity") that places a general structure upon
+the nodes and arcs.
+
+[para]
+
+Each arc is connected to two nodes, one of which is called the
+
+[emph source] and the other the [emph target]. This imposes a
+direction upon the arc, which is said to go from the source to the
+target. It is allowed that source and target of an arc are the same
+node. Such an arc is called a [emph loop]. Whenever a node is source
+or target of an arc both are said to be [emph adjacent]. This extends
+into a relation between nodes, i.e. if two nodes are connected through
+at least one arc they are said to be [emph adjacent] too.
+
+[para]
+
+Each node can be the source and target for any number of arcs. The
+former are called the [emph {outgoing arcs}] of the node, the latter
+the [emph {incoming arcs}] of the node. The number of edges in either
+set is called the [emph in-] resp. the [emph out-degree] of the node.
+
+[para]
+
+In addition to maintaining the node and arc relationships, this graph
+implementation allows any number of keyed values to be associated with
+each node and arc.
+
+[para]
+
+The following commands are possible for graph objects:
+
+[list_begin definitions]
+
+[call [arg graphName] [method destroy]]
+
+Destroy the graph, including its storage space and associated command.
+
+[call [arg graphName] [method {arc append}] [arg arc] [opt "-key [arg key]"] [arg value]]
+
+Appends a [arg value] to one of the keyed values associated with an
+[arg arc]. If no [arg key] is specified, the key [const data] is
+assumed.
+
+[call [arg graphName] [method {arc delete}] [arg arc] [opt "[arg arc] ..."]]
+
+Remove the specified arcs from the graph.
+
+[call [arg graphName] [method {arc exists}] [arg arc]]
+
+Return true if the specified [arg arc] exists in the graph.
+
+[call [arg graphName] [method {arc get}] [arg arc] [opt "-key [arg key]"]]
+
+Return the value associated with the key [arg key] for the [arg arc].
+If no key is specified, the key [const data] is assumed.
+
+[call [arg graphName] [method {arc getall}] [arg arc]]
+
+Returns a serialized list of key/value pairs (suitable for use with
+[lb][cmd {array set}][rb]) for the [arg arc].
+
+[call [arg graphName] [method {arc keys}] [arg arc]]
+
+Returns a list of keys for the [arg arc].
+
+[call [arg graphName] [method {arc keyexists}] [arg arc] [opt "-key [arg key]"]]
+
+Return true if the specified [arg key] exists for the [arg arc]. If no
+[arg key] is specified, the key [const data] is assumed.
+
+[call [arg graphName] [method {arc insert}] [arg start] [arg end] [opt [arg child]]]
+
+Insert an arc named [arg child] into the graph beginning at the node
+[arg start] and ending at the node [arg end]. If the name of the new
+arc is not specified the system will generate a unique name of the
+form [emph arc][arg x].
+
+[call [arg graphName] [method {arc lappend}] [arg arc] [opt "-key [arg key]"] [arg value]]
+
+Appends a [arg value] (as a list) to one of the keyed values
+associated with an [arg arc]. If no [arg key] is specified, the key
+[const data] is assumed.
+
+[call [arg graphName] [method {arc set}] [arg arc] [opt "-key [arg key]"] [opt [arg value]]]
+
+Set or get one of the keyed values associated with an arc. If no key
+is specified, the key [const data] is assumed. Each arc that is
+added to a graph has the empty string assigned to the key
+
+[const data] automatically. An arc may have any number of keyed
+values associated with it. If [arg value] is not specified, this
+command returns the current value assigned to the key; if [arg value]
+is specified, this command assigns that value to the key.
+
+[call [arg graphName] [method {arc source}] [arg arc]]
+
+Return the node the given [arg arc] begins at.
+
+[call [arg graphName] [method {arc target}] [arg arc]]
+
+Return the node the given [arg arc] ends at.
+
+[call [arg graphName] [method {arc unset}] [arg arc] [opt "-key [arg key]"]]
+
+Remove a keyed value from the arc [arg arc]. If no key is specified,
+the key [const data] is assumed.
+
+[call [arg graphName] [method arcs] [opt "-key [arg key]"] [opt "-value [arg value]"] [opt "-in|-out|-adj|-inner|-embedding [arg nodelist]"]]
+
+Return a list of arcs in the graph. If no restriction is specified a
+list containing all arcs is returned. Restrictions can limit the list
+of returned arcs based on the nodes that are connected by the arc, on
+the keyed values associated with the arc, or both. The restrictions
+that involve connected nodes have a list of nodes as argument,
+specified after the name of the restriction itself.
+
+[list_begin definitions]
+[def [option -in]]
+
+Return a list of all arcs whose target is one of the nodes in the
+[arg nodelist].
+
+[def [option -out]]
+
+Return a list of all arcs whose source is one of the nodes in the
+[arg nodelist].
+
+[def [option -adj]]
+
+Return a list of all arcs adjacent to at least one of the nodes in the
+[arg nodelist]. This is the union of the nodes returned by
+
+[option -in] and [option -out].
+
+[def [option -inner]]
+
+Return a list of all arcs adjacent to two of the nodes in the
+
+[arg nodelist]. This is the set of arcs in the subgraph spawned by the
+specified nodes.
+
+[def [option -embedding]]
+
+Return a list of all arcs adjacent to exactly one of the nodes in the
+[arg nodelist]. This is the set of arcs connecting the subgraph
+spawned by the specified nodes to the rest of the graph.
+
+[def "[option -key] [arg key]"]
+
+Limit the list of arcs that are returned to those arcs that have an
+associated key [arg key].
+
+[def "[option -value] [arg value]"]
+
+This restriction can only be used in combination with
+
+[option -key]. It limits the list of arcs that are returned to those
+arcs whose associated key [arg key] has the value [arg value].
+
+[list_end]
+[para]
+
+The restrictions imposed by either [option -in], [option -out],
+[option -adj], [option -inner], or [option -embedded] are applied
+first. Specifying more than one of them is illegal.
+
+At last the restrictions set via [option -key] (and [option -value])
+are applied.
+Specifying more than one [option -key] (and [option -value]) is
+illegal.
+
+[call [arg graphName] [method {node append}] [arg node] [opt "-key [arg key]"] [arg value]]
+
+Appends a [arg value] to one of the keyed values associated with an
+[arg node]. If no [arg key] is specified, the key [const data] is
+assumed.
+
+[call [arg graphName] [method {node degree}] [opt -in|-out] [arg node]]
+
+Return the number of arcs adjacent to the specified [arg node]. If one
+of the restrictions [option -in] or [option -out] is given only the
+incoming resp. outgoing arcs are counted.
+
+[call [arg graphName] [method {node delete}] [arg node] [opt "[arg node] ..."]]
+
+Remove the specified nodes from the graph. All of the nodes' arcs
+will be removed as well to prevent unconnected arcs.
+
+[call [arg graphName] [method {node exists}] [arg node]]
+
+Return true if the specified [arg node] exists in the graph.
+
+[call [arg graphName] [method {node get}] [arg node] [opt "-key [arg key]"]]
+
+Return the value associated with the key [arg key] for the [arg node].
+If no key is specified, the key [const data] is assumed.
+
+[call [arg graphName] [method {node getall}] [arg node]]
+
+Returns a serialized list of key/value pairs (suitable for use with
+[lb][cmd {array set}][rb]) for the [arg node].
+
+[call [arg graphName] [method {node keys}] [arg node]]
+
+Returns a list of keys for the [arg node].
+
+[call [arg graphName] [method {node keyexists}] [arg node] [opt "-key [arg key]"]]
+
+Return true if the specified [arg key] exists for the [arg node]. If
+no [arg key] is specified, the key [const data] is assumed.
+
+[call [arg graphName] [method {node insert}] [opt [arg child]]]
+
+Insert a node named [arg child] into the graph. The nodes has no arcs
+connected to it. If the name of the new child is not specified the
+system will generate a unique name of the form [emph node][arg x].
+
+[call [arg graphName] [method {node lappend}] [arg node] [opt "-key [arg key]"] [arg value]]
+
+Appends a [arg value] (as a list) to one of the keyed values
+associated with an [arg node]. If no [arg key] is specified, the key
+[const data] is assumed.
+
+[call [arg graphName] [method {node opposite}] [arg node] [arg arc]]
+
+Return the node at the other end of the specified [arg arc], which has
+to be adjacent to the given [arg node].
+
+[call [arg graphName] [method {node set}] [arg node] [opt "-key [arg key]"] [opt [arg value]]]
+
+Set or get one of the keyed values associated with a node. If no key
+is specified, the key [const data] is assumed. Each node that is
+added to a graph has the empty string assigned to the key
+
+[const data] automatically. A node may have any number of keyed
+values associated with it. If [arg value] is not specified, this
+command returns the current value assigned to the key; if [arg value]
+is specified, this command assigns that value to the key.
+
+[call [arg graphName] [method {node unset}] [arg node] [opt "-key [arg key]"]]
+
+Remove a keyed value from the node [arg node]. If no key is
+specified, the key [method data] is assumed.
+
+[call [arg graphName] [method nodes] [opt "-key [arg key]"] [opt "-value [arg value]"] [opt "-in|-out|-adj|-inner|-embedding [arg nodelist]"]]
+
+Return a list of nodes in the graph. Restrictions can limit the list
+of returned nodes based on neighboring nodes, or based on the keyed
+values associated with the node. The restrictions that involve
+neighboring nodes have a list of nodes as argument, specified after
+the name of the restriction itself.
+
+[para]
+
+The possible restrictions are the same as for method
+
+[method arcs]. The set of nodes to return is computed as the union of
+all source and target nodes for all the arcs satisfying the
+restriction as defined for [method arcs].
+
+[call [arg graphName] [method get] [opt "-key [arg key]"]]
+
+Return the value associated with the key [arg key] for the graph. If
+no key is specified, the key [const data] is assumed.
+
+[call [arg graphName] [method getall]]
+
+Returns a serialized list of key/value pairs (suitable for use with
+[lb][cmd {array set}][rb]) for the whole graph.
+
+[call [arg graphName] [method keys]]
+
+Returns a list of keys for the whole graph.
+
+[call [arg graphName] [method keyexists] [opt "-key [arg key]"]]
+
+Return true if the specified [arg key] exists for the whole graph. If no
+[arg key] is specified, the key [const data] is assumed.
+
+[call [arg graphName] [method set] [opt "-key [arg key]"] [opt [arg value]]]
+
+Set or get one of the keyed values associated with a graph. If no key
+is specified, the key [const data] is assumed. Each graph has the
+empty string assigned to the key [const data] automatically. A graph
+may have any number of keyed values associated with it. If [arg value]
+is not specified, this command returns the current value assigned to
+the key; if [arg value] is specified, this command assigns that value
+to the key.
+
+[call [arg graphName] [method swap] [arg node1] [arg node2]]
+
+Swap the position of [arg node1] and [arg node2] in the graph.
+
+[call [arg graphName] [method unset] [opt "-key [arg key]"]]
+
+Remove a keyed value from the graph. If no key is specified, the key
+[const data] is assumed.
+
+[call [arg graphName] [method walk] [arg node] [opt "-order [arg order]"] [opt "-type [arg type]"] [opt "-dir [arg direction]"] -command [arg cmd]]
+
+Perform a breadth-first or depth-first walk of the graph starting at
+the node [arg node] going in either the direction of outgoing or
+opposite to the incoming arcs.
+
+[para]
+
+The type of walk, breadth-first or depth-first, is determined by the
+value of [arg type]; [const bfs] indicates breadth-first,
+
+[const dfs] indicates depth-first. Depth-first is the default.
+
+[para]
+
+The order of the walk, pre-order, post-order or both-order is
+determined by the value of [arg order]; [const pre] indicates
+pre-order, [const post] indicates post-order, [const both] indicates
+both-order. Pre-order is the default. Pre-order walking means that a
+node is visited before any of its neighbors (as defined by the
+
+[arg direction], see below). Post-order walking means that a parent is
+visited after any of its neighbors. Both-order walking means that a
+node is visited before [emph and] after any of its neighbors. The
+combination of a bread-first walk with post- or both-order is illegal.
+
+[para]
+
+The direction of the walk is determined by the value of [arg dir];
+[const backward] indicates the direction opposite to the incoming
+arcs, [const forward] indicates the direction of the outgoing arcs.
+
+[para]
+
+As the walk progresses, the command [arg cmd] will be evaluated at
+each node, with the mode of the call ([const enter] or
+[const leave]) and values [arg graphName] and the name of the current
+node appended. For a pre-order walk, all nodes are [const enter]ed, for a
+post-order all nodes are left. In a both-order walk the first visit of
+a node [const enter]s it, the second visit [const leave]s it.
+
+[list_end]
+
+[vset CATEGORY {struct :: graph}]
+[include ../doctools2base/include/feedback.inc]
+[manpage_end]