From 214e969577c2ad104bd052ec699ecd950f2f445f Mon Sep 17 00:00:00 2001 From: Sam T Date: Thu, 26 Sep 2013 21:36:08 +0400 Subject: Use table in decode function --- src/Data/ByteString/Base32.hs | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'src') 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 = type DecTable = Ptr Word5 -pack5 :: DecTable -> (Word8 -> Word5) -> ByteString -> ByteString -pack5 !tbl !f bs @ (PS fptr off sz) = +invIx :: Word5 +invIx = 255 + +pack5 :: DecTable -> ByteString -> ByteString +pack5 !tbl bs @ (PS fptr off sz) = unsafePerformIO $ do let packedSize = dstSize $ BS.length bs BS.createAndTrim packedSize $ \ dst -> do @@ -218,12 +221,10 @@ pack5 !tbl !f bs @ (PS fptr off sz) = else smallStep dst src 0 (unused `shiftL` (8 - un_cnt)) 8 else smallStep dst (src `advancePtr` 1) (pred s) - ((unused `unsafeShiftL` 5) .|. fromIntegral (f w8)) + ((unused `unsafeShiftL` 5) + .|. fromIntegral (lookupTable (fromIntegral w8))) (un_cnt + 5) -invIx :: Word5 -invIx = 255 - decW5 :: Word8 -> Word5 decW5 !x | x < 50 {- c2w '2' -} = invIx @@ -241,7 +242,7 @@ decode :: ByteString -> ByteString decode bs = unsafePerformIO $ do withForeignPtr decTable $ \tbl -> - return $ pack5 tbl decW5 bs + return $ pack5 tbl bs {----------------------------------------------------------------------- -- Lenient Decoding -- cgit v1.2.3