Skip to content

Commit f02d029

Browse files
committed
Merge rust-bitcoin#5079: consensus_encoding: Remove prefix_read field
305062d consensus_encoding: Remove prefix_read field (Tobin C. Harding) Pull request description: We can just use the existence of the optional compact size decoder to abstract over whether the prefix has been read or not. We did this already in `VecDecoder`. Internal change only, no logic change. ACKs for top commit: nyonson: ACK 305062d apoelstra: ACK 305062d; successfully ran local tests Tree-SHA512: c78fbba2391519cac6d282d8bbd4c3448bd103e32d8c93fce17c7d1e7a76c39fc65a999e3c1c53c102fd5c7069eb38451a2f0da7f80bd446c8a16d78e5dc4da7
2 parents c2ad0b1 + 305062d commit f02d029

File tree

1 file changed

+7
-13
lines changed

1 file changed

+7
-13
lines changed

consensus_encoding/src/decode/decoders.rs

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ const MAX_VEC_SIZE: u64 = 4_000_000;
2626
#[cfg(feature = "alloc")]
2727
pub struct ByteVecDecoder {
2828
prefix_decoder: Option<CompactSizeDecoder>,
29-
prefix_read: bool, // true if the length prefix has been read.
3029
buffer: Vec<u8>,
3130
bytes_expected: usize,
3231
bytes_written: usize,
@@ -37,8 +36,7 @@ impl ByteVecDecoder {
3736
/// Constructs a new byte decoder.
3837
pub fn new() -> Self {
3938
Self {
40-
prefix_decoder: None,
41-
prefix_read: false,
39+
prefix_decoder: Some(CompactSizeDecoder::default()),
4240
buffer: Vec::new(),
4341
bytes_expected: 0,
4442
bytes_written: 0,
@@ -59,16 +57,14 @@ impl Decoder for ByteVecDecoder {
5957
fn push_bytes(&mut self, bytes: &mut &[u8]) -> Result<bool, Self::Error> {
6058
use {ByteVecDecoderError as E, ByteVecDecoderErrorInner as Inner};
6159

62-
if !self.prefix_read {
63-
let mut decoder = self.prefix_decoder.take().unwrap_or_default();
64-
60+
if let Some(mut decoder) = self.prefix_decoder.take() {
6561
if decoder.push_bytes(bytes).map_err(|e| E(Inner::LengthPrefixDecode(e)))? {
6662
self.prefix_decoder = Some(decoder);
6763
return Ok(true);
6864
}
6965
let length = decoder.end().map_err(|e| E(Inner::LengthPrefixDecode(e)))?;
7066

71-
self.prefix_read = true;
67+
self.prefix_decoder = None;
7268
self.bytes_expected =
7369
cast_to_usize_if_valid(length).map_err(|e| E(Inner::LengthPrefixInvalid(e)))?;
7470

@@ -100,13 +96,11 @@ impl Decoder for ByteVecDecoder {
10096
}
10197

10298
fn min_bytes_needed(&self) -> usize {
103-
if !self.prefix_read {
104-
return match &self.prefix_decoder {
105-
Some(compact_size_decoder) => compact_size_decoder.min_bytes_needed(),
106-
None => 1,
107-
};
99+
if let Some(prefix_decoder) = &self.prefix_decoder {
100+
prefix_decoder.min_bytes_needed()
101+
} else {
102+
self.bytes_expected - self.bytes_written
108103
}
109-
self.bytes_expected - self.bytes_written
110104
}
111105
}
112106

0 commit comments

Comments
 (0)