packages feed

ip 1.1.1 → 1.1.2

raw patch · 16 files changed

+85/−122 lines, 16 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ Net.IP: print :: IP -> IO ()
+ Net.IPv4: fromTupleOctets :: (Word8, Word8, Word8, Word8) -> IPv4
+ Net.IPv4: print :: IPv4 -> IO ()
+ Net.IPv6: fromTupleWord16s :: (Word16, Word16, Word16, Word16, Word16, Word16, Word16, Word16) -> IPv6
+ Net.IPv6: fromTupleWord32s :: (Word32, Word32, Word32, Word32) -> IPv6
+ Net.IPv6: fromWord32s :: Word32 -> Word32 -> Word32 -> Word32 -> IPv6
+ Net.IPv6: print :: IPv6 -> IO ()
+ Net.IPv6: toWord32s :: IPv6 -> (Word32, Word32, Word32, Word32)
+ Net.Mac: print :: Mac -> IO ()

Files

ip.cabal view
@@ -1,5 +1,5 @@ name: ip-version: 1.1.1+version: 1.1.2 synopsis: Library for IP and MAC addresses homepage: https://github.com/andrewthad/haskell-ip#readme license: BSD3@@ -81,7 +81,6 @@     IPv4Text1     IPv4Text2     IPv4ByteString1-    -- IPv4TextVariableBuilder   ghc-options: -Wall -O2   default-language: Haskell2010 @@ -112,7 +111,6 @@     IPv4DecodeText1     IPv4DecodeText2     IPv4ByteString1-    IPv4TextVariableBuilder   ghc-options: -Wall -O2   default-language: Haskell2010   hs-source-dirs: test
src/Data/Text/Builder/Common/Internal.hs view
@@ -3,22 +3,11 @@ import Data.Text (Text) import Control.Monad.ST import Data.Monoid-import Data.Word-import Data.Bits import Text.Printf-import Debug.Trace import Data.Char (ord)-import Data.Vector (Vector) import Data.Foldable (fold)-import qualified Data.Vector as Vector import qualified Data.Text as Text-import qualified Data.Text.Lazy as LText-import qualified Data.Text.Lazy.IO as LText-import qualified Data.Text.Lazy.Builder as TBuilder-import qualified Data.Text.Lazy.Builder.Int as TBuilder-import qualified Data.Text.IO as Text import qualified Data.Text.Array as A-import qualified Data.Text.Internal as TI import qualified Data.Text.Internal.Unsafe.Char as TC  -- | This is slower that just pattern matching on the Text data constructor.
src/Data/Text/Builder/Variable.hs view
@@ -22,17 +22,13 @@   , word8   ) where -import Data.Monoid import Data.Word import Data.Text (Text)-import Text.Printf (printf) import Control.Monad.ST import Data.Char (ord) import Data.Vector (Vector)-import Data.Function (on) import Data.Maybe (fromMaybe) import qualified Data.Vector as Vector-import qualified Data.Text as Text import qualified Data.Text.Array as A import qualified Data.Text.Builder.Common.Internal as I import qualified Data.Text.Internal as TI@@ -103,21 +99,21 @@ {-# INLINE word8 #-}  -- This has not yet been tested.-vector ::+_vector ::      Text -- ^ Default, used when index is out of range   -> Vector Text -- ^ Texts to index into   -> Builder Int-vector tDef v =+_vector tDef v =   let xs = Vector.map I.portableUntext v       xDef = I.portableUntext tDef    in Builder         (Vector.maximum $ Vector.map I.portableTextLength $ Vector.cons tDef v)-        $ \pos marr i -> do+        $ \_ marr i -> do           let (arr,len) = fromMaybe xDef (xs Vector.!? i)               finalIx = i + len           A.copyI marr i arr 0 finalIx           return finalIx-{-# INLINE vector #-}+{-# INLINE _vector #-}  i2w :: Integral a => a -> Word16 i2w v = asciiZero + fromIntegral v
src/Data/Word/Synthetic/Word12.hs view
@@ -29,7 +29,6 @@ import           Data.Bits import           Data.Data import           Data.Maybe-import           Foreign.Storable  import           GHC.Arr import           GHC.Base
src/Net/IP.hs view
@@ -36,10 +36,13 @@     -- ** Text   , encode   , decode+    -- ** Printing+  , print     -- * Types   , IP(..)   ) where +import Prelude hiding (print) import Data.Bits import Net.IPv6 (IPv6(..)) import Net.IPv4 (IPv4(..))@@ -51,6 +54,7 @@ import qualified Net.IPv4 as IPv4 import qualified Net.IPv6 as IPv6 import qualified Data.Aeson as Aeson+import qualified Data.Text.IO as TIO  case_ :: (IPv4 -> a) -> (IPv6 -> a) -> IP -> a case_ f g (IP addr@(IPv6 w1 w2)) = if w1 == 0 && (0xFFFFFFFF00000000 .&. w2 == 0x0000FFFF00000000)@@ -84,6 +88,9 @@     Nothing -> Nothing     Just v6 -> Just (fromIPv6 v6)   Just v4 -> Just (fromIPv4 v4)++print :: IP -> IO ()+print = TIO.putStrLn . encode  -- | A 32-bit 'IPv4' address or a 128-bit 'IPv6' address. Internally, this --   is just represented as an 'IPv6' address. The functions provided
src/Net/IPv4.hs view
@@ -25,6 +25,7 @@   ( -- * Conversion Functions     ipv4   , fromOctets+  , fromTupleOctets   , toOctets     -- * Special IP Addresses   , any@@ -40,7 +41,7 @@   , decode   , builder   , reader-  , parser+  , parser      -- ** UTF-8 ByteString   , encodeUtf8   , decodeUtf8@@ -50,11 +51,13 @@     -- $string   , encodeString   , decodeString+    -- ** Printing+  , print     -- * Types   , IPv4(..)   ) where -import Prelude hiding (any)+import Prelude hiding (any, print) import Data.Bits ((.&.),(.|.),shiftR,shiftL,unsafeShiftR) import Data.Word import Data.Hashable@@ -94,6 +97,7 @@ import qualified Data.Aeson.Types as Aeson import qualified Data.ByteString.Builder as BB import qualified Data.Text.Array as TArray+import qualified Data.Text.IO as TIO  #if MIN_VERSION_aeson(1,0,0)  import Data.Aeson (ToJSONKey(..),FromJSONKey(..),@@ -131,6 +135,10 @@ fromOctets a b c d = fromOctets'   (fromIntegral a) (fromIntegral b) (fromIntegral c) (fromIntegral d) +-- | An uncurried variant of 'fromOctets'.+fromTupleOctets :: (Word8,Word8,Word8,Word8) -> IPv4+fromTupleOctets (a,b,c,d) = fromOctets a b c d+ -- | Convert an 'IPv4' address into a quadruple of octets. The first --   element in the quadruple is the most significant octet. The last --   element is the least significant octet.@@ -319,7 +327,10 @@ decodeString = decode . Text.pack  --- | A 32-bit Internet Protocol version 4 address.+-- | A 32-bit Internet Protocol version 4 address. To use this with the+--   @network@ library, it is necessary to use @Network.Socket.htonl@ to+--   convert the underlying 'Word32' from host byte order to network byte+--   order. newtype IPv4 = IPv4 { getIPv4 :: Word32 }   deriving (Eq,Ord,Enum,Bounded,Hashable,Generic,Prim,Bits,FiniteBits,Storable) @@ -345,6 +356,8 @@     d <- step readPrec     return (fromOctets a b c d)     +print :: IPv4 -> IO ()+print = TIO.putStrLn . encode  newtype instance UVector.MVector s IPv4 = MV_IPv4 (PVector.MVector s IPv4) newtype instance UVector.Vector IPv4 = V_IPv4 (PVector.Vector IPv4)
src/Net/IPv6.hs view
@@ -9,7 +9,11 @@   , ipv6   , fromOctets   , fromWord16s+  , fromWord32s+  , fromTupleWord16s+  , fromTupleWord32s   , toWord16s+  , toWord32s     -- * Special IP Addresses   , any   , loopback@@ -18,9 +22,11 @@   , encode   , decode   , parser+    -- ** Printing+  , print   ) where -import Prelude hiding (any)+import Prelude hiding (any, print) import Data.Bits import Data.List (intercalate, group) import Data.Word@@ -30,6 +36,7 @@ import Text.Read (Read(..),Lexeme(Ident),lexP,parens) import Text.ParserCombinators.ReadPrec (prec,step) import qualified Data.Text as Text+import qualified Data.Text.IO as TIO import qualified Data.Attoparsec.Text as Atto import qualified Data.Aeson as Aeson import qualified Data.Attoparsec.Text as AT@@ -70,6 +77,9 @@     where     (a,b,c,d,e,f,g,h) = toWord16s addr +print :: IPv6 -> IO ()+print = TIO.putStrLn . encode+ showHexWord16 :: Word16 -> ShowS showHexWord16 w =     showString "0x"@@ -150,6 +160,7 @@         (fromIntegral e) (fromIntegral f) (fromIntegral g) (fromIntegral h)    in IPv6 w1 w2 +-- | Convert an 'IPv6' to eight 16-bit words. toWord16s :: IPv6 -> (Word16,Word16,Word16,Word16,Word16,Word16,Word16,Word16) toWord16s (IPv6 a b) =   ( fromIntegral (unsafeShiftR a 48)@@ -162,6 +173,31 @@   , fromIntegral b   ) +-- | Uncurried variant of 'fromWord16s'.+fromTupleWord16s :: (Word16,Word16,Word16,Word16,Word16,Word16,Word16,Word16) -> IPv6+fromTupleWord16s (a,b,c,d,e,f,g,h) = fromWord16s a b c d e f g h++-- | Build an 'IPv6' from four 32-bit words. The leftmost argument+--   is the high word and the rightword is the low word.+fromWord32s :: Word32 -> Word32 -> Word32 -> Word32 -> IPv6+fromWord32s a b c d =+  let !(w1,w2) = fromWord32sV6+        (fromIntegral a) (fromIntegral b) (fromIntegral c) (fromIntegral d)+   in IPv6 w1 w2++-- | Uncurried variant of 'fromWord32s'.+fromTupleWord32s :: (Word32,Word32,Word32,Word32) -> IPv6+fromTupleWord32s (a,b,c,d) = fromWord32s a b c d++-- | Convert an 'IPv6' to four 32-bit words.+toWord32s :: IPv6 -> (Word32,Word32,Word32,Word32)+toWord32s (IPv6 a b) =+  ( fromIntegral (unsafeShiftR a 32)+  , fromIntegral a+  , fromIntegral (unsafeShiftR b 32)+  , fromIntegral b+  )+ loopback :: IPv6 loopback = IPv6 0 1 @@ -311,6 +347,12 @@   , fromWord16Word64 e f g h   ) +fromWord32sV6 :: Word64 -> Word64 -> Word64 -> Word64 -> (Word64,Word64)+fromWord32sV6 a b c d =+  ( fromWord32Word64 a b+  , fromWord32Word64 c d+  )+ fromOctetsWord64 ::      Word64 -> Word64 -> Word64 -> Word64   -> Word64 -> Word64 -> Word64 -> Word64@@ -333,4 +375,7 @@   .|. unsafeShiftL c 16   .|. d     )++fromWord32Word64 :: Word64 -> Word64 -> Word64+fromWord32Word64 a b = fromIntegral (unsafeShiftL a 32 .|. b) 
src/Net/Mac.hs view
@@ -34,12 +34,15 @@   , parserWithUtf8     -- ** ByteString   , decodeBytes+    -- ** Printing+  , print     -- * Types   , Mac(..)   , MacCodec(..)   , MacGrouping(..)   ) where +import Prelude hiding (print) import Data.Word import Data.Bits ((.|.),unsafeShiftL,unsafeShiftR,(.&.)) import Data.Text (Text)@@ -64,6 +67,7 @@ import qualified Data.ByteString.Builder.Fixed as BFB import qualified Data.Aeson as Aeson import qualified Data.Aeson.Types as Aeson+import qualified Data.Text.IO as TIO  #if MIN_VERSION_aeson(1,0,0)  import Data.Aeson (ToJSONKey(..),FromJSONKey(..),@@ -555,6 +559,9 @@     Ident "mac" <- lexP     w <- step readPrec     return (mac w)++print :: Mac -> IO ()+print = TIO.putStrLn . encode  showHexWord48 :: Word64 -> ShowS showHexWord48 w = showString "0x" . go 11
test/Bench.hs view
@@ -2,20 +2,7 @@  import Criterion.Main import Net.Types (IPv4(..),MacGrouping(..),MacCodec(..))-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 qualified Data.Text as Text-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 import qualified Net.Mac as Mac import qualified Net.IPv4 as IPv4 
test/IPv4ByteString1.hs view
@@ -1,7 +1,6 @@ module IPv4ByteString1 where  import Net.Types (IPv4(..))-import Net.IPv4  import Data.ByteString.Internal as I import Data.Bits
test/IPv4DecodeText1.hs view
@@ -1,20 +1,12 @@ module IPv4DecodeText1 where  import Net.Types-import Data.Monoid ((<>)) import Data.Word-import Data.Bits ((.&.),(.|.),shiftR,shiftL,complement)-import Control.Monad.ST import Data.Text.Internal (Text(..))-import Data.Text.Lazy.Builder.Int (decimal) import Control.Monad+import Data.Bits ((.|.),shiftL) import qualified Data.Text              as Text-import qualified Data.Text.Lazy         as LText-import qualified Data.Attoparsec.Text   as AT-import qualified Data.Text.Array        as TArray-import qualified Data.Text.Lazy.Builder as TBuilder import qualified Data.Text.Read         as TextRead-import qualified Data.Text.Lazy.Builder.Int as TBuilder  stripDecimal :: Text -> Either String Text stripDecimal t = case Text.uncons t of
test/IPv4DecodeText2.hs view
@@ -1,20 +1,10 @@ module IPv4DecodeText2 where  import Net.Types-import Data.Monoid ((<>)) import Data.Word-import Data.Bits ((.&.),(.|.),shiftR,shiftL,complement)-import Control.Monad.ST+import Data.Bits (shiftL,(.|.)) import Data.Text.Internal (Text(..))-import Data.Text.Lazy.Builder.Int (decimal)-import Control.Monad-import qualified Data.Text              as Text-import qualified Data.Text.Lazy         as LText import qualified Data.Attoparsec.Text   as AT-import qualified Data.Text.Array        as TArray-import qualified Data.Text.Lazy.Builder as TBuilder-import qualified Data.Text.Read         as TextRead-import qualified Data.Text.Lazy.Builder.Int as TBuilder  dotDecimalParser :: AT.Parser Word32 dotDecimalParser = fromOctets'
test/IPv4Text1.hs view
@@ -2,22 +2,15 @@  import Net.Types (IPv4(..)) import Data.Text (Text)-import qualified Net.IPv4 as IPv4-import qualified Data.Text as Text-import Text.Read (readMaybe)-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 Data.Bits (shiftR,(.&.)) 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  ------------------------@@ -34,7 +27,6 @@       w2 = fromIntegral $ 255 .&. shiftR w 16       w3 = fromIntegral $ 255 .&. shiftR w 8       w4 = fromIntegral $ 255 .&. w-      dot = 46       (arr,len) = runST $ do         marr <- TArray.new 15         i1 <- putAndCount 0 w1 marr
test/IPv4Text2.hs view
@@ -2,23 +2,11 @@  import Net.Types (IPv4(..)) import Data.Text (Text)-import qualified Net.IPv4 as IPv4-import qualified Data.Text as Text-import Text.Read (readMaybe)-import Data.Bits ((.&.),(.|.),shiftR,shiftL,complement)+import Data.Bits ((.&.),shiftR) 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
− test/IPv4TextVariableBuilder.hs
@@ -1,30 +0,0 @@-module IPv4TextVariableBuilder where--import Net.Types (IPv4(..))-import Data.Text (Text)-import Data.Monoid-import Data.Word-import Data.Bits-import qualified Net.IPv4 as IPv4-import qualified Data.Text as Text-import qualified Data.Text.Builder.Variable as VB--encode :: IPv4 -> Text-encode = VB.run variableBuilder--variableBuilder :: VB.Builder IPv4-variableBuilder =-  VB.contramap (word8At 24) VB.word8-  <> VB.staticCharBmp '.'-  <> VB.contramap (word8At 16) VB.word8-  <> VB.staticCharBmp '.'-  <> VB.contramap (word8At 8) VB.word8-  <> VB.staticCharBmp '.'-  <> VB.contramap (word8At 0) VB.word8--word8At :: Int -> IPv4 -> Word8-word8At i (IPv4 w) = fromIntegral (unsafeShiftR w i)-{-# INLINE word8At #-}---
test/Naive.hs view
@@ -5,17 +5,8 @@ import qualified Net.IPv4 as IPv4 import qualified Data.Text as Text import Text.Read (readMaybe)-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.Text.Lazy as LText  encodeByteString :: IPv4 -> ByteString encodeByteString = encodeUtf8 . encodeText