fixfile-0.7.0.0: src/Data/FixFile/Trie/Shared.hs
module Data.FixFile.Trie.Shared (
bigThreshold
,lookupAscending
,splitKey
) where
import Data.ByteString.Lazy as BS
bigThreshold :: Int
bigThreshold = 20
splitKey :: BS.ByteString -> BS.ByteString ->
(BS.ByteString, BS.ByteString, BS.ByteString)
splitKey x y = case (BS.uncons x, BS.uncons y) of
(Nothing, Nothing) -> (BS.empty, BS.empty, BS.empty)
(Nothing, Just _) -> (BS.empty, x, y)
(Just _, Nothing) -> (BS.empty, x, y)
(Just (xc, xs), Just (yc, ys)) -> if xc == yc
then let (shared, xt, yt) = splitKey xs ys
in (BS.cons xc shared, xt, yt)
else (BS.empty, x, y)
lookupAscending :: Ord a => a -> [(a, b)] -> Maybe b
lookupAscending _ [] = Nothing
lookupAscending k ((x,y):xs) = case compare x k of
LT -> lookupAscending k xs
EQ -> Just y
_ -> Nothing