src/Pure/General/graph.ML
changeset 23655 d2d1138e0ddc
parent 21935 4e20a5397b57
child 23964 d2df2797519b
equal deleted inserted replaced
23654:a2ad1c166ac8 23655:d2d1138e0ddc
     8 signature GRAPH =
     8 signature GRAPH =
     9 sig
     9 sig
    10   type key
    10   type key
    11   type 'a T
    11   type 'a T
    12   exception DUP of key
    12   exception DUP of key
    13   exception DUPS of key list
       
    14   exception SAME
    13   exception SAME
    15   exception UNDEF of key
    14   exception UNDEF of key
    16   val empty: 'a T
    15   val empty: 'a T
    17   val keys: 'a T -> key list
    16   val keys: 'a T -> key list
    18   val dest: 'a T -> (key * key list) list
    17   val dest: 'a T -> (key * key list) list
    34   val default_node: key * 'a -> 'a T -> 'a T
    33   val default_node: key * 'a -> 'a T -> 'a T
    35   val del_nodes: key list -> 'a T -> 'a T                             (*exception UNDEF*)
    34   val del_nodes: key list -> 'a T -> 'a T                             (*exception UNDEF*)
    36   val is_edge: 'a T -> key * key -> bool
    35   val is_edge: 'a T -> key * key -> bool
    37   val add_edge: key * key -> 'a T -> 'a T
    36   val add_edge: key * key -> 'a T -> 'a T
    38   val del_edge: key * key -> 'a T -> 'a T
    37   val del_edge: key * key -> 'a T -> 'a T
    39   val merge: ('a * 'a -> bool) -> 'a T * 'a T -> 'a T                 (*exception DUPS*)
    38   val merge: ('a * 'a -> bool) -> 'a T * 'a T -> 'a T                 (*exception DUP*)
    40   val join: (key -> 'a * 'a -> 'a) (*exception DUP/SAME*) ->
    39   val join: (key -> 'a * 'a -> 'a) (*exception DUP/SAME*) ->
    41     'a T * 'a T -> 'a T                                               (*exception DUPS*)
    40     'a T * 'a T -> 'a T                                               (*exception DUP*)
    42   val irreducible_paths: 'a T -> key * key -> key list list
    41   val irreducible_paths: 'a T -> key * key -> key list list
    43   val all_paths: 'a T -> key * key -> key list list
    42   val all_paths: 'a T -> key * key -> key list list
    44   exception CYCLES of key list list
    43   exception CYCLES of key list list
    45   val add_edge_acyclic: key * key -> 'a T -> 'a T                     (*exception CYCLES*)
    44   val add_edge_acyclic: key * key -> 'a T -> 'a T                     (*exception CYCLES*)
    46   val add_deps_acyclic: key * key list -> 'a T -> 'a T                (*exception CYCLES*)
    45   val add_deps_acyclic: key * key list -> 'a T -> 'a T                (*exception CYCLES*)
    76 (* graphs *)
    75 (* graphs *)
    77 
    76 
    78 datatype 'a T = Graph of ('a * (key list * key list)) Table.table;
    77 datatype 'a T = Graph of ('a * (key list * key list)) Table.table;
    79 
    78 
    80 exception DUP = Table.DUP;
    79 exception DUP = Table.DUP;
    81 exception DUPS = Table.DUPS;
       
    82 exception UNDEF = Table.UNDEF;
    80 exception UNDEF = Table.UNDEF;
    83 exception SAME = Table.SAME;
    81 exception SAME = Table.SAME;
    84 
    82 
    85 val empty = Graph Table.empty;
    83 val empty = Graph Table.empty;
    86 fun keys (Graph tab) = Table.keys tab;
    84 fun keys (Graph tab) = Table.keys tab;