on master help sign in
Replace a few multiplications with shifts
3128ac0Bryan O'Sullivan
Data/Text/Fusion.hs+1−1
@@ -132,7 +132,7 @@ reverse (Stream next s len0)
132 where j = i + 1
132 where j = i + 1
133 Skip s1 -> loop s1 i len marr
133 Skip s1 -> loop s1 i len marr
134 Yield x s1 | i < least -> do
134 Yield x s1 | i < least -> do
135− let newLen = len * 2
135+ let newLen = len `shiftL` 1
136 marr' <- A.unsafeNew newLen
136 marr' <- A.unsafeNew newLen
137 A.unsafeCopy marr 0 marr' (newLen-len) len
137 A.unsafeCopy marr 0 marr' (newLen-len) len
138 write s1 (len+i) newLen marr'
138 write s1 (len+i) newLen marr'
Data/Text/Lazy/Fusion.hs+2−1
@@ -29,6 +29,7 @@ import Data.Text.Lazy.Internal
29import qualified Data.Text.Internal as I
29import qualified Data.Text.Internal as I
30import qualified Data.Text.Array as A
30import qualified Data.Text.Array as A
31import Data.Text.UnsafeChar (unsafeWrite)
31import Data.Text.UnsafeChar (unsafeWrite)
32+import Data.Text.UnsafeShift (shiftL)
32import Data.Text.Unsafe (iter)
33import Data.Text.Unsafe (iter)
33import Data.Int (Int64)
34import Data.Int (Int64)
34
35
@@ -64,7 +65,7 @@ unstreamChunks chunkSize (Stream next s0 len0)
64 inner marr len s i
65 inner marr len s i
65 | i + 1 >= chunkSize = return (marr, (s,i))
66 | i + 1 >= chunkSize = return (marr, (s,i))
66 | i + 1 >= len = do
67 | i + 1 >= len = do
67− let newLen = min (len * 2) chunkSize
68+ let newLen = min (len `shiftL` 1) chunkSize
68 marr' <- A.unsafeNew newLen
69 marr' <- A.unsafeNew newLen
69 A.copy marr marr'
70 A.copy marr marr'
70 inner marr' newLen s i
71 inner marr' newLen s i