on master help sign in
Add a faster encodeUtf8 function for lazy text

--HG-- extra : convert_revision : 370e267ac6e2299b0652a7c77cae3d8b7d023e82

commitb659063bd697b95175bb4c15ac914e53662a2ee3 authorBryan O'Sullivan <bos@serpentine.com> dateThu 14 Oct 2010, 19:47 (16 years ago) parent53c2f21
1 file changed+11−5
Data/Text/Lazy/Encoding.hs+11−5
Data/Text/Lazy/Encoding.hs+11−5
@@ -32,18 +32,20 @@ module Data.Text.Lazy.Encoding
3232
3333 -- * Encoding Text to ByteStrings
3434 , encodeUtf8
35+ , encodeUtf8'
3536 , encodeUtf16LE
3637 , encodeUtf16BE
3738 , encodeUtf32LE
3839 , encodeUtf32BE
3940 ) where
4041
41−import qualified Data.ByteString.Lazy as B
4242import Data.Text.Encoding.Error (OnDecodeError, strictDecode)
43−import qualified Data.Text.Encoding as TE
44−import qualified Data.Text.Lazy.Fusion as F
4543import 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
4647import qualified Data.Text.Lazy.Encoding.Fusion as E
48+import qualified Data.Text.Lazy.Fusion as F
4749
4850-- | Decode a 'ByteString' containing 7-bit ASCII encoded text.
4951decodeASCII :: B.ByteString -> Text
@@ -61,9 +63,13 @@ decodeUtf8 = decodeUtf8With strictDecode
6163{-# INLINE decodeUtf8 #-}
6264
6365-- | 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+
6470encodeUtf8 :: Text -> B.ByteString
65−encodeUtf8 txt = E.unstream (E.restreamUtf8 (F.stream txt))
66−{-# INLINE encodeUtf8 #-}
71+encodeUtf8 (Chunk c cs) = B.Chunk (TE.encodeUtf8 c) (encodeUtf8 cs)
72+encodeUtf8 Empty = B.Empty
6773
6874-- | Decode text from little endian UTF-16 encoding.
6975decodeUtf16LEWith :: OnDecodeError -> B.ByteString -> Text