Implement isFullTBQueue
authorAustin Seipp <aseipp@pobox.com>
Sat, 7 Sep 2013 00:28:54 +0000 (19:28 -0500)
committerAustin Seipp <aseipp@pobox.com>
Sat, 7 Sep 2013 00:28:56 +0000 (19:28 -0500)
This was proposed on the libraries@ mailing list by Merijn with no
objections.

Authored-by: Merijn Verstraaten <merijn@inconsistent.nl>
Signed-off-by: Austin Seipp <aseipp@pobox.com>
Control/Concurrent/STM/TBQueue.hs

index 82b46b3..028fd57 100644 (file)
@@ -38,6 +38,7 @@ module Control.Concurrent.STM.TBQueue (
        writeTBQueue,
         unGetTBQueue,
         isEmptyTBQueue,
+        isFullTBQueue,
   ) where
 
 import Data.Typeable
@@ -177,3 +178,15 @@ isEmptyTBQueue (TBQueue _rsize read _wsize write) = do
              case ys of
                [] -> return True
                _  -> return False
+
+-- |Returns 'True' if the supplied 'TBQueue' is full.
+isFullTBQueue :: TBQueue a -> STM Bool
+isFullTBQueue (TBQueue rsize _read wsize _write) = do
+  w <- readTVar wsize
+  if (w > 0)
+     then return False
+     else do
+         r <- readTVar rsize
+         if (r > 0)
+            then return False
+            else return True