--
-- Fast write-buffered Handles
--
--- (c) The University of Glasgow 2005
+-- (c) The University of Glasgow 2005-2006
--
-- This is a simple abstraction over Handles that offers very fast write
-- buffering, but without the thread safety that Handles provide. It's used
import FastString
import FastMutInt
-import Panic ( panic )
-import Monad ( when )
-import Char ( ord )
+import Control.Monad ( when )
+import Data.Char ( ord )
import Foreign
-import IO
+import System.IO
import GHC.IOBase ( IO(..) )
-import System.IO ( hPutBuf )
import GHC.Ptr ( Ptr(..) )
-import GLAEXTS ( Int(..), Int#, Addr# )
+import GHC.Exts ( Int(..), Int#, Addr# )
-- -----------------------------------------------------------------------------
writeFastMutInt r 0
return (BufHandle ptr r hdl)
-buf_size = 8192 :: Int
+buf_size :: Int
+buf_size = 8192
#define STRICT2(f) f a b | a `seq` b `seq` False = undefined
#define STRICT3(f) f a b c | a `seq` b `seq` c `seq` False = undefined
bPutStr :: BufHandle -> String -> IO ()
STRICT2(bPutStr)
-bPutStr b@(BufHandle buf r hdl) str = do
+bPutStr (BufHandle buf r hdl) str = do
i <- readFastMutInt r
loop str i
where loop _ i | i `seq` False = undefined
writeFastMutInt r (i+len)
bFlush :: BufHandle -> IO ()
-bFlush b@(BufHandle buf r hdl) = do
+bFlush (BufHandle buf r hdl) = do
i <- readFastMutInt r
when (i > 0) $ hPutBuf hdl buf i
free buf