home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / sml_nj / 93src.lha / src / util / intset.sml < prev    next >
Encoding:
Text File  |  1993-01-27  |  885 b   |  33 lines

  1. (* Copyright 1989 by AT&T Bell Laboratories *)
  2. structure Intset : sig type intset
  3.                 val new : unit -> intset
  4.                 val add : intset -> int -> unit
  5.             val rmv : intset -> int -> unit
  6.             val mem : intset -> int -> bool
  7.            end =
  8.  
  9. struct
  10.   open Array List
  11.   infix 9 sub
  12.  
  13.   val p = 211
  14.   type intset = int list array
  15.   fun new () = array(p,nil : int list)
  16.   fun add a i = let val index = i mod p in update(a,index,i::(a sub index)) end
  17.   fun mem a i = exists (fn j => j=i) (a sub (i mod p))
  18.   fun rmv a i = let fun f (j::r) = if i=j then f r else j :: f r
  19.                   | f nil = nil
  20.             val index = i mod p
  21.          in update(a,index, f(a sub index))
  22.         end
  23. (*
  24.   type intset = unit Intmap.intmap
  25.   exception NO
  26.   fun new () =  Intmap.new(32, NO)
  27.   fun add a i = Intmap.add a (i,())
  28.   fun mem a i = (Intmap.map a i; true) handle NO => false
  29.   fun rmv a i = Intmap.rem a i
  30. *)
  31. end
  32.  
  33.