git.iko.soy/typeable/attoparsec
on master help sign in
Update FastSet.hs
commit956f19cb280ebcfd72055b1ec16a64d87f1bea99 authorSeanRBurton <burton.seanr@gmail.com> dateSat 29 Nov 2014, 18:47 (12 years ago) parentdb11201
1 file changed+14−15
Data/Attoparsec/Text/FastSet.hs+14−15
Data/Attoparsec/Text/FastSet.hs+14−15
@@ -48,10 +48,10 @@ probe e = offset e - initialOffset e
4848
4949resolveCollisions :: [Entry] -> [Entry]
5050resolveCollisions [] = []
51−resolveCollisions [x] = [x]
52−resolveCollisions (a:b:ys)
53− | key a == key b = resolveCollisions (a:ys)
54− | otherwise = a' : resolveCollisions (b':ys)
51+resolveCollisions [e] = [e]
52+resolveCollisions (a:b:entries)
53+ | key a == key b = resolveCollisions (a:entries)
54+ | otherwise = a' : resolveCollisions (b':entries)
5555 where (a', b')
5656 | offset a < offset b = (a, b)
5757 | probe a < probe b = (b{offset=offset a}, a{offset=offset a + 1})
@@ -60,11 +60,12 @@ resolveCollisions (a:b:ys)
6060pad :: [Entry]-> [Entry]
6161pad = go 0
6262 where go _ [] = [empty]
63− go k (p:ps) = map (const empty) [k..o - 1] ++ p : go (o + 1) ps
64− where o = offset p
63+ go k (e:entries) = map (const empty) [k..o - 1] ++ e : go (o + 1) entries
64+ where o = offset e
6565 empty = Entry '\0' maxBound 0
6666
6767nextPowerOf2 :: Int -> Int
68+nextPowerOf2 0 = 1
6869nextPowerOf2 x = go (x - 1) 1
6970 where go y 32 = y + 1
7071 go y k = go (y .|. (y `shiftR` k)) $ k * 2
@@ -86,15 +87,13 @@ set = fromList . T.unpack
8687
8788-- | Check the set for membership.
8889member :: Char -> FastSet -> Bool
89−member c a = go 0
90− where i = fastHash c .&. mask a
91− go :: Int -> Bool
92− go p
93− | p > p' || p' == maxBound = False
94− | p' == p && c' == c = True
95− | otherwise = go (p + 1)
96− where j = i + p
97− p' = j - AB.unsafeAt (initialOffsets a) j
90+member c a = go i
91+ where i = (fastHash c .&. mask a)
92+ go j
93+ | i' > i = False
94+ | i' == i && c == c' = True
95+ | otherwise = go (j + 1)
96+ where i' = AB.unsafeAt (initialOffsets a) j
9897 c' = AB.unsafeAt (keys a) j
9998
10099charClass :: String -> FastSet