git.iko.soy/typeable/attoparsec
on master help sign in
Fix set-related bugs
commite709c65e1047cc9a79334af7e249c42505e82267 authorBryan O'Sullivan <bos@serpentine.com> dateWed 15 Oct 2008, 16:49 (18 years ago) parente5c3b4c
1 file changed+5−3
src/Data/ParserCombinators/Attoparsec/FastSet.hs+5−3
src/Data/ParserCombinators/Attoparsec/FastSet.hs+5−3
@@ -30,6 +30,7 @@ module Data.ParserCombinators.Attoparsec.FastSet
3030 ) where
3131
3232import Data.Bits ((.&.), (.|.), shiftR)
33+import qualified Data.ByteString.Char8 as B8
3334import qualified Data.ByteString as B
3435import qualified Data.ByteString.Internal as I
3536import qualified Data.ByteString.Unsafe as U
@@ -41,7 +42,8 @@ data FastSet = Sorted { fromSet :: {-# UNPACK #-} !B.ByteString }
4142 deriving (Eq, Ord)
4243
4344instance Show FastSet where
44− show _ = "FastSet"
45+ show (Sorted s) = "FastSet Sorted " ++ show (B8.unpack s)
46+ show (Table _) = "FastSet Table"
4547
4648-- | The lower bound on the size of a lookup table. We choose this to
4749-- balance table density against performance.
@@ -64,8 +66,8 @@ memberWord8 w (Sorted s) = search 0 (B.length s - 1)
6466 | otherwise =
6567 let mid = (lo + hi) `div` 2
6668 in case compare w (U.unsafeIndex s mid) of
67− GT -> search lo (mid - 1)
68− LT -> search (mid + 1) hi
69+ GT -> search (mid + 1) hi
70+ LT -> search lo (mid - 1)
6971 _ -> True
7072
7173-- | Check the set for membership. Only works with 8-bit characters: