packages feed

hw-json 1.2.0.0 → 1.2.0.1

raw patch · 7 files changed

+6/−326 lines, 7 filesdep +hw-json-simple-cursordep ~hw-json-standard-cursorPVP ok

version bump matches the API change (PVP)

Dependencies added: hw-json-simple-cursor

Dependency ranges changed: hw-json-standard-cursor

API changes (from Hackage documentation)

Files

− hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor.hs
@@ -1,90 +0,0 @@-{-# LANGUAGE FlexibleContexts      #-}-{-# LANGUAGE FlexibleInstances     #-}-{-# LANGUAGE InstanceSigs          #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE ScopedTypeVariables   #-}--module HaskellWorks.Data.Json.Simple.Cursor-  ( JsonCursor(..)-  , jsonCursorPos-  ) where--import Data.String-import Data.Word-import HaskellWorks.Data.FromByteString-import HaskellWorks.Data.FromForeignRegion-import HaskellWorks.Data.Positioning-import HaskellWorks.Data.RankSelect.Base.Rank0-import HaskellWorks.Data.RankSelect.Base.Rank1-import HaskellWorks.Data.RankSelect.Base.Select1-import HaskellWorks.Data.RankSelect.CsPoppy-import HaskellWorks.Data.TreeCursor-import Prelude                                   hiding (drop)--import qualified Data.ByteString                                as BS-import qualified Data.ByteString.Char8                          as BSC-import qualified Data.ByteString.Internal                       as BSI-import qualified Data.Vector.Storable                           as DVS-import qualified Foreign.ForeignPtr                             as F-import qualified HaskellWorks.Data.BalancedParens               as BP-import qualified HaskellWorks.Data.BalancedParens.RangeMin      as RM-import qualified HaskellWorks.Data.Json.Simple.Cursor.SemiIndex as SI--data JsonCursor t v w = JsonCursor-  { cursorText     :: !t-  , interests      :: !v-  , balancedParens :: !w-  , cursorRank     :: !Count-  }-  deriving (Eq, Show)--instance FromByteString (JsonCursor BS.ByteString (DVS.Vector Word64) (BP.SimpleBalancedParens (DVS.Vector Word64))) where-  fromByteString bs = JsonCursor-    { cursorText      = bs-    , interests       = ib-    , balancedParens  = BP.SimpleBalancedParens bp-    , cursorRank      = 1-    }-    where SI.SemiIndex _ ib bp = SI.buildSemiIndex bs--instance FromByteString (JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy)) where-  fromByteString bs = JsonCursor-    { cursorText      = bs-    , interests       = makeCsPoppy ib-    , balancedParens  = RM.mkRangeMin (makeCsPoppy bp)-    , cursorRank      = 1-    }-    where SI.SemiIndex _ ib bp = SI.buildSemiIndex bs--instance FromForeignRegion (JsonCursor BS.ByteString (DVS.Vector Word64) (BP.SimpleBalancedParens (DVS.Vector Word64))) where-  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (F.castForeignPtr fptr) offset size)--instance FromForeignRegion (JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy)) where-  fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (F.castForeignPtr fptr) offset size)--instance IsString (JsonCursor BS.ByteString (DVS.Vector Word64) (BP.SimpleBalancedParens (DVS.Vector Word64))) where-  fromString = fromByteString . BSC.pack--instance IsString (JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy)) where-  fromString = fromByteString . BSC.pack--instance (BP.BalancedParens u, Rank1 u, Rank0 u) => TreeCursor (JsonCursor t v u) where-  firstChild :: JsonCursor t v u -> Maybe (JsonCursor t v u)-  firstChild k = let mq = BP.firstChild (balancedParens k) (cursorRank k) in (\q -> k { cursorRank = q }) <$> mq--  nextSibling :: JsonCursor t v u -> Maybe (JsonCursor t v u)-  nextSibling k = (\q -> k { cursorRank = q }) <$> BP.nextSibling (balancedParens k) (cursorRank k)--  parent :: JsonCursor t v u -> Maybe (JsonCursor t v u)-  parent k = let mq = BP.parent (balancedParens k) (cursorRank k) in (\q -> k { cursorRank = q }) <$> mq--  depth :: JsonCursor t v u -> Maybe Count-  depth k = BP.depth (balancedParens k) (cursorRank k)--  subtreeSize :: JsonCursor t v u -> Maybe Count-  subtreeSize k = BP.subtreeSize (balancedParens k) (cursorRank k)--jsonCursorPos :: (Rank1 w, Select1 v) => JsonCursor s v w -> Position-jsonCursorPos k = toPosition (select1 ik (rank1 bpk (cursorRank k)) - 1)-  where ik  = interests k-        bpk = balancedParens k
− hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Fast.hs
@@ -1,35 +0,0 @@-{-# LANGUAGE FlexibleInstances    #-}-{-# LANGUAGE TypeSynonymInstances #-}--module HaskellWorks.Data.Json.Simple.Cursor.Fast-  ( fromByteString-  , fromForeignRegion-  , fromString-  ) where--import Foreign.ForeignPtr-import HaskellWorks.Data.Json.Simple.Cursor-import HaskellWorks.Data.RankSelect.CsPoppy--import qualified Data.ByteString                                      as BS-import qualified Data.ByteString.Char8                                as BSC-import qualified Data.ByteString.Internal                             as BSI-import qualified HaskellWorks.Data.BalancedParens.RangeMin            as RM-import qualified HaskellWorks.Data.FromForeignRegion                  as F-import qualified HaskellWorks.Data.Json.Simple.Cursor.Internal.IbBp   as J-import qualified HaskellWorks.Data.Json.Simple.Cursor.Internal.ToIbBp as J--fromByteString :: BS.ByteString -> JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy)-fromByteString bs = JsonCursor-  { cursorText      = bs-  , interests       = makeCsPoppy ib-  , balancedParens  = RM.mkRangeMin (makeCsPoppy bp)-  , cursorRank      = 1-  }-  where J.IbBp ib bp = J.toIbBp bs--fromForeignRegion :: F.ForeignRegion -> JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy)-fromForeignRegion (fptr, offset, size) = fromByteString (BSI.fromForeignPtr (castForeignPtr fptr) offset size)--fromString :: String -> JsonCursor BS.ByteString CsPoppy (RM.RangeMin CsPoppy)-fromString = fromByteString . BSC.pack
− hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Internal/IbBp.hs
@@ -1,10 +0,0 @@-module HaskellWorks.Data.Json.Simple.Cursor.Internal.IbBp where--import Data.Word--import qualified Data.Vector.Storable as DVS--data IbBp = IbBp-  { ib :: DVS.Vector Word64-  , bp :: DVS.Vector Word64-  }
− hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Internal/ToIbBp.hs
@@ -1,12 +0,0 @@-module HaskellWorks.Data.Json.Simple.Cursor.Internal.ToIbBp where--import qualified Data.ByteString                                    as BS-import qualified HaskellWorks.Data.Json.Simple.Cursor.Internal.IbBp as Z-import qualified HaskellWorks.Data.Json.Simple.Cursor.SemiIndex     as J--class ToIbBp a where-  toIbBp :: a -> Z.IbBp--instance ToIbBp BS.ByteString where-  toIbBp bs = Z.IbBp ib bp-    where J.SemiIndex _ ib bp = J.buildSemiIndex bs
− hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/Internal/Word8.hs
@@ -1,72 +0,0 @@-module HaskellWorks.Data.Json.Simple.Cursor.Internal.Word8 where--import Data.Word-import Data.Word8 hiding (isDigit)--import qualified Data.Char as C--isLeadingDigit :: Word8 -> Bool-isLeadingDigit w = w == _hyphen || (w >= _0 && w <= _9)--isTrailingDigit :: Word8 -> Bool-isTrailingDigit w = w == _plus || w == _hyphen || (w >= _0 && w <= _9) || w == _period || w == _E || w == _e--isAlphabetic :: Word8 -> Bool-isAlphabetic w = (w >= _A && w <= _Z) || (w >= _a && w <= _z)--isDigit :: Word8 -> Bool-isDigit w = w >= _0 && w <= _9--wIsJsonNumberDigit :: Word8 -> Bool-wIsJsonNumberDigit w = (w >= _0 && w <= _9) || w == _hyphen--doubleQuote :: Word8-doubleQuote = fromIntegral (C.ord '"')--backSlash :: Word8-backSlash = fromIntegral (C.ord '\\')--openBrace :: Word8-openBrace = fromIntegral (C.ord '{')--closeBrace :: Word8-closeBrace = fromIntegral (C.ord '}')--openBracket :: Word8-openBracket = fromIntegral (C.ord '[')--closeBracket :: Word8-closeBracket = fromIntegral (C.ord ']')--comma :: Word8-comma = fromIntegral (C.ord ',')--colon :: Word8-colon = fromIntegral (C.ord ':')--isPeriod :: Word8 -> Bool-isPeriod w = w == 46--isMinus :: Word8 -> Bool-isMinus w = w == 45--isPlus :: Word8 -> Bool-isPlus w = w == 43--isValueChar :: Word8 -> Bool-isValueChar c = isAlphabetic c || isDigit c || isPeriod c || isMinus c || isPlus c--isOpen :: Word8 -> Bool-isOpen c = c == openBracket || c == openBrace--isClose :: Word8 -> Bool-isClose c = c == closeBracket || c == closeBrace--isDelim :: Word8 -> Bool-isDelim c = c == comma || c == colon--isDoubleQuote :: Word8 -> Bool-isDoubleQuote c = c == doubleQuote--isBackSlash :: Word8 -> Bool-isBackSlash c = c == backSlash
− hw-json-simple-cursor/HaskellWorks/Data/Json/Simple/Cursor/SemiIndex.hs
@@ -1,80 +0,0 @@-{-# LANGUAGE DeriveFunctor     #-}-{-# LANGUAGE DeriveTraversable #-}-{-# LANGUAGE InstanceSigs      #-}-{-# LANGUAGE MultiWayIf        #-}--module HaskellWorks.Data.Json.Simple.Cursor.SemiIndex-  ( buildSemiIndex-  , SemiIndex(..)-  ) where--import Control.Monad.ST-import Data.Word--import qualified Data.ByteString                                     as BS-import qualified Data.ByteString.Unsafe                              as BSU-import qualified Data.Vector.Storable                                as DVS-import qualified HaskellWorks.Data.Bits.Writer.Storable              as W-import qualified HaskellWorks.Data.Json.Simple.Cursor.Internal.Word8 as W8--{-# ANN module ("HLint: ignore Reduce duplication"  :: String) #-}-{-# ANN module ("HLint: ignore Redundant do"        :: String) #-}--data Context = InJson | InString | InEscape deriving (Eq, Show)--data SemiIndex v = SemiIndex-  { semiIndexContext :: !Context-  , semiIndexIb      :: !v-  , semiIndexBp      :: !v-  } deriving (Functor, Traversable, Foldable)--buildSemiIndex :: BS.ByteString -> SemiIndex (DVS.Vector Word64)-buildSemiIndex bs = DVS.createT $ do-  let len = (BS.length bs + 7) `div` 8-  mib <- W.newWriter len-  mbp <- W.newWriter (len * 2)-  buildFromByteString mib mbp bs 0 InJson-{-# INLINE buildSemiIndex #-}--buildFromByteString :: W.Writer s -> W.Writer s -> BS.ByteString -> Int -> Context -> ST s (SemiIndex (DVS.MVector s Word64))-buildFromByteString ib bp bs i context = if i < BS.length bs-  then do-    let c = BSU.unsafeIndex bs i-    case context of-      InJson -> if-        | c == W8.openBracket || c == W8.openBrace -> do-          W.unsafeWriteBit bp 1-          W.unsafeWriteBit bp 1-          W.unsafeWriteBit ib 1-          buildFromByteString ib bp bs (i + 1) InJson-        | c == W8.closeBracket || c == W8.closeBrace -> do-          W.unsafeWriteBit bp 0-          W.unsafeWriteBit bp 0-          W.unsafeWriteBit ib 1-          buildFromByteString ib bp bs (i + 1) InJson-        | c == W8.comma || c == W8.colon -> do-          W.unsafeWriteBit bp 0-          W.unsafeWriteBit bp 1-          W.unsafeWriteBit ib 1-          buildFromByteString ib bp bs (i + 1) InJson-        | c == W8.doubleQuote -> do-          W.unsafeWriteBit ib 0-          buildFromByteString ib bp bs (i + 1) InString-        | otherwise -> do-          W.unsafeWriteBit ib 0-          buildFromByteString ib bp bs (i + 1) InJson-      InString -> do-        W.unsafeWriteBit ib 0-        let newContext = if-              | c == W8.doubleQuote  -> InJson-              | c == W8.backSlash    -> InEscape-              | otherwise           -> InString-        buildFromByteString ib bp bs (i + 1) newContext-      InEscape -> do-        W.unsafeWriteBit ib 0-        buildFromByteString ib bp bs (i + 1) InString-  else do-    ibv <- W.written ib-    bpv <- W.written bp-    return (SemiIndex context ibv bpv)-{-# INLINE buildFromByteString #-}
hw-json.cabal view
@@ -1,7 +1,7 @@ cabal-version:  2.2  name:           hw-json-version:        1.2.0.0+version:        1.2.0.1 synopsis:       Memory efficient JSON parser description:    Memory efficient JSON parser. Please see README.md category:       Data@@ -54,7 +54,8 @@ common hw-bits                  { build-depends: hw-bits                  >= 0.7.0.5    && < 0.8    } common hw-hspec-hedgehog        { build-depends: hw-hspec-hedgehog        >= 0.1.0.4    && < 0.2    } common hw-json-simd             { build-depends: hw-json-simd             >= 0.1.0.2    && < 0.2    }-common hw-json-standard-cursor  { build-depends: hw-json-standard-cursor  >= 0.1.0.0    && < 0.2    }+common hw-json-simple-cursor    { build-depends: hw-json-simple-cursor    >= 0.1.0.1    && < 0.2    }+common hw-json-standard-cursor  { build-depends: hw-json-standard-cursor  >= 0.1.0.1    && < 0.2    } common hw-mquery                { build-depends: hw-mquery                >= 0.2.0.0    && < 0.3    } common hw-parser                { build-depends: hw-parser                >= 0.1        && < 0.2    } common hw-prim                  { build-depends: hw-prim                  >= 0.6.2.28   && < 0.7    }@@ -80,24 +81,6 @@     ghc-options: -mbmi2 -msse4.2     cpp-options: -DBMI2_ENABLED -library hw-json-simple-cursor-  import:   base, config-          , bytestring-          , hw-balancedparens-          , hw-bits-          , hw-prim-          , hw-rankselect-          , hw-rankselect-base-          , vector-          , word8-  hs-source-dirs:       hw-json-simple-cursor-  exposed-modules:      HaskellWorks.Data.Json.Simple.Cursor-                        HaskellWorks.Data.Json.Simple.Cursor.Fast-                        HaskellWorks.Data.Json.Simple.Cursor.SemiIndex-                        HaskellWorks.Data.Json.Simple.Cursor.Internal.IbBp-                        HaskellWorks.Data.Json.Simple.Cursor.Internal.ToIbBp-                        HaskellWorks.Data.Json.Simple.Cursor.Internal.Word8- library   import:   base, config           , ansi-wl-pprint@@ -107,6 +90,7 @@           , dlist           , hw-balancedparens           , hw-bits+          , hw-json-simple-cursor           , hw-json-standard-cursor           , hw-mquery           , hw-parser@@ -122,7 +106,6 @@   hs-source-dirs:       src   other-modules:        Paths_hw_json   autogen-modules:      Paths_hw_json-  build-depends:        hw-json-simple-cursor   exposed-modules:       HaskellWorks.Data.Json.DecodeError       HaskellWorks.Data.Json.FromValue@@ -144,12 +127,6 @@       HaskellWorks.Data.Json.Simple.Value       HaskellWorks.Data.Json.Standard.Load.Partial       HaskellWorks.Data.Json.Value-  reexported-modules:-      HaskellWorks.Data.Json.Simple.Cursor-    , HaskellWorks.Data.Json.Simple.Cursor.Fast-    , HaskellWorks.Data.Json.Simple.Cursor.SemiIndex-    , HaskellWorks.Data.Json.Simple.Cursor.Internal.IbBp-    , HaskellWorks.Data.Json.Simple.Cursor.Internal.ToIbBp  executable hw-json   import:   base, config@@ -158,6 +135,7 @@           , generic-lens           , hw-balancedparens           , hw-json-simd+          , hw-json-simple-cursor           , hw-json-standard-cursor           , hw-mquery           , hw-prim@@ -189,6 +167,7 @@           , hw-balancedparens           , hw-bits           , hw-hspec-hedgehog+          , hw-json-simple-cursor           , hw-json-standard-cursor           , hw-prim           , hw-rankselect