packages feed

ptr 0.16.7 → 0.16.7.1

raw patch · 5 files changed

+37/−5 lines, 5 files

Files

+ library/Ptr/List.hs view
@@ -0,0 +1,13 @@+module Ptr.List+where++import Ptr.Prelude+++{-# INLINE reverseDigits #-}+reverseDigits :: Integral a => a {-^ Radix -} -> a {-^ Number -} -> [a]+reverseDigits radix =+  let+    loop x = case divMod x radix of+      (next, digit) -> digit : if next <= 0 then [] else loop next+    in loop
library/Ptr/PokeIO.hs view
@@ -38,3 +38,15 @@         0 -> return ()         _ -> loop (plusPtr ptr (-1)) quot   in \ lastIndex x ptr -> loop (plusPtr ptr lastIndex) x++{-# INLINE reverseAsciiDigits #-}+reverseAsciiDigits :: (Integral a) => Int -> [a] -> PokeIO+reverseAsciiDigits index elements ptr =+  let+    loop ptr =+      \ case+        digit : tail -> do+          IO.pokeWord8 ptr (48 + fromIntegral digit)+          loop (plusPtr ptr (-1)) tail+        _ -> return ()+    in loop (plusPtr ptr index) elements
library/Ptr/Poking.hs view
@@ -6,6 +6,7 @@ import qualified Ptr.Poke as C import qualified Ptr.PokeAndPeek as D import qualified Ptr.PokeIO as E+import qualified Ptr.List as List import qualified Data.ByteString.Internal as B import qualified Data.Vector as F import qualified Data.Vector.Generic as GenericVector@@ -118,9 +119,9 @@ asciiIntegral = \ case   0 -> word8 48   x -> let-    lastIndex = (floor . logBase 10 . fromIntegral) x-    size = succ lastIndex-    action = E.asciiUnsignedIntegral lastIndex x+    reverseDigits = List.reverseDigits 10 x+    size = List.length reverseDigits+    action = E.reverseAsciiDigits (pred size) reverseDigits     in Poking size action  {-# INLINE asciiChar #-}
ptr.cabal view
@@ -1,5 +1,5 @@ name: ptr-version: 0.16.7+version: 0.16.7.1 category: Ptr, Data synopsis: Abstractions for operations on pointers homepage: https://github.com/nikita-volkov/ptr@@ -35,6 +35,7 @@     Ptr.Prelude     Ptr.Receive.Core     Ptr.UncheckedShifting+    Ptr.List   build-depends:     base >=4.9 && <5,     bytestring >=0.10 && <0.11,
tests/Main.hs view
@@ -43,7 +43,7 @@         assertEqual "" "000" (A.poking (F.asciiPaddedAndTrimmedIntegral 3 (-1)))       ,       testCase "asciiUtcTimeInIso8601" $ do-        assertEqual "" "2017-02-01T05:03:58Z" (A.poking (F.asciiUtcTimeInIso8601 (read "2017-02-01 05:03:58")))+        assertEqual "" "2017-02-01T05:03:58Z" (A.poking (F.asciiUtcTimeInIso8601 (read "2017-02-01 05:03:58Z")))       ,       testCase "fromString" $ do         assertEqual "" "123" (A.poking "123")@@ -53,6 +53,11 @@     ]     ,     parsing+    ,+    testGroup "Regression" [+        testCase "https://github.com/nikita-volkov/hasql-dynamic-statements/issues/2" $+          assertEqual "" "$1000" (A.poking (F.word8 36 <> F.asciiIntegral 1000))+      ]   ]  parsing :: TestTree