File: bitmap.sml

package info (click to toggle)
smlnj 110.79-8
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, sid
  • size: 82,564 kB
  • sloc: ansic: 32,532; asm: 6,314; sh: 2,296; makefile: 1,821; perl: 1,170; pascal: 295; yacc: 190; cs: 78; python: 77; lisp: 19
file content (18 lines) | stat: -rw-r--r-- 699 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   structure BM =
   struct
      structure W8A = Word8Array
      structure W8  = Word8
      structure W   = Word
      fun create N = W8A.array(W.toIntX(W.>>(W.fromInt(N + 7), 0w3)), 0w0) 
      fun markAndTest(bitmap,i) = 
      let val byte = W.toIntX(W.>>(W.fromInt i,0w3))
          val mask = W8.<<(0w1, W.andb(W.fromInt i,0w7))
          val n    = W8A.sub(bitmap, byte)
      in  W8.andb(n, mask) <> 0w0 orelse
          (W8A.update(bitmap, byte, W8.orb(n, mask)); false)
      end
      fun contains(bitmap,i) = 
      let val byte = W.toIntX(W.>>(W.fromInt i,0w3))
          val mask = W8.<<(0w1, W.andb(W.fromInt i,0w7))
      in  W8.andb(W8A.sub(bitmap, byte), mask) <> 0w0 end
   end