summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkrasimir <krasimir@chalmers.se>2009-01-22 15:01:41 +0000
committerkrasimir <krasimir@chalmers.se>2009-01-22 15:01:41 +0000
commit418b33f9ae6addd8e3289a3dc781c3b7dbe1dd33 (patch)
tree68295047d0dfa2e8f6ad04d87237f83b14e21ee2 /src
parent8155d3b2120ea1ff2270ec48fef97ac045f05b98 (diff)
optimized Data.Binary.Get.getWord8
Diffstat (limited to 'src')
-rw-r--r--src/Data/Binary/Get.hs10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/Data/Binary/Get.hs b/src/Data/Binary/Get.hs
index d92567e45..bdc07d985 100644
--- a/src/Data/Binary/Get.hs
+++ b/src/Data/Binary/Get.hs
@@ -416,7 +416,15 @@ getPtr n = do
-- | Read a Word8 from the monad state
getWord8 :: Get Word8
-getWord8 = getPtr (sizeOf (undefined :: Word8))
+getWord8 = do
+ S s ss bytes <- get
+ case B.uncons s of
+ Just (w,rest) -> do put $! S rest ss (bytes + 1)
+ return $! w
+ Nothing -> case L.uncons ss of
+ Just (w,rest) -> do put $! mkState rest (bytes + 1)
+ return $! w
+ Nothing -> fail "too few bytes"
{-# INLINE getWord8 #-}
-- | Read a Word16 in big endian format