(* $Id: uMap.mli,v 1.1 2003/12/19 17:24:34 yori Exp $ *) (* Copyright 2002, 2003 Yamagata Yoriyuki. distributed with LGPL *) (** Maps over Unicode characters. *) type 'a t val empty : 'a t val is_empty : 'a t -> bool (** [add ?eq u v m] returns the new map which is same to [m] except it maps [u] to some value [v'] which satisfies [eq v v']. If [eq] is not supplied, structural equality is used. *) val add : ?eq:('a -> 'a -> bool) -> UChar.t -> 'a -> 'a t -> 'a t (** [add ?eq u1 u2 v m] returns the new map which is same to [m] except it maps characters in the range [u1]-[u2] to some value [v'] which satisfies [eq v v']. If [eq] is not supplied, structural equality is used. *) val add_range : ?eq:('a -> 'a -> bool) -> UChar.t -> UChar.t -> 'a -> 'a t -> 'a t val find : UChar.t -> 'a t -> 'a val remove : UChar.t -> 'a t -> 'a t (** [remove_range u1 u2 m] removes [u1]-[u2] from the domain of [m] *) val remove_range : UChar.t -> UChar.t -> 'a t -> 'a t (** [from u m] restricts the domain of [m] to the characters whose code points are equal or greater than [u]. *) val from : UChar.t -> 'a t -> 'a t (** [after u m] restricts the domain of [m] to the characters whose code points are greater than [u]. *) val after : UChar.t -> 'a t -> 'a t (** [until u m] restricts the domain of [m] to the characters whose code points are equal or smaller than [u]. *) val until : UChar.t -> 'a t -> 'a t (** [before u m] restricts the domain of [m] to the characters whose code points are smaller than [u]. *) val before : UChar.t -> 'a t -> 'a t val mem : UChar.t -> 'a t -> bool val iter : (UChar.t -> 'a -> unit) -> 'a t -> unit (** [iter proc m] : For each contingent region [u1]-[u2] that is mapped to a constant [v], [proc u1 u2 v] is called. The order of call is determined by increasing order on [u1]. *) val iter_range : (UChar.t -> UChar.t -> 'a -> unit) -> 'a t -> unit (** [map ?eq f m] and [mapi ?eq f m] : Similar to [map] and [mapi] in stdlib Map, but if the map [m'] is returned, it is only guaranteed that [eq (find u m') (f (find u m ))] is true for [map] and [eq (find u m') (f u (find u m ))] is true for [mapi]. If [eq] is not specified, structural equality is used. *) val map : ?eq:('b -> 'b -> bool) -> ('a -> 'b) -> 'a t -> 'b t val mapi : ?eq:('b -> 'b -> bool) -> (UChar.t -> 'a -> 'b) -> 'a t -> 'b t val fold : (UChar.t -> 'b -> 'a -> 'a) -> 'b t -> 'a -> 'a (** [fold_range f m x] is equivalent to [f u_(2n) u_(2n+1) v_n (... (f u_1 u_2 v_1 x))] where all characters in the range [u_(2k)]-[u_(2k+1)] are mapped to [v_k] and [u_1] < [u_3] < ... in code point order. For each range [u_(2k)]-[u_(2k+1)] is separated by a character which is not mapped to [v_k]. *) val fold_range : (UChar.t -> UChar.t -> 'b -> 'a -> 'a) -> 'b t -> 'a -> 'a (** Constant map.*) val set_to_map : USet.t -> 'a -> 'a t (** Domain. *) val domain : 'a t -> USet.t (** [map_to_set p m] returns the set of characters which are mapped to values satisfying the predicate [p] by [m]. *) val map_to_set : ('a -> bool) -> 'a t -> USet.t val umap_of_imap : 'a IMap.t -> 'a t val imap_of_umap : 'a t -> 'a IMap.t