src/Tools/Metis/src/KeyMap.sml
changeset 39347 50dec19e682b
parent 39346 d837998f1e60
child 39348 6f9c9899f99f
equal deleted inserted replaced
39346:d837998f1e60 39347:50dec19e682b
     1 (* ========================================================================= *)
       
     2 (* FINITE MAPS WITH A FIXED KEY TYPE                                         *)
       
     3 (* Copyright (c) 2004-2006 Joe Hurd, distributed under the BSD License *)
       
     4 (* ========================================================================= *)
       
     5 
       
     6 functor KeyMap (Key : Ordered) :> KeyMap where type key = Key.t =
       
     7 struct
       
     8 
       
     9 (*isabelle open Metis;*)
       
    10 
       
    11 type key = Key.t;
       
    12 
       
    13 (* ------------------------------------------------------------------------- *)
       
    14 (* Finite maps                                                               *)
       
    15 (* ------------------------------------------------------------------------- *)
       
    16 
       
    17 type 'a map = (Key.t,'a) Map.map;
       
    18 
       
    19 fun new () = Map.new Key.compare;
       
    20 
       
    21 val null = Map.null;
       
    22 
       
    23 val size = Map.size;
       
    24 
       
    25 fun singleton key_value = Map.singleton Key.compare key_value;
       
    26 
       
    27 val inDomain = Map.inDomain;
       
    28 
       
    29 val peek = Map.peek;
       
    30 
       
    31 val insert = Map.insert;
       
    32 
       
    33 val insertList = Map.insertList;
       
    34 
       
    35 val get = Map.get;
       
    36 
       
    37 (* Both union and intersect prefer keys in the second map *)
       
    38 
       
    39 val union = Map.union;
       
    40 
       
    41 val intersect = Map.intersect;
       
    42 
       
    43 val delete = Map.delete;
       
    44 
       
    45 val difference = Map.difference;
       
    46 
       
    47 val subsetDomain = Map.subsetDomain;
       
    48 
       
    49 val equalDomain = Map.equalDomain;
       
    50 
       
    51 val mapPartial = Map.mapPartial;
       
    52 
       
    53 val filter = Map.filter;
       
    54 
       
    55 val map = Map.map;
       
    56 
       
    57 val app = Map.app;
       
    58 
       
    59 val transform = Map.transform;
       
    60 
       
    61 val foldl = Map.foldl;
       
    62 
       
    63 val foldr = Map.foldr;
       
    64 
       
    65 val findl = Map.findl;
       
    66 
       
    67 val findr = Map.findr;
       
    68 
       
    69 val firstl = Map.firstl;
       
    70 
       
    71 val firstr = Map.firstr;
       
    72 
       
    73 val exists = Map.exists;
       
    74 
       
    75 val all = Map.all;
       
    76 
       
    77 val domain = Map.domain;
       
    78 
       
    79 val toList = Map.toList;
       
    80 
       
    81 fun fromList l = Map.fromList Key.compare l;
       
    82 
       
    83 val compare = Map.compare;
       
    84 
       
    85 val equal = Map.equal;
       
    86 
       
    87 val random = Map.random;
       
    88 
       
    89 val toString = Map.toString;
       
    90 
       
    91 (* ------------------------------------------------------------------------- *)
       
    92 (* Iterators over maps                                                       *)
       
    93 (* ------------------------------------------------------------------------- *)
       
    94 
       
    95 type 'a iterator = (Key.t,'a) Map.iterator;
       
    96 
       
    97 val mkIterator = Map.mkIterator;
       
    98 
       
    99 val mkRevIterator = Map.mkRevIterator;
       
   100 
       
   101 val readIterator = Map.readIterator;
       
   102 
       
   103 val advanceIterator = Map.advanceIterator;
       
   104 
       
   105 end
       
   106 
       
   107 (*isabelle structure Metis = struct open Metis*)
       
   108 
       
   109 structure IntMap =
       
   110 KeyMap (IntOrdered);
       
   111 
       
   112 structure StringMap =
       
   113 KeyMap (StringOrdered);
       
   114 
       
   115 (*isabelle end;*)