ip-0.5: test/IPv4Text2.hs
module IPv4Text2 where
import Net.IPv4 (IPv4(..))
import Data.Text (Text)
import qualified Net.IPv4 as IPv4
import qualified Data.Text as Text
import Text.Read (readMaybe)
import Net.IPv4 (IPv4(..))
import Data.Bits ((.&.),(.|.),shiftR,shiftL,complement)
import Data.Monoid ((<>))
import Data.Text.Lazy.Builder.Int (decimal)
import Data.Text.Internal (Text(..))
import Data.Word
import Data.ByteString (ByteString)
import Control.Monad.ST
import Data.Text.Encoding (encodeUtf8)
import qualified Data.ByteString.Char8 as BC8
import qualified Data.ByteString as ByteString
import qualified Data.ByteString.Unsafe as ByteString
import qualified Data.Text.Lazy as LText
import qualified Data.Text.Lazy.Builder as TBuilder
import qualified Data.Text.Array as TArray
-----------------------------------------
-- Text Builder implementation. This ends
-- up performing worse than the naive
-- implementation.
-----------------------------------------
encode :: IPv4 -> Text
encode = LText.toStrict . TBuilder.toLazyText . toDotDecimalBuilder
toDotDecimalBuilder :: IPv4 -> TBuilder.Builder
toDotDecimalBuilder (IPv4 w) =
decimal (255 .&. shiftR w 24 )
<> dot
<> decimal (255 .&. shiftR w 16 )
<> dot
<> decimal (255 .&. shiftR w 8 )
<> dot
<> decimal (255 .&. w)
where dot = TBuilder.singleton '.'
{-# INLINE toDotDecimalBuilder #-}