<!-- char-map.mldoc --> <!-- Entities.sgml entry <!ENTITY CharMap SDATA "char-map-sig.sml"> --> <!DOCTYPE ML-DOC SYSTEM> <COPYRIGHT OWNER="Bell Labs, Lucent Technologies" YEAR=1998> <VERSION VERID="1.0" YEAR=1998 MONTH=6 DAY=11> <TITLE>The CharMap structure</TITLE> <INTERFACE> <HEAD>The <CD/CharMap/ structure</HEAD> <SEEALSO> <STRREF TOPID DOCUMENT=SML-BASIS-DOC/Char/ </SEEALSO> <PP> The <STRREF NOLINK/CharMap/ structure provides fast, read-only maps from characters to values. <STRUCTURE STRID="CharMap"> <OPAQUE> <SIGBODY SIGID="CHAR_MAP" FILE=CHAR-MAP> <SPEC> <TYPE><TYPARAM>'a<ID>char_map <SPEC> <VAL>mkCharMap<TY>{default : 'a, bindings : (string * 'a) list} -> 'a char_map <COMMENT> <PROTOTY> mkCharMap {<ARG/default/, <ARG/bindings/} </PROTOTY> makes a character map that maps the bound characters to their bindings and maps everything else to the default value. Specifically, if <CD/c/ is a character and <CD/(str,v)/ is an item in <ARG/bindings/ with <CD/c/ in <CD/str/, then <CD/c/ will be mapped to <CD/v/. Otherwise, <CD/c/ is mapped to <ARG/default/. <PP> Note that the <ARG/bindings/ list is processed from left to right, so if a character appears in multiple strings, the binding specified by the rightmost one will be the one used in the map. <SPEC> <VAL>mapChr<TY>'a char_map -> char -> 'a <COMMENT> <PROTOTY> mapChr <ARG/cm/ <ARG/c/ </PROTOTY> maps the given character. <SPEC> <VAL>mapStrChr<TY>'a char_map -> (string * int) -> 'a <COMMENT> <PROTOTY> mapStrChr <ARG/cm/ (<ARG/s/, <ARG/i/) </PROTOTY> is equivalent to <CODE> mapChr cm (String.sub(s, i))) </CODE> </STRUCTURE> </INTERFACE>