Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/src/smlnj-lib/Util/hash-table-rep.sml
ViewVC logotype

Diff of /sml/trunk/src/smlnj-lib/Util/hash-table-rep.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 595, Wed Apr 5 03:30:17 2000 UTC revision 596, Wed Apr 5 14:36:19 2000 UTC
# Line 48  Line 48 
48      val foldi : ('a * 'b * 'c -> 'c) -> 'c -> ('a, 'b) table -> 'c      val foldi : ('a * 'b * 'c -> 'c) -> 'c -> ('a, 'b) table -> 'c
49      val fold : ('a * 'b -> 'b) -> 'b -> ('c, 'a) table -> 'b      val fold : ('a * 'b -> 'b) -> 'b -> ('c, 'a) table -> 'b
50    
51      val filteri : ('a * 'b -> bool) -> ('a, 'b) table -> unit      val modify  : ('b -> 'b) -> ('a, 'b) table -> unit
52      val filter : ('a -> bool) -> ('b,'a) table -> unit      val modifyi : (('a * 'b) -> 'b) -> ('a, 'b) table -> unit
53    
54        val filteri : ('a * 'b -> bool) -> ('a, 'b) table -> int
55        val filter : ('a -> bool) -> ('b,'a) table -> int
56    
57      val copy : ('a, 'b) table -> ('a, 'b) table      val copy : ('a, 'b) table -> ('a, 'b) table
58    
# Line 184  Line 187 
187              Array.foldl foldF init table              Array.foldl foldF init table
188            end            end
189    
190      (* modify the hash-table items in place *)
191        fun modify f table = let
192              fun modifyF NIL = NIL
193                | modifyF (B(hash, key, item, rest)) = B(hash, key, f item, modifyF rest)
194              in
195                Array.modify modifyF table
196              end
197        fun modifyi f table = let
198              fun modifyF NIL = NIL
199                | modifyF (B(hash, key, item, rest)) =
200                    B(hash, key, f(key, item), modifyF rest)
201              in
202                Array.modify modifyF table
203              end
204    
205    (* remove any hash table items that do not satisfy the given    (* remove any hash table items that do not satisfy the given
206     * predicate.     * predicate.  Return the number of items left in the table.
207     *)     *)
208      fun filteri pred table = let      fun filteri pred table = let
209              val nItems = ref 0
210            fun filterP NIL = NIL            fun filterP NIL = NIL
211              | filterP (B(hash, key, item, rest)) = if (pred(key, item))              | filterP (B(hash, key, item, rest)) = if (pred(key, item))
212                  then B(hash, key, item, filterP rest)                  then (
213                      nItems := !nItems+1;
214                      B(hash, key, item, filterP rest))
215                  else filterP rest                  else filterP rest
216            in            in
217              Array.modify filterP table              Array.modify filterP table;
218                !nItems
219            end (* filteri *)            end (* filteri *)
220      fun filter pred table = let      fun filter pred table = let
221              val nItems = ref 0
222            fun filterP NIL = NIL            fun filterP NIL = NIL
223              | filterP (B(hash, key, item, rest)) = if (pred item)              | filterP (B(hash, key, item, rest)) = if (pred item)
224                  then B(hash, key, item, filterP rest)                  then (
225                      nItems := !nItems+1;
226                      B(hash, key, item, filterP rest))
227                  else filterP rest                  else filterP rest
228            in            in
229              Array.modify filterP table              Array.modify filterP table;
230                !nItems
231            end (* filter *)            end (* filter *)
232    
233    (* Create a copy of a hash table *)    (* Create a copy of a hash table *)

Legend:
Removed from v.595  
changed lines
  Added in v.596

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0