diff options
| author | krasimir <krasimir@chalmers.se> | 2009-01-22 15:01:41 +0000 |
|---|---|---|
| committer | krasimir <krasimir@chalmers.se> | 2009-01-22 15:01:41 +0000 |
| commit | 418b33f9ae6addd8e3289a3dc781c3b7dbe1dd33 (patch) | |
| tree | 68295047d0dfa2e8f6ad04d87237f83b14e21ee2 /src | |
| parent | 8155d3b2120ea1ff2270ec48fef97ac045f05b98 (diff) | |
optimized Data.Binary.Get.getWord8
Diffstat (limited to 'src')
| -rw-r--r-- | src/Data/Binary/Get.hs | 10 |
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 |
