src/Pure/General/table.ML
changeset 52049 156e12d5cb92
parent 50234 c97c5c34fb1d
child 55727 7e330ae052bb
equal deleted inserted replaced
52048:9003b293e775 52049:156e12d5cb92
    23   val map: (key -> 'a -> 'b) -> 'a table -> 'b table
    23   val map: (key -> 'a -> 'b) -> 'a table -> 'b table
    24   val fold: (key * 'b -> 'a -> 'a) -> 'b table -> 'a -> 'a
    24   val fold: (key * 'b -> 'a -> 'a) -> 'b table -> 'a -> 'a
    25   val fold_rev: (key * 'b -> 'a -> 'a) -> 'b table -> 'a -> 'a
    25   val fold_rev: (key * 'b -> 'a -> 'a) -> 'b table -> 'a -> 'a
    26   val dest: 'a table -> (key * 'a) list
    26   val dest: 'a table -> (key * 'a) list
    27   val keys: 'a table -> key list
    27   val keys: 'a table -> key list
    28   val min_key: 'a table -> key option
    28   val min: 'a table -> (key * 'a) option
    29   val max_key: 'a table -> key option
    29   val max: 'a table -> (key * 'a) option
    30   val get_first: (key * 'a -> 'b option) -> 'a table -> 'b option
    30   val get_first: (key * 'a -> 'b option) -> 'a table -> 'b option
    31   val exists: (key * 'a -> bool) -> 'a table -> bool
    31   val exists: (key * 'a -> bool) -> 'a table -> bool
    32   val forall: (key * 'a -> bool) -> 'a table -> bool
    32   val forall: (key * 'a -> bool) -> 'a table -> bool
    33   val lookup_key: 'a table -> key -> (key * 'a) option
    33   val lookup_key: 'a table -> key -> (key * 'a) option
    34   val lookup: 'a table -> key -> 'a option
    34   val lookup: 'a table -> key -> 'a option
   114 
   114 
   115 fun dest tab = fold_rev_table cons tab [];
   115 fun dest tab = fold_rev_table cons tab [];
   116 fun keys tab = fold_rev_table (cons o #1) tab [];
   116 fun keys tab = fold_rev_table (cons o #1) tab [];
   117 
   117 
   118 
   118 
   119 (* min/max keys *)
   119 (* min/max entries *)
   120 
   120 
   121 fun min_key Empty = NONE
   121 fun min Empty = NONE
   122   | min_key (Branch2 (Empty, (k, _), _)) = SOME k
   122   | min (Branch2 (Empty, p, _)) = SOME p
   123   | min_key (Branch3 (Empty, (k, _), _, _, _)) = SOME k
   123   | min (Branch3 (Empty, p, _, _, _)) = SOME p
   124   | min_key (Branch2 (left, _, _)) = min_key left
   124   | min (Branch2 (left, _, _)) = min left
   125   | min_key (Branch3 (left, _, _, _, _)) = min_key left;
   125   | min (Branch3 (left, _, _, _, _)) = min left;
   126 
   126 
   127 fun max_key Empty = NONE
   127 fun max Empty = NONE
   128   | max_key (Branch2 (_, (k, _), Empty)) = SOME k
   128   | max (Branch2 (_, p, Empty)) = SOME p
   129   | max_key (Branch3 (_, _, _, (k, _), Empty)) = SOME k
   129   | max (Branch3 (_, _, _, p, Empty)) = SOME p
   130   | max_key (Branch2 (_, _, right)) = max_key right
   130   | max (Branch2 (_, _, right)) = max right
   131   | max_key (Branch3 (_, _, _, _, right)) = max_key right;
   131   | max (Branch3 (_, _, _, _, right)) = max right;
   132 
   132 
   133 
   133 
   134 (* get_first *)
   134 (* get_first *)
   135 
   135 
   136 fun get_first f =
   136 fun get_first f =