An unmaterialized sequence of bytes that may be pasted into a mutable byte array.
Modulebytebuild-0.3.16.2Haskell2010
Data.Bytes.Builder.Unsafe
- 3 types
- 14 values
- Packagebytebuild-0.3.16.2
- Exports17
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceUnsafe.hs
Types
3 declarationsA list of committed chunks along with the chunk currently being
written to. This is kind of like a non-empty variant of Commmits
but with the additional invariant that the head chunk is a mutable
byte array.
Constructors
BuilderState (MutableByteArray# s) Int# Int# !(Commits s)
Constructors
Mutable (MutableByteArray# s) Int# !(Commits s)Immutable ByteArray# Int# Int# !(Commits s)Initial
Execution
2 declarationsRun a builder, performing an in-place update on the state.
The BuilderState argument must not be reused after being passed
to this function. That is, its use must be affine.
Construction
1 declarationfromEffect Builder State
2 declarationsCreate an empty BuilderState with a buffer of the given size.
Push the active chunk onto the top of the commits.
The BuilderState argument must not be reused after being passed
to this function. That is, its use must be affine.
Finalization
4 declarationsCons the chunks from a list of Commits onto an initial
Chunks list (this argument is often ChunksNil). This reverses
the order of the chunks, which is desirable since builders assemble
Commits with the chunks backwards. This performs an in-place shrink
and freezes any mutable byte arrays it encounters. Consequently,
these must not be reused.
Variant of reverseCommitsOntoChunks that does not reverse the order of the commits. Since commits are built backwards by consing, this means that the chunks appended to the front will be backwards. Within each chunk, however, the bytes will be in the correct order.
Unlike reverseCommitsOntoChunks, this function is not tail recursive.
copyReverseCommits :: MutableByteArray sDestination
-> IntDestination range successor
-> Commits sSource
-> ST s Int
Copy the contents of the chunks into a mutable array, reversing the order of the chunks. Precondition: The destination must have enough space to house the contents. This is not checked.
Add the total number of bytes in the commits to first argument.
Commit Distance
2 declarationsCompute the number of bytes between the last byte and the offset
specified in a chunk. Precondition: the chunk must exist in the
list of committed chunks. This relies on mutable byte arrays having
identity (e.g. it uses sameMutableByteArray#).
Variant of commitDistance where you get to supply a head of the commit list that has not yet been committed.
Safe Functions
2 declarationsThese functions are actually completely safe, but they are defined
here because they are used by typeclass instances. Import them from
Data.Bytes.Builder instead.
Create a builder from a cons-list of Char. These must be UTF-8 encoded.
Create a builder from a NUL-terminated CString. This ignores any
textual encoding, copying bytes until NUL is reached.
Pasting with Preconditions
1 declarationpasteUtf8TextJson# :: ByteArray#source
-> Int#source offset
-> Int#source length
-> MutableByteArray# sdestination buffer
-> Int#offset into destination buffer
-> State# sstate token
-> (# State# s, Int# #)
Encode (UTF-8 encoded) text as a JSON string, wrapping it in double quotes.
This escapes all characters with code points below 0x20.
Precondition: The slice of the byte argument is UTF-8 encoded text.
Precondition: There is enough space in the buffer for the result to be written to. A simple way to ensure enough space is to allocate
6N + 2bytes, where N is the length of the argument. However, the caller may use clever heuristics to find a lower upper bound.Result: The next offset in the destination buffer