1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| instance UAE Bool where
sizeBU (I# n#) _ = I# (bOOL_SCALE n#)
{-# INLINE indexBU #-}
indexBU (BUArr (I# s#) n ba#) i@(I# i#) =
check (here "indexBU[Bool]") n i $
(indexWordArray# ba# (bOOL_INDEX (s# +# i#)) `and#` bOOL_BIT (s# +# i#))
`neWord#` int2Word# 0#
{-# INLINE readMBU #-}
readMBU (MBUArr n mba#) i@(I# i#) =
check (here "readMBU[Bool]") n i $ ST $ \s# ->
case readWordArray# mba# (bOOL_INDEX i#) s# of {(# s2#, r# #) ->
(# s2#, (r# `and#` bOOL_BIT i#) `neWord#` int2Word# 0# #)}
{-# INLINE writeMBU #-}
writeMBU (MBUArr n mba#) i@(I# i#) e# =
checkCritical (here "writeMBU[Bool]") n i $ ST $ \s# ->
case bOOL_INDEX i# of {j# ->
case readWordArray# mba# j# s# of {(# s2#, v# #) ->
case if e# then v# `or#` bOOL_BIT i#
else v# `and#` bOOL_NOT_BIT i# of {v'# ->
case writeWordArray# mba# j# v'# s2# of {s3# ->
(# s3#, () #)}}}}
|