on master help sign in
Add a faster encodeUtf8 function for lazy text
b659063Bryan O'Sullivan
Data/Text/Lazy/Encoding.hs+11−5
@@ -32,18 +32,20 @@ module Data.Text.Lazy.Encoding
32
32
33 -- * Encoding Text to ByteStrings
33 -- * Encoding Text to ByteStrings
34 , encodeUtf8
34 , encodeUtf8
35+ , encodeUtf8'
35 , encodeUtf16LE
36 , encodeUtf16LE
36 , encodeUtf16BE
37 , encodeUtf16BE
37 , encodeUtf32LE
38 , encodeUtf32LE
38 , encodeUtf32BE
39 , encodeUtf32BE
39 ) where
40 ) where
40
41
41−import qualified Data.ByteString.Lazy as B
42import Data.Text.Encoding.Error (OnDecodeError, strictDecode)
42import Data.Text.Encoding.Error (OnDecodeError, strictDecode)
43−import qualified Data.Text.Encoding as TE
44−import qualified Data.Text.Lazy.Fusion as F
45import Data.Text.Lazy.Internal (Text(..), chunk, foldrChunks)
43import Data.Text.Lazy.Internal (Text(..), chunk, foldrChunks)
44+import qualified Data.ByteString.Lazy as B
45+import qualified Data.ByteString.Lazy.Internal as B
46+import qualified Data.Text.Encoding as TE
46import qualified Data.Text.Lazy.Encoding.Fusion as E
47import qualified Data.Text.Lazy.Encoding.Fusion as E
48+import qualified Data.Text.Lazy.Fusion as F
47
49
48-- | Decode a 'ByteString' containing 7-bit ASCII encoded text.
50-- | Decode a 'ByteString' containing 7-bit ASCII encoded text.
49decodeASCII :: B.ByteString -> Text
51decodeASCII :: B.ByteString -> Text
@@ -61,9 +63,13 @@ decodeUtf8 = decodeUtf8With strictDecode
61{-# INLINE decodeUtf8 #-}
63{-# INLINE decodeUtf8 #-}
62
64
63-- | Encode text using UTF-8 encoding.
65-- | Encode text using UTF-8 encoding.
66+encodeUtf8' :: Text -> B.ByteString
67+encodeUtf8' txt = E.unstream (E.restreamUtf8 (F.stream txt))
68+{-# INLINE encodeUtf8' #-}
69+
64encodeUtf8 :: Text -> B.ByteString
70encodeUtf8 :: Text -> B.ByteString
65−encodeUtf8 txt = E.unstream (E.restreamUtf8 (F.stream txt))
71+encodeUtf8 (Chunk c cs) = B.Chunk (TE.encodeUtf8 c) (encodeUtf8 cs)
66−{-# INLINE encodeUtf8 #-}
72+encodeUtf8 Empty = B.Empty
67
73
68-- | Decode text from little endian UTF-16 encoding.
74-- | Decode text from little endian UTF-16 encoding.
69decodeUtf16LEWith :: OnDecodeError -> B.ByteString -> Text
75decodeUtf16LEWith :: OnDecodeError -> B.ByteString -> Text