if last && state.block_open != 2 { /* Emit end of previous block */
quick_end_block!(false); /* Emit start of last block */
quick_start_block!(last);
} elseif state.block_open == 0 && state.lookahead > 0 { /* Start new block only when we have lookahead data, so that if no
input data is given an empty block will not be written */
quick_start_block!(last);
}
loop { if state.bit_writer.pending.pending + State::BIT_BUF_SIZE.div_ceil(8) as usize
>= state.pending_buf_size()
{
flush_pending(stream);
state = &mut stream.state; if stream.avail_out == 0 { returnif last
&& stream.avail_in == 0
&& state.bit_writer.bits_used == 0
&& state.block_open == 0
{
BlockState::FinishStarted
} else {
BlockState::NeedMore
};
}
}
if state.lookahead < MIN_LOOKAHEAD {
fill_window(stream);
state = &mut stream.state;
if state.lookahead < MIN_LOOKAHEAD && matches!(flush, DeflateFlush::NoFlush) { return BlockState::NeedMore;
} if state.lookahead == 0 { break;
}
if state.block_open == 0 { // Start new block when we have lookahead data, // so that if no input data is given an empty block will not be written
quick_start_block!(last);
}
}
if state.lookahead >= WANT_MIN_MATCH { let hash_head = state.quick_insert_string(state.strstart); let dist = state.strstart as isize - hash_head as isize;
if dist <= state.max_dist() as isize && dist > 0 { let str_start = &state.window.filled()[state.strstart..]; let match_start = &state.window.filled()[hash_head as usize..];
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.