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