BufferedDecoder: feed by pointer

This commit is contained in:
Emery Hemingway 2022-10-23 23:39:37 -05:00
parent 5fe041fa45
commit 62480318cc
2 changed files with 7 additions and 4 deletions

View File

@ -1,6 +1,6 @@
# Package
version = "20221022"
version = "20221023"
author = "Emery Hemingway"
description = "data model and serialization format"
license = "Unlicense"

View File

@ -647,10 +647,13 @@ proc newBufferedDecoder*(maxSize = 4096): BufferedDecoder =
assert $pr == "<foobar>"
BufferedDecoder(stream: newStringStream(), maxSize: maxSize)
proc feed*[T: byte|char](dec: var BufferedDecoder; data: openarray[T]) =
if dec.maxSize < (dec.stream.getPosition + data.len):
proc feed*(dec: var BufferedDecoder; buf: pointer; len: int) =
if dec.maxSize < (dec.stream.getPosition + len):
raise newException(IOError, "BufferedDecoder at maximum buffer size")
dec.stream.writeData(unsafeAddr data[0], data.len)
dec.stream.writeData(buf, len)
proc feed*[T: byte|char](dec: var BufferedDecoder; data: openarray[T]) =
dec.feed(unsafeAddr data[0], data.len)
proc decode*(dec: var BufferedDecoder; E = void): (bool, Preserve[E]) =
## Decode from `dec`. If decoding fails the internal position of the