summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam T <pxqr.sta@gmail.com>2013-09-26 21:36:08 +0400
committerSam T <pxqr.sta@gmail.com>2013-09-26 21:36:08 +0400
commit214e969577c2ad104bd052ec699ecd950f2f445f (patch)
tree6970cf6695f68211ead49291d2b7e7b854f73d54
parent5151b2a63b94402c6ba92b615c366873471b7b5d (diff)
Use table in decode function
-rw-r--r--src/Data/ByteString/Base32.hs15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/Data/ByteString/Base32.hs b/src/Data/ByteString/Base32.hs
index 96bb893..5dc025c 100644
--- a/src/Data/ByteString/Base32.hs
+++ b/src/Data/ByteString/Base32.hs
@@ -154,8 +154,11 @@ encode bs =
154 154
155type DecTable = Ptr Word5 155type DecTable = Ptr Word5
156 156
157pack5 :: DecTable -> (Word8 -> Word5) -> ByteString -> ByteString 157invIx :: Word5
158pack5 !tbl !f bs @ (PS fptr off sz) = 158invIx = 255
159
160pack5 :: DecTable -> ByteString -> ByteString
161pack5 !tbl bs @ (PS fptr off sz) =
159 unsafePerformIO $ do 162 unsafePerformIO $ do
160 let packedSize = dstSize $ BS.length bs 163 let packedSize = dstSize $ BS.length bs
161 BS.createAndTrim packedSize $ \ dst -> do 164 BS.createAndTrim packedSize $ \ dst -> do
@@ -218,12 +221,10 @@ pack5 !tbl !f bs @ (PS fptr off sz) =
218 else smallStep dst src 0 (unused `shiftL` (8 - un_cnt)) 8 221 else smallStep dst src 0 (unused `shiftL` (8 - un_cnt)) 8
219 else smallStep dst 222 else smallStep dst
220 (src `advancePtr` 1) (pred s) 223 (src `advancePtr` 1) (pred s)
221 ((unused `unsafeShiftL` 5) .|. fromIntegral (f w8)) 224 ((unused `unsafeShiftL` 5)
225 .|. fromIntegral (lookupTable (fromIntegral w8)))
222 (un_cnt + 5) 226 (un_cnt + 5)
223 227
224invIx :: Word5
225invIx = 255
226
227decW5 :: Word8 -> Word5 228decW5 :: Word8 -> Word5
228decW5 !x 229decW5 !x
229 | x < 50 {- c2w '2' -} = invIx 230 | x < 50 {- c2w '2' -} = invIx
@@ -241,7 +242,7 @@ decode :: ByteString -> ByteString
241decode bs = 242decode bs =
242 unsafePerformIO $ do 243 unsafePerformIO $ do
243 withForeignPtr decTable $ \tbl -> 244 withForeignPtr decTable $ \tbl ->
244 return $ pack5 tbl decW5 bs 245 return $ pack5 tbl bs
245 246
246{----------------------------------------------------------------------- 247{-----------------------------------------------------------------------
247-- Lenient Decoding 248-- Lenient Decoding