Unboxed buffer write operation.
The next offset must be greater than or equal to the input buffer
offset. This is not checked.
Note that the only way to find out the length of a write is to perform
it. But you can't perform a length without providing a correctly-sized
buffer. Thus, you may only use a
Poke# when you have a buffer
large enough to fit its maximum write length-- which in turn means
means you must track write lengths separately. (
Write does
this.)
I provide this highly unsafe, seemingly unhelpful type because it's a
requirement for
Write, and here I can guarantee performance
better because I don't need to worry about laziness.
We cannot be polymorphic on the pointer type unless we box the
pointer. We thus limit ourselves to writing to
Addr#s, and not
MutableByteArray#s. (I figure we're most interested in
ByteStrings, which use
Addr#.)
Note that if we did provide write length, then the next offset might
appear superfluous. But that next offset is usually already
calculated, and may be passed directly to sequenced writes, unlike if
we returned a write length which would need to be added to the
original offset.