Skip to content

Commit e189f86

Browse files
committed
refactor: avoid unwrap_unchecked
1 parent 9e3774f commit e189f86

File tree

1 file changed

+17
-25
lines changed

1 file changed

+17
-25
lines changed

src/codec/lz4/encoder.rs

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -123,27 +123,24 @@ impl Lz4Encoder {
123123
Lz4Fn::Flush | Lz4Fn::End => self.flush_buffer_size,
124124
};
125125

126-
let direct_output = output.unwritten().len() >= min_dst_size;
127-
128-
let (dst_buffer, dst_max_size) = if direct_output {
129-
let output_len = output.unwritten().len();
130-
(output.unwritten_mut(), output_len)
131-
} else {
126+
let (dst_buffer, maybe_internal_buffer) = if min_dst_size > output.unwritten().len() {
132127
let buffer_size = self.block_buffer_size;
133128
let buffer = self
134129
.maybe_buffer
135130
.get_or_insert_with(|| PartialBuffer::new(Vec::with_capacity(buffer_size)));
136131
buffer.reset();
137-
(buffer.unwritten_mut(), buffer_size)
132+
(buffer.unwritten_mut().as_mut_ptr(), Some(buffer))
133+
} else {
134+
(output.unwritten_mut().as_mut_ptr(), None)
138135
};
139136

140137
let len = match lz4_fn {
141138
Lz4Fn::Begin => {
142139
let len = check_error(unsafe {
143140
LZ4F_compressBegin(
144141
self.ctx.get_mut().ctx,
145-
dst_buffer.as_mut_ptr(),
146-
dst_max_size,
142+
dst_buffer,
143+
min_dst_size,
147144
&self.preferences,
148145
)
149146
})?;
@@ -155,8 +152,8 @@ impl Lz4Encoder {
155152
let len = check_error(unsafe {
156153
LZ4F_compressUpdate(
157154
self.ctx.get_mut().ctx,
158-
dst_buffer.as_mut_ptr(),
159-
dst_max_size,
155+
dst_buffer,
156+
min_dst_size,
160157
input.unwritten().as_ptr(),
161158
size,
162159
core::ptr::null(),
@@ -168,17 +165,17 @@ impl Lz4Encoder {
168165
Lz4Fn::Flush => check_error(unsafe {
169166
LZ4F_flush(
170167
self.ctx.get_mut().ctx,
171-
dst_buffer.as_mut_ptr(),
172-
dst_max_size,
168+
dst_buffer,
169+
min_dst_size,
173170
core::ptr::null(),
174171
)
175172
})?,
176173
Lz4Fn::End => {
177174
let len = check_error(unsafe {
178175
LZ4F_compressEnd(
179176
self.ctx.get_mut().ctx,
180-
dst_buffer.as_mut_ptr(),
181-
dst_max_size,
177+
dst_buffer,
178+
min_dst_size,
182179
core::ptr::null(),
183180
)
184181
})?;
@@ -187,20 +184,15 @@ impl Lz4Encoder {
187184
}
188185
};
189186

190-
let drained_after = if direct_output {
191-
output.advance(len);
192-
len
193-
} else {
194-
// SAFETY: buffer is initialized above incase of a non-direct operation
187+
let drained_after = if let Some(internal_buffer) = maybe_internal_buffer {
195188
unsafe {
196-
self.maybe_buffer
197-
.as_mut()
198-
.unwrap_unchecked()
199-
.get_mut()
200-
.set_len(len);
189+
internal_buffer.get_mut().set_len(len);
201190
}
202191
let (d, _) = self.drain_buffer(output);
203192
d
193+
} else {
194+
output.advance(len);
195+
len
204196
};
205197

206198
Ok(drained_before + drained_after)

0 commit comments

Comments
 (0)