1(* ========================================================================= *)
2(* FINITE MAPS                                                               *)
3(* Copyright (c) 2004-2006 Joe Hurd, distributed under the GNU GPL version 2 *)
4(* ========================================================================= *)
5
6signature Map =
7sig
8
9(* ------------------------------------------------------------------------- *)
10(* Finite maps                                                               *)
11(* ------------------------------------------------------------------------- *)
12
13type ('key,'a) map
14
15val new : ('key * 'key -> order) -> ('key,'a) map
16
17val null : ('key,'a) map -> bool
18
19val size : ('key,'a) map -> int
20
21val singleton : ('key * 'key -> order) -> 'key * 'a -> ('key,'a) map
22
23val inDomain : 'key -> ('key,'a) map -> bool
24
25val peek : ('key,'a) map -> 'key -> 'a option
26
27val insert : ('key,'a) map -> 'key * 'a -> ('key,'a) map
28
29val insertList : ('key,'a) map -> ('key * 'a) list -> ('key,'a) map
30
31val get : ('key,'a) map -> 'key -> 'a  (* raises Error *)
32
33(* Both union and intersect prefer keys in the second map *)
34
35val union :
36    ('a * 'a -> 'a option) -> ('key,'a) map -> ('key,'a) map -> ('key,'a) map
37
38val intersect :
39    ('a * 'a -> 'a option) -> ('key,'a) map -> ('key,'a) map -> ('key,'a) map
40
41val delete : ('key,'a) map -> 'key -> ('key,'a) map  (* raises Error *)
42
43val difference : ('key,'a) map -> ('key,'a) map -> ('key,'a) map
44
45val subsetDomain : ('key,'a) map -> ('key,'a) map -> bool
46
47val equalDomain : ('key,'a) map -> ('key,'a) map -> bool
48
49val mapPartial : ('key * 'a -> 'b option) -> ('key,'a) map -> ('key,'b) map
50
51val filter : ('key * 'a -> bool) -> ('key,'a) map -> ('key,'a) map
52
53val map : ('key * 'a -> 'b) -> ('key,'a) map -> ('key,'b) map
54
55val app : ('key * 'a -> unit) -> ('key,'a) map -> unit
56
57val transform : ('a -> 'b) -> ('key,'a) map -> ('key,'b) map
58
59val foldl : ('key * 'a * 's -> 's) -> 's -> ('key,'a) map -> 's
60
61val foldr : ('key * 'a * 's -> 's) -> 's -> ('key,'a) map -> 's
62
63val findl : ('key * 'a -> bool) -> ('key,'a) map -> ('key * 'a) option
64
65val findr : ('key * 'a -> bool) -> ('key,'a) map -> ('key * 'a) option
66
67val exists : ('key * 'a -> bool) -> ('key,'a) map -> bool
68
69val all : ('key * 'a -> bool) -> ('key,'a) map -> bool
70
71val domain : ('key,'a) map -> 'key list
72
73val toList : ('key,'a) map -> ('key * 'a) list
74
75val fromList : ('key * 'key -> order) -> ('key * 'a) list -> ('key,'a) map
76
77val nth : ('key,'a) map -> int -> 'key * 'a  (* raises Error *)
78
79val compare : ('a * 'a -> order) -> ('key,'a) map * ('key,'a) map -> order
80
81(* ------------------------------------------------------------------------- *)
82(* Iterators over maps                                                       *)
83(* ------------------------------------------------------------------------- *)
84
85type ('key,'a) iterator
86
87val mkIterator : ('key,'a) map -> ('key,'a) iterator option
88
89val mkRevIterator : ('key,'a) map -> ('key,'a) iterator option
90
91val readIterator : ('key,'a) iterator -> 'key * 'a
92
93val advanceIterator : ('key,'a) iterator -> ('key,'a) iterator option
94
95end
96