Skip to content

Commit 8d34e72

Browse files
authored
add eager keyword argument (#75)
1 parent c8ae367 commit 8d34e72

File tree

3 files changed

+8
-7
lines changed

3 files changed

+8
-7
lines changed

src/buffer.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,12 +123,13 @@ function emptybuffer!(buf::Buffer)
123123
end
124124

125125
# Make margin with ≥`minsize` and return the size of it.
126-
function makemargin!(buf::Buffer, minsize::Integer)
126+
# If eager is true, it tries to move data even when the buffer has enough margin.
127+
function makemargin!(buf::Buffer, minsize::Integer; eager::Bool = false)
127128
@assert minsize 0
128129
if buffersize(buf) == 0 && buf.markpos == 0
129130
buf.bufferpos = buf.marginpos = 1
130131
end
131-
if marginsize(buf) < minsize
132+
if marginsize(buf) < minsize || eager
132133
# shift data to left
133134
if buf.markpos == 0
134135
datapos = buf.bufferpos

src/noop.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,16 +148,16 @@ end
148148
# These methods are overloaded for the `Noop` codec because it has only one
149149
# buffer for efficiency.
150150

151-
function fillbuffer(stream::NoopStream)
151+
function fillbuffer(stream::NoopStream; eager::Bool = false)
152152
changemode!(stream, :read)
153153
buffer = stream.state.buffer1
154154
@assert buffer === stream.state.buffer2
155155
if stream.stream isa TranscodingStream && buffer === stream.stream.state.buffer1
156156
# Delegate the operation when buffers are shared.
157-
return fillbuffer(stream.stream)
157+
return fillbuffer(stream.stream, eager = eager)
158158
end
159159
nfilled::Int = 0
160-
while buffersize(buffer) == 0 && !eof(stream.stream)
160+
while ((!eager && buffersize(buffer) == 0) || (eager && makemargin!(buffer, 0, eager = true) > 0)) && !eof(stream.stream)
161161
makemargin!(buffer, 1)
162162
nfilled += readdata!(stream.stream, buffer)
163163
end

src/stream.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -556,12 +556,12 @@ end
556556
# Buffering
557557
# ---------
558558

559-
function fillbuffer(stream::TranscodingStream)
559+
function fillbuffer(stream::TranscodingStream; eager::Bool = false)
560560
changemode!(stream, :read)
561561
buffer1 = stream.state.buffer1
562562
buffer2 = stream.state.buffer2
563563
nfilled::Int = 0
564-
while buffersize(buffer1) == 0 && stream.state.mode != :stop
564+
while ((!eager && buffersize(buffer1) == 0) || (eager && makemargin!(buffer1, 0, eager = true) > 0)) && stream.state.mode != :stop
565565
if stream.state.code == :end
566566
if buffersize(buffer2) == 0 && eof(stream.stream)
567567
break

0 commit comments

Comments
 (0)