File tree Expand file tree Collapse file tree 3 files changed +8
-7
lines changed Expand file tree Collapse file tree 3 files changed +8
-7
lines changed Original file line number Diff line number Diff line change @@ -123,12 +123,13 @@ function emptybuffer!(buf::Buffer)
123
123
end
124
124
125
125
# 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 )
127
128
@assert minsize ≥ 0
128
129
if buffersize (buf) == 0 && buf. markpos == 0
129
130
buf. bufferpos = buf. marginpos = 1
130
131
end
131
- if marginsize (buf) < minsize
132
+ if marginsize (buf) < minsize || eager
132
133
# shift data to left
133
134
if buf. markpos == 0
134
135
datapos = buf. bufferpos
Original file line number Diff line number Diff line change @@ -148,16 +148,16 @@ end
148
148
# These methods are overloaded for the `Noop` codec because it has only one
149
149
# buffer for efficiency.
150
150
151
- function fillbuffer (stream:: NoopStream )
151
+ function fillbuffer (stream:: NoopStream ; eager :: Bool = false )
152
152
changemode! (stream, :read )
153
153
buffer = stream. state. buffer1
154
154
@assert buffer === stream. state. buffer2
155
155
if stream. stream isa TranscodingStream && buffer === stream. stream. state. buffer1
156
156
# Delegate the operation when buffers are shared.
157
- return fillbuffer (stream. stream)
157
+ return fillbuffer (stream. stream, eager = eager )
158
158
end
159
159
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)
161
161
makemargin! (buffer, 1 )
162
162
nfilled += readdata! (stream. stream, buffer)
163
163
end
Original file line number Diff line number Diff line change @@ -556,12 +556,12 @@ end
556
556
# Buffering
557
557
# ---------
558
558
559
- function fillbuffer (stream:: TranscodingStream )
559
+ function fillbuffer (stream:: TranscodingStream ; eager :: Bool = false )
560
560
changemode! (stream, :read )
561
561
buffer1 = stream. state. buffer1
562
562
buffer2 = stream. state. buffer2
563
563
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
565
565
if stream. state. code == :end
566
566
if buffersize (buffer2) == 0 && eof (stream. stream)
567
567
break
You can’t perform that action at this time.
0 commit comments