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 = |