module Events.NullGuard (
NullGuardedChannel,
newNullGuardedChannel
) where
import Events.GuardedEvents
import Events.GuardedChannels
import Events.DeleteQueue
type NullGuardedChannel value = GuardedChannel () value
newNullGuardedChannel :: IO (NullGuardedChannel value)
newNullGuardedChannel = newNullGuardedChannelPrim (error "newNull")
newNullGuardedChannelPrim :: value -> IO (NullGuardedChannel value)
newNullGuardedChannelPrim (_ :: value) =
newGuardedChannel (error "newNull1" :: (GQ NullGuardQueue value))
(error "newNull2" :: (VQ (NullValueQueue value)))
instance Guard () where
nullGuard = ()
andGuard _ _ = ()
data NullValueQueue value valueCont =
NullValueQueue (DeleteQueue (value,valueCont))
emptyNullValueQueue :: NullValueQueue value a
emptyNullValueQueue = NullValueQueue emptyQueue
instance HasEmpty (NullValueQueue value) where
newEmpty = return emptyNullValueQueue
instance HasAdd (NullValueQueue value) value where
add (NullValueQueue deleteQueue) value valueCont =
do
(deleteQueue2,invalidate) <- addQueue deleteQueue (value,valueCont)
return (NullValueQueue deleteQueue2,invalidate)
instance HasRemove (NullValueQueue value) () value where
remove (NullValueQueue deleteQueue) () =
do
removed <- removeQueue deleteQueue
case removed of
Nothing -> return (Nothing,emptyNullValueQueue)
Just ((value,valueCont),deleteQueue2,deleteQueue0) ->
return (Just(value,valueCont,
return (NullValueQueue deleteQueue0)),
NullValueQueue deleteQueue2)
data NullGuardQueue guardCont = NullGuardQueue (DeleteQueue guardCont)
emptyNullGuardQueue :: NullGuardQueue a
emptyNullGuardQueue = NullGuardQueue emptyQueue
instance HasEmpty NullGuardQueue where
newEmpty = return emptyNullGuardQueue
instance HasAdd NullGuardQueue () where
add (NullGuardQueue deleteQueue) () guardCont =
do
(deleteQueue2,invalidate) <- addQueue deleteQueue guardCont
deleteQueue3 <- cleanQueue deleteQueue2
return (NullGuardQueue deleteQueue3,invalidate)
instance HasRemove NullGuardQueue value () where
remove (NullGuardQueue deleteQueue) value =
do
removed <- removeQueue deleteQueue
case removed of
Nothing -> return (Nothing,emptyNullGuardQueue)
Just (guardCont,deleteQueue2,deleteQueue0) ->
return (Just((),guardCont,
return (NullGuardQueue deleteQueue0)),
NullGuardQueue deleteQueue2)