ptr-poker-0.1.1.2: Pointer poking action construction and composition toolkit

Safe HaskellNone
LanguageHaskell2010

PtrPoker.Write

Synopsis

Documentation

writeToByteString :: Write -> ByteString Source #

Execute Write, producing strict ByteString.

data Write Source #

Specification of how many bytes to allocate and how to populate them.

Useful for creating strict bytestrings and tasks like that.

Constructors

Write 

Fields

Instances
IsString Write Source #

Reuses the IsString instance of ByteString.

Instance details

Defined in PtrPoker.Write

Methods

fromString :: String -> Write #

Semigroup Write Source # 
Instance details

Defined in PtrPoker.Write

Methods

(<>) :: Write -> Write -> Write #

sconcat :: NonEmpty Write -> Write #

stimes :: Integral b => b -> Write -> Write #

Monoid Write Source # 
Instance details

Defined in PtrPoker.Write

Methods

mempty :: Write #

mappend :: Write -> Write -> Write #

mconcat :: [Write] -> Write #

word8 :: Word8 -> Write Source #

Render Word8 as byte.

word64AsciiDec :: Word64 -> Write Source #

Render Word64 in ASCII decimal.

wordAsciiDec :: Word -> Write Source #

Render Word in ASCII decimal.

int64AsciiDec :: Int64 -> Write Source #

Render Int64 in ASCII decimal.

intAsciiDec :: Int -> Write Source #

Render Int in ASCII decimal.

doubleAsciiDec :: Double -> Write Source #

Render double interpreting non-real values, such as NaN, Infinity, -Infinity, as is.

zeroNonRealDoubleAsciiDec :: Double -> Write Source #

Render double interpreting non real values, such as NaN, Infinity, -Infinity, as zero.

scientificAsciiDec :: Scientific -> Write Source #

Render Scientific in ASCII decimal.

byteString :: ByteString -> Write Source #

Efficiently copy the contents of ByteString using memcpy.

textUtf8 :: Text -> Write Source #

Render Text in UTF8.

Does pretty much the same as encodeUtf8, both implementation and performance-wise, while allowing you to avoid redundant memcpy compared to (byteString . encodeUtf8).

Following are the benchmark results comparing the performance of (writeToByteString . textUtf8) with Data.Text.Encoding.encodeUtf8 on inputs in Latin and Greek (requiring different number of surrogate bytes). The results show that they are quite similar.

Benchmark results

Expand
textUtf8/ptr-poker/latin/1               mean 57.06 ns  ( +- 3.283 ns  )
textUtf8/ptr-poker/latin/10              mean 214.1 ns  ( +- 8.601 ns  )
textUtf8/ptr-poker/latin/100             mean 1.536 μs  ( +- 75.03 ns  )
textUtf8/ptr-poker/greek/1               mean 85.98 ns  ( +- 5.038 ns  )
textUtf8/ptr-poker/greek/10              mean 482.1 ns  ( +- 12.38 ns  )
textUtf8/ptr-poker/greek/100             mean 4.398 μs  ( +- 33.94 ns  )
textUtf8/text/latin/1                    mean 60.28 ns  ( +- 3.517 ns  )
textUtf8/text/latin/10                   mean 201.6 ns  ( +- 8.118 ns  )
textUtf8/text/latin/100                  mean 1.323 μs  ( +- 51.25 ns  )
textUtf8/text/greek/1                    mean 99.14 ns  ( +- 1.264 ns  )
textUtf8/text/greek/10                   mean 483.4 ns  ( +- 5.844 ns  )
textUtf8/text/greek/100                  mean 4.238 μs  ( +- 40.55 ns  )