| ||||||||||||||
| ||||||||||||||
| ||||||||||||||
Description | ||||||||||||||
Core types and functions for the Builder monoid and the Put monad. | ||||||||||||||
Synopsis | ||||||||||||||
Build Steps | ||||||||||||||
data BufRange | ||||||||||||||
| ||||||||||||||
data BuildSignal a | ||||||||||||||
data BuildStep a | ||||||||||||||
done :: Ptr Word8 -> a -> BuildSignal a | ||||||||||||||
bufferFull :: Int -> Ptr Word8 -> (BufRange -> IO (BuildSignal a)) -> BuildSignal a | ||||||||||||||
insertByteString :: Ptr Word8 -> ByteString -> (BufRange -> IO (BuildSignal a)) -> BuildSignal a | ||||||||||||||
Builder | ||||||||||||||
data Builder | ||||||||||||||
| ||||||||||||||
fromBuildStepCont :: (forall r. (BufRange -> IO (BuildSignal r)) -> BufRange -> IO (BuildSignal r)) -> Builder | ||||||||||||||
fromPut :: Put a -> Builder | ||||||||||||||
Ignore the value of a put and only exploit its output side effect. | ||||||||||||||
flush :: Builder | ||||||||||||||
Output all data written in the current buffer and start a new chunk. The use uf this function depends on how the resulting bytestrings are consumed. flush is possibly not very useful in non-interactive scenarios. However, it is kept for compatibility with the builder provided by Data.Binary.Builder. When using toLazyByteString to extract a lazy ByteString from a Builder, this means that a new chunk will be started in the resulting lazy ByteString. The remaining part of the buffer is spilled, if the reamining free space is smaller than the minimal desired buffer size. | ||||||||||||||
Put | ||||||||||||||
data Put a | ||||||||||||||
| ||||||||||||||
putBuilder :: Builder -> Put () | ||||||||||||||
Put the given builder. | ||||||||||||||
putBuildStepCont :: (forall r. (a -> BufRange -> IO (BuildSignal r)) -> BufRange -> IO (BuildSignal r)) -> Put a | ||||||||||||||
Writes | ||||||||||||||
module Blaze.ByteString.Builder.Internal.Write | ||||||||||||||
Execution | ||||||||||||||
toLazyByteString :: Builder -> ByteString | ||||||||||||||
Extract the lazy ByteString from the builder by running it with default buffer sizes. Use this function, if you do not have any special considerations with respect to buffer sizes. toLazyByteString b = toLazyByteStringWith defaultBufferSize defaultMinimalBufferSize defaultFirstBufferSize b L.empty Note that toLazyByteString is a Monoid homomorphism. toLazyByteString mempty == mempty toLazyByteString (x `mappend` y) == toLazyByteString x `mappend` toLazyByteString y However, in the second equation, the left-hand-side is generally faster to execute. | ||||||||||||||
toLazyByteStringWith | ||||||||||||||
| ||||||||||||||
toByteString :: Builder -> ByteString | ||||||||||||||
Run the builder to construct a strict bytestring containing the sequence of bytes denoted by the builder. This is done by first serializing to a lazy bytestring and then packing its chunks to a appropriately sized strict bytestring. toByteString = packChunks . toLazyByteString Note that toByteString is a Monoid homomorphism. toByteString mempty == mempty toByteString (x `mappend` y) == toByteString x `mappend` toByteString y However, in the second equation, the left-hand-side is generally faster to execute. | ||||||||||||||
toByteStringIO :: (ByteString -> IO ()) -> Builder -> IO () | ||||||||||||||
Run the builder with a defaultBufferSized buffer and execute the given IO action whenever the buffer is full or gets flushed. toByteStringIO = toByteStringIOWith defaultBufferSize This is a Monoid homomorphism in the following sense. toByteStringIO io mempty == return () toByteStringIO io (x `mappend` y) == toByteStringIO io x >> toByteStringIO io y | ||||||||||||||
toByteStringIOWith | ||||||||||||||
| ||||||||||||||
Deafult Sizes | ||||||||||||||
defaultFirstBufferSize :: Int | ||||||||||||||
The default length (64) for the first buffer to be allocated when converting a Builder to a lazy bytestring. See toLazyByteStringWith for further explanation. | ||||||||||||||
defaultMinimalBufferSize :: Int | ||||||||||||||
The minimal length (~4kb) a buffer must have before filling it and outputting it as a chunk of the output stream. This size determines when a buffer is spilled after a flush or a direct bytestring insertion. It is also the size of the first chunk generated by toLazyByteString. | ||||||||||||||
defaultBufferSize :: Int | ||||||||||||||
Default size (~32kb) for the buffer that becomes a chunk of the output stream once it is filled. | ||||||||||||||
defaultMaximalCopySize :: Int | ||||||||||||||
The maximal number of bytes for that copying is cheaper than direct insertion into the output stream. This takes into account the fragmentation that may occur in the output buffer due to the early flush implied by the direct bytestring insertion. defaultMaximalCopySize = 2 * defaultMinimalBufferSize | ||||||||||||||
Produced by Haddock version 2.6.0 |