abstract object graph_node[Node <= graph_node[Node,Edge],
Edge <= graph_edge[Node,Edge]]
isa comparable[graph_node[Node,Edge]];
field in_edges (@:graph_node[`Node,`Edge]):m_set[Edge];
field out_edges(@:graph_node[`Node,`Edge]):m_set[Edge];
signature table_key(graph_node[`Node,`Edge]):string;
abstract object graph_edge[Node <= graph_node[Node,Edge],
Edge <= graph_edge[Node,Edge]]
isa comparable[graph_edge[Node,Edge]];
var field from_node(@:graph_edge[`Node,`Edge]):Node;
var field to_node(@:graph_edge[`Node,`Edge]):Node;
method =(e1@:graph_edge[`Node,`Edge], e2@:graph_edge[Node,Edge]):bool;
method add_edge(e@graph_edge[`Node,`Edge]:`Edge <= graph_edge[`Node,`Edge]
):void;
method remove_edge(e@graph_edge[`Node,`Edge]:`Edge <= graph_edge[`Node,`Edge]
):void;
abstract object graph[Node <= graph_node[Node,Edge],
Edge <= graph_edge[Node,Edge]];
var field nodes(@:graph[`Node,`Edge]):m_removable_table[string,Node];
method add_node(g@:graph[`Node,`Edge], node:Node):void;
method remove_node(g@:graph[`Node,`Edge], node:Node):void;
method add_edge(g@:graph[`Node,`Edge], e:Edge):void;
method remove_edge(g@:graph[`Node,`Edge], e:Edge):void;
method print_header(g@:graph[`Node,`Edge]):string;
method print_headers(g@:graph[`Node,`Edge]):string;
method print_string(g@:graph[`Node,`Edge]):string;
method print(g@:graph[`Node,`Edge]):void;
abstract object partial_order_node[Node <= partial_order_node[Node]]
isa graph_node[Node,partial_order_edge[Node]],
partially_ordered[partial_order_node[Node]],
hashable[partial_order_node[Node]];
var field marked(@:partial_order_node[`Node]):bool;
method up_nodes_do(t@:partial_order_node[`Node],
bl:&(Node):void):void;
method down_nodes_do(t@:partial_order_node[`Node],
bl:&(Node):void):void;
method traverse_up(t@partial_order_node[`Node]
:`Node <= partial_order_node[Node],
cl:&(Node):void):void;
method traverse_down(t@partial_order_node[`Node]
:`Node <= partial_order_node[Node],
cl:&(Node):void):void;
method order_print_string(t@:partial_order_node[`Node]):string;
template object partial_order_edge[Node <= partial_order_node[Node]]
isa graph_edge[Node,partial_order_edge[Node]];
method new_partial_order_edge(f@partial_order_node[`Node]
:`Node <= partial_order_node[Node],
t:Node):partial_order_edge[Node];
template object partial_order[Node <= partial_order_node[Node]];
field nodes(@:partial_order[`Node]):m_set[Node];
field tops(@:partial_order[`Node]):m_set[Node];
field bottoms(@:partial_order[`Node]):m_set[Node];
method add_node(t@:partial_order[`Node], node:Node):void;
method add_partial_order_edges(t@:partial_order[`Node]):void;
method add_edge(t@:partial_order[`Node], e:partial_order_edge[Node]):void;
method remove_edge(t@:partial_order[`Node], e:partial_order_edge[Node]):void;
method remove_node(t@:partial_order[`Node], node:Node):void;
method top_down_do(t@:partial_order[`Node], cl:&(Node):void):void;
method bottom_up_do(t@:partial_order[`Node], cl:&(Node):void):void;
method print_header(g@:partial_order[`Node]):string;
method print_headers(t@:partial_order[`Node]):string;
method print_string(t@:partial_order[`Node]):string;
method print(t@:partial_order[`Node]):void;
method clear_marks(g@:partial_order[`Node]):void;
method new_partial_order[Node <= partial_order_node[Node]]
():partial_order[Node];