Bryan O'Sullivan avatar Bryan O'Sullivan committed 45b2686

Missed a few files. darcum-mode: FAIL.

Comments (0)

Files changed (1)

src/Text/ParserCombinators/ByteStringParser/FastSet.hs

+-----------------------------------------------------------------------------
+-- |
+-- Module      :  Text.ParserCombinators.ByteStringParser.FastSet
+-- Copyright   :  Bryan O'Sullivan 2008
+-- License     :  BSD3
+-- 
+-- Maintainer  :  bos@serpentine.com
+-- Stability   :  experimental
+-- Portability :  unknown
+--
+-- Fast 8-bit character set membership.
+-- 
+-----------------------------------------------------------------------------
+module Text.ParserCombinators.ByteStringParser.FastSet
+    (
+      FastSet
+    , set
+    , member
+    ) where
+
+import Data.ByteString.Char8 as SB
+import Data.ByteString.Internal as SB
+import Data.ByteString.Unsafe as SB
+
+newtype FastSet = FastSet SB.ByteString
+    deriving (Eq, Ord, Show)
+
+set :: SB.ByteString -> FastSet
+set = FastSet . SB.sort
+
+member :: Char -> FastSet -> Bool
+member c (FastSet s) = search 0 (SB.length s - 1)
+    where w = SB.c2w c
+          search lo hi | hi < lo = False
+                       | otherwise =
+                           let mid = (lo + hi) `div` 2
+                               cur = SB.unsafeIndex s mid
+                           in case compare cur w of
+                                GT -> search lo (mid - 1)
+                                LT -> search (mid + 1) hi
+                                _ -> True
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.