diff options
author | Sam T <pxqr.sta@gmail.com> | 2013-09-26 21:36:08 +0400 |
---|---|---|
committer | Sam T <pxqr.sta@gmail.com> | 2013-09-26 21:36:08 +0400 |
commit | 214e969577c2ad104bd052ec699ecd950f2f445f (patch) | |
tree | 6970cf6695f68211ead49291d2b7e7b854f73d54 /src/Data/ByteString | |
parent | 5151b2a63b94402c6ba92b615c366873471b7b5d (diff) |
Use table in decode function
Diffstat (limited to 'src/Data/ByteString')
-rw-r--r-- | src/Data/ByteString/Base32.hs | 15 |
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 | ||
155 | type DecTable = Ptr Word5 | 155 | type DecTable = Ptr Word5 |
156 | 156 | ||
157 | pack5 :: DecTable -> (Word8 -> Word5) -> ByteString -> ByteString | 157 | invIx :: Word5 |
158 | pack5 !tbl !f bs @ (PS fptr off sz) = | 158 | invIx = 255 |
159 | |||
160 | pack5 :: DecTable -> ByteString -> ByteString | ||
161 | pack5 !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 | ||
224 | invIx :: Word5 | ||
225 | invIx = 255 | ||
226 | |||
227 | decW5 :: Word8 -> Word5 | 228 | decW5 :: Word8 -> Word5 |
228 | decW5 !x | 229 | decW5 !x |
229 | | x < 50 {- c2w '2' -} = invIx | 230 | | x < 50 {- c2w '2' -} = invIx |
@@ -241,7 +242,7 @@ decode :: ByteString -> ByteString | |||
241 | decode bs = | 242 | decode 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 |