From 56ec45072db27b6bea5ba57e149e66ae29e47f60 Mon Sep 17 00:00:00 2001 From: Boyu Yang Date: Thu, 23 Apr 2020 14:32:40 +0800 Subject: [PATCH 1/2] chore(deps): bump molecule from 0.5.0 to 0.6.0 --- Cargo.lock | 17 +- Makefile | 2 +- util/types/Cargo.toml | 2 +- util/types/src/generated/blockchain.rs | 534 ++++---- util/types/src/generated/extensions.rs | 1592 ++++++++++-------------- util/types/src/generated/protocols.rs | 356 +++--- 6 files changed, 1093 insertions(+), 1410 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a6b7e74a5b..cca7521e58 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1093,7 +1093,7 @@ dependencies = [ "crossbeam-channel", "failure", "merkle-cbt", - "molecule", + "molecule 0.6.0", "numext-fixed-uint", "proptest", ] @@ -2673,6 +2673,17 @@ dependencies = [ "faster-hex 0.4.1", ] +[[package]] +name = "molecule" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "663f76cc52219e5957e2f5563cce9d89f98aa8503c9c898b5c412d97df663998" +dependencies = [ + "bytes 0.5.4", + "cfg-if", + "faster-hex 0.4.1", +] + [[package]] name = "native-tls" version = "0.2.2" @@ -3990,7 +4001,7 @@ dependencies = [ "igd", "libc", "log 0.4.8", - "molecule", + "molecule 0.5.0", "tentacle-multiaddr", "tentacle-secio", "tokio 0.2.17", @@ -4022,7 +4033,7 @@ dependencies = [ "bytes 0.5.4", "futures 0.3.4", "log 0.4.8", - "molecule", + "molecule 0.5.0", "openssl", "openssl-sys", "rand 0.7.0", diff --git a/Makefile b/Makefile index 1759fa45a9..a4bdb6b665 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .DEFAULT_GOAL:=help SHELL = /bin/sh MOLC := moleculec -MOLC_VERSION := 0.5.0 +MOLC_VERSION := 0.6.0 VERBOSE := $(if ${CI},--verbose,) CLIPPY_OPTS := -D warnings -D clippy::clone_on_ref_ptr -D clippy::enum_glob_use -D clippy::fallible_impl_from CKB_TEST_ARGS := -c 4 diff --git a/util/types/Cargo.toml b/util/types/Cargo.toml index 6c0d5a4feb..9a0ca12788 100644 --- a/util/types/Cargo.toml +++ b/util/types/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" license = "MIT" [dependencies] -molecule = "=0.5.0" +molecule = "=0.6.0" ckb-fixed-hash = { path = "../fixed-hash" } numext-fixed-uint = { version = "0.1", features = ["support_rand", "support_heapsize", "support_serde"] } bytes = { version="0.5.4", features = ["serde"] } diff --git a/util/types/src/generated/blockchain.rs b/util/types/src/generated/blockchain.rs index 705854a885..f32c6c97a2 100644 --- a/util/types/src/generated/blockchain.rs +++ b/util/types/src/generated/blockchain.rs @@ -1,4 +1,4 @@ -// Generated by Molecule 0.5.0 +// Generated by Molecule 0.6.0 use molecule::prelude::*; #[derive(Clone)] @@ -2419,9 +2419,6 @@ impl BytesVec { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -2436,12 +2433,14 @@ impl BytesVec { } } pub fn get_unchecked(&self, idx: usize) -> Bytes { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { Bytes::new_unchecked(self.0.slice(start..)) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; Bytes::new_unchecked(self.0.slice(start..end)) } } @@ -2514,9 +2513,6 @@ impl<'r> BytesVecReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -2531,12 +2527,14 @@ impl<'r> BytesVecReader<'r> { } } pub fn get_unchecked(&self, idx: usize) -> BytesReader<'r> { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { BytesReader::new_unchecked(&self.as_slice()[start..]) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; BytesReader::new_unchecked(&self.as_slice()[start..end]) } } @@ -2583,10 +2581,10 @@ impl<'r> molecule::prelude::Reader<'r> for BytesVecReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..item_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(item_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -3472,9 +3470,6 @@ impl UncleBlockVec { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -3489,12 +3484,14 @@ impl UncleBlockVec { } } pub fn get_unchecked(&self, idx: usize) -> UncleBlock { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { UncleBlock::new_unchecked(self.0.slice(start..)) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; UncleBlock::new_unchecked(self.0.slice(start..end)) } } @@ -3567,9 +3564,6 @@ impl<'r> UncleBlockVecReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -3584,12 +3578,14 @@ impl<'r> UncleBlockVecReader<'r> { } } pub fn get_unchecked(&self, idx: usize) -> UncleBlockReader<'r> { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { UncleBlockReader::new_unchecked(&self.as_slice()[start..]) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; UncleBlockReader::new_unchecked(&self.as_slice()[start..end]) } } @@ -3636,10 +3632,10 @@ impl<'r> molecule::prelude::Reader<'r> for UncleBlockVecReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..item_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(item_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -3811,9 +3807,6 @@ impl TransactionVec { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -3828,12 +3821,14 @@ impl TransactionVec { } } pub fn get_unchecked(&self, idx: usize) -> Transaction { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { Transaction::new_unchecked(self.0.slice(start..)) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; Transaction::new_unchecked(self.0.slice(start..end)) } } @@ -3906,9 +3901,6 @@ impl<'r> TransactionVecReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -3923,12 +3915,14 @@ impl<'r> TransactionVecReader<'r> { } } pub fn get_unchecked(&self, idx: usize) -> TransactionReader<'r> { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { TransactionReader::new_unchecked(&self.as_slice()[start..]) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; TransactionReader::new_unchecked(&self.as_slice()[start..end]) } } @@ -3975,10 +3969,10 @@ impl<'r> molecule::prelude::Reader<'r> for TransactionVecReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..item_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(item_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -4951,9 +4945,6 @@ impl CellOutputVec { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -4968,12 +4959,14 @@ impl CellOutputVec { } } pub fn get_unchecked(&self, idx: usize) -> CellOutput { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { CellOutput::new_unchecked(self.0.slice(start..)) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; CellOutput::new_unchecked(self.0.slice(start..end)) } } @@ -5046,9 +5039,6 @@ impl<'r> CellOutputVecReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -5063,12 +5053,14 @@ impl<'r> CellOutputVecReader<'r> { } } pub fn get_unchecked(&self, idx: usize) -> CellOutputReader<'r> { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { CellOutputReader::new_unchecked(&self.as_slice()[start..]) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; CellOutputReader::new_unchecked(&self.as_slice()[start..end]) } } @@ -5115,10 +5107,10 @@ impl<'r> molecule::prelude::Reader<'r> for CellOutputVecReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..item_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(item_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -5294,9 +5286,6 @@ impl Script { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -5304,22 +5293,22 @@ impl Script { Self::FIELD_COUNT != self.field_count() } pub fn code_hash(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } pub fn hash_type(&self) -> Byte { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Byte::new_unchecked(self.0.slice(start..end)) } pub fn args(&self) -> Bytes { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Bytes::new_unchecked(self.0.slice(start..end)) } else { Bytes::new_unchecked(self.0.slice(start..)) @@ -5398,9 +5387,6 @@ impl<'r> ScriptReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -5408,22 +5394,22 @@ impl<'r> ScriptReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn code_hash(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn hash_type(&self) -> ByteReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; ByteReader::new_unchecked(&self.as_slice()[start..end]) } pub fn args(&self) -> BytesReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; BytesReader::new_unchecked(&self.as_slice()[start..end]) } else { BytesReader::new_unchecked(&self.as_slice()[start..]) @@ -5472,10 +5458,10 @@ impl<'r> molecule::prelude::Reader<'r> for ScriptReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -5925,9 +5911,6 @@ impl CellOutput { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -5935,22 +5918,22 @@ impl CellOutput { Self::FIELD_COUNT != self.field_count() } pub fn capacity(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn lock(&self) -> Script { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Script::new_unchecked(self.0.slice(start..end)) } pub fn type_(&self) -> ScriptOpt { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; ScriptOpt::new_unchecked(self.0.slice(start..end)) } else { ScriptOpt::new_unchecked(self.0.slice(start..)) @@ -6029,9 +6012,6 @@ impl<'r> CellOutputReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -6039,22 +6019,22 @@ impl<'r> CellOutputReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn capacity(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn lock(&self) -> ScriptReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; ScriptReader::new_unchecked(&self.as_slice()[start..end]) } pub fn type_(&self) -> ScriptOptReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; ScriptOptReader::new_unchecked(&self.as_slice()[start..end]) } else { ScriptOptReader::new_unchecked(&self.as_slice()[start..]) @@ -6103,10 +6083,10 @@ impl<'r> molecule::prelude::Reader<'r> for CellOutputReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -6392,9 +6372,6 @@ impl RawTransaction { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -6402,40 +6379,40 @@ impl RawTransaction { Self::FIELD_COUNT != self.field_count() } pub fn version(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } pub fn cell_deps(&self) -> CellDepVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; CellDepVec::new_unchecked(self.0.slice(start..end)) } pub fn header_deps(&self) -> Byte32Vec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Byte32Vec::new_unchecked(self.0.slice(start..end)) } pub fn inputs(&self) -> CellInputVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; CellInputVec::new_unchecked(self.0.slice(start..end)) } pub fn outputs(&self) -> CellOutputVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[4][..]) as usize; - let end = molecule::unpack_number(&offsets[5][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[20..]) as usize; + let end = molecule::unpack_number(&slice[24..]) as usize; CellOutputVec::new_unchecked(self.0.slice(start..end)) } pub fn outputs_data(&self) -> BytesVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[5][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[24..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[6][..]) as usize; + let end = molecule::unpack_number(&slice[28..]) as usize; BytesVec::new_unchecked(self.0.slice(start..end)) } else { BytesVec::new_unchecked(self.0.slice(start..)) @@ -6520,9 +6497,6 @@ impl<'r> RawTransactionReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -6530,40 +6504,40 @@ impl<'r> RawTransactionReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn version(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn cell_deps(&self) -> CellDepVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; CellDepVecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn header_deps(&self) -> Byte32VecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Byte32VecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn inputs(&self) -> CellInputVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; CellInputVecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn outputs(&self) -> CellOutputVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[4][..]) as usize; - let end = molecule::unpack_number(&offsets[5][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[20..]) as usize; + let end = molecule::unpack_number(&slice[24..]) as usize; CellOutputVecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn outputs_data(&self) -> BytesVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[5][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[24..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[6][..]) as usize; + let end = molecule::unpack_number(&slice[28..]) as usize; BytesVecReader::new_unchecked(&self.as_slice()[start..end]) } else { BytesVecReader::new_unchecked(&self.as_slice()[start..]) @@ -6612,10 +6586,10 @@ impl<'r> molecule::prelude::Reader<'r> for RawTransactionReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -6762,9 +6736,6 @@ impl Transaction { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -6772,16 +6743,16 @@ impl Transaction { Self::FIELD_COUNT != self.field_count() } pub fn raw(&self) -> RawTransaction { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; RawTransaction::new_unchecked(self.0.slice(start..end)) } pub fn witnesses(&self) -> BytesVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; BytesVec::new_unchecked(self.0.slice(start..end)) } else { BytesVec::new_unchecked(self.0.slice(start..)) @@ -6858,9 +6829,6 @@ impl<'r> TransactionReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -6868,16 +6836,16 @@ impl<'r> TransactionReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn raw(&self) -> RawTransactionReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; RawTransactionReader::new_unchecked(&self.as_slice()[start..end]) } pub fn witnesses(&self) -> BytesVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; BytesVecReader::new_unchecked(&self.as_slice()[start..end]) } else { BytesVecReader::new_unchecked(&self.as_slice()[start..]) @@ -6926,10 +6894,10 @@ impl<'r> molecule::prelude::Reader<'r> for TransactionReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -7502,9 +7470,6 @@ impl UncleBlock { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -7512,16 +7477,16 @@ impl UncleBlock { Self::FIELD_COUNT != self.field_count() } pub fn header(&self) -> Header { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Header::new_unchecked(self.0.slice(start..end)) } pub fn proposals(&self) -> ProposalShortIdVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; ProposalShortIdVec::new_unchecked(self.0.slice(start..end)) } else { ProposalShortIdVec::new_unchecked(self.0.slice(start..)) @@ -7598,9 +7563,6 @@ impl<'r> UncleBlockReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -7608,16 +7570,16 @@ impl<'r> UncleBlockReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn header(&self) -> HeaderReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; HeaderReader::new_unchecked(&self.as_slice()[start..end]) } pub fn proposals(&self) -> ProposalShortIdVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; ProposalShortIdVecReader::new_unchecked(&self.as_slice()[start..end]) } else { ProposalShortIdVecReader::new_unchecked(&self.as_slice()[start..]) @@ -7666,10 +7628,10 @@ impl<'r> molecule::prelude::Reader<'r> for UncleBlockReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -7784,9 +7746,6 @@ impl Block { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -7794,28 +7753,28 @@ impl Block { Self::FIELD_COUNT != self.field_count() } pub fn header(&self) -> Header { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Header::new_unchecked(self.0.slice(start..end)) } pub fn uncles(&self) -> UncleBlockVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; UncleBlockVec::new_unchecked(self.0.slice(start..end)) } pub fn transactions(&self) -> TransactionVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; TransactionVec::new_unchecked(self.0.slice(start..end)) } pub fn proposals(&self) -> ProposalShortIdVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; ProposalShortIdVec::new_unchecked(self.0.slice(start..end)) } else { ProposalShortIdVec::new_unchecked(self.0.slice(start..)) @@ -7896,9 +7855,6 @@ impl<'r> BlockReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -7906,28 +7862,28 @@ impl<'r> BlockReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn header(&self) -> HeaderReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; HeaderReader::new_unchecked(&self.as_slice()[start..end]) } pub fn uncles(&self) -> UncleBlockVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; UncleBlockVecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn transactions(&self) -> TransactionVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; TransactionVecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn proposals(&self) -> ProposalShortIdVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; ProposalShortIdVecReader::new_unchecked(&self.as_slice()[start..end]) } else { ProposalShortIdVecReader::new_unchecked(&self.as_slice()[start..]) @@ -7976,10 +7932,10 @@ impl<'r> molecule::prelude::Reader<'r> for BlockReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -8106,9 +8062,6 @@ impl CellbaseWitness { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -8116,16 +8069,16 @@ impl CellbaseWitness { Self::FIELD_COUNT != self.field_count() } pub fn lock(&self) -> Script { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Script::new_unchecked(self.0.slice(start..end)) } pub fn message(&self) -> Bytes { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Bytes::new_unchecked(self.0.slice(start..end)) } else { Bytes::new_unchecked(self.0.slice(start..)) @@ -8202,9 +8155,6 @@ impl<'r> CellbaseWitnessReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -8212,16 +8162,16 @@ impl<'r> CellbaseWitnessReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn lock(&self) -> ScriptReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; ScriptReader::new_unchecked(&self.as_slice()[start..end]) } pub fn message(&self) -> BytesReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; BytesReader::new_unchecked(&self.as_slice()[start..end]) } else { BytesReader::new_unchecked(&self.as_slice()[start..]) @@ -8270,10 +8220,10 @@ impl<'r> molecule::prelude::Reader<'r> for CellbaseWitnessReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -8377,9 +8327,6 @@ impl WitnessArgs { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -8387,22 +8334,22 @@ impl WitnessArgs { Self::FIELD_COUNT != self.field_count() } pub fn lock(&self) -> BytesOpt { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; BytesOpt::new_unchecked(self.0.slice(start..end)) } pub fn input_type(&self) -> BytesOpt { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; BytesOpt::new_unchecked(self.0.slice(start..end)) } pub fn output_type(&self) -> BytesOpt { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; BytesOpt::new_unchecked(self.0.slice(start..end)) } else { BytesOpt::new_unchecked(self.0.slice(start..)) @@ -8481,9 +8428,6 @@ impl<'r> WitnessArgsReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -8491,22 +8435,22 @@ impl<'r> WitnessArgsReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn lock(&self) -> BytesOptReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; BytesOptReader::new_unchecked(&self.as_slice()[start..end]) } pub fn input_type(&self) -> BytesOptReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; BytesOptReader::new_unchecked(&self.as_slice()[start..end]) } pub fn output_type(&self) -> BytesOptReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; BytesOptReader::new_unchecked(&self.as_slice()[start..end]) } else { BytesOptReader::new_unchecked(&self.as_slice()[start..]) @@ -8555,10 +8499,10 @@ impl<'r> molecule::prelude::Reader<'r> for WitnessArgsReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { diff --git a/util/types/src/generated/extensions.rs b/util/types/src/generated/extensions.rs index 424a18e6d1..ecdd09b41e 100644 --- a/util/types/src/generated/extensions.rs +++ b/util/types/src/generated/extensions.rs @@ -1,4 +1,4 @@ -// Generated by Molecule 0.5.0 +// Generated by Molecule 0.6.0 use super::blockchain::*; use molecule::prelude::*; @@ -2236,9 +2236,6 @@ impl HeaderView { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -2246,16 +2243,16 @@ impl HeaderView { Self::FIELD_COUNT != self.field_count() } pub fn hash(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } pub fn data(&self) -> Header { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Header::new_unchecked(self.0.slice(start..end)) } else { Header::new_unchecked(self.0.slice(start..)) @@ -2330,9 +2327,6 @@ impl<'r> HeaderViewReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -2340,16 +2334,16 @@ impl<'r> HeaderViewReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn hash(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn data(&self) -> HeaderReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; HeaderReader::new_unchecked(&self.as_slice()[start..end]) } else { HeaderReader::new_unchecked(&self.as_slice()[start..]) @@ -2398,10 +2392,10 @@ impl<'r> molecule::prelude::Reader<'r> for HeaderViewReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -2506,9 +2500,6 @@ impl UncleBlockVecView { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -2516,16 +2507,16 @@ impl UncleBlockVecView { Self::FIELD_COUNT != self.field_count() } pub fn hashes(&self) -> Byte32Vec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Vec::new_unchecked(self.0.slice(start..end)) } pub fn data(&self) -> UncleBlockVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; UncleBlockVec::new_unchecked(self.0.slice(start..end)) } else { UncleBlockVec::new_unchecked(self.0.slice(start..)) @@ -2600,9 +2591,6 @@ impl<'r> UncleBlockVecViewReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -2610,16 +2598,16 @@ impl<'r> UncleBlockVecViewReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn hashes(&self) -> Byte32VecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32VecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn data(&self) -> UncleBlockVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; UncleBlockVecReader::new_unchecked(&self.as_slice()[start..end]) } else { UncleBlockVecReader::new_unchecked(&self.as_slice()[start..]) @@ -2668,10 +2656,10 @@ impl<'r> molecule::prelude::Reader<'r> for UncleBlockVecViewReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -2782,9 +2770,6 @@ impl TransactionView { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -2792,22 +2777,22 @@ impl TransactionView { Self::FIELD_COUNT != self.field_count() } pub fn hash(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } pub fn witness_hash(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } pub fn data(&self) -> Transaction { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Transaction::new_unchecked(self.0.slice(start..end)) } else { Transaction::new_unchecked(self.0.slice(start..)) @@ -2886,9 +2871,6 @@ impl<'r> TransactionViewReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -2896,22 +2878,22 @@ impl<'r> TransactionViewReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn hash(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn witness_hash(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn data(&self) -> TransactionReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; TransactionReader::new_unchecked(&self.as_slice()[start..end]) } else { TransactionReader::new_unchecked(&self.as_slice()[start..]) @@ -2960,10 +2942,10 @@ impl<'r> molecule::prelude::Reader<'r> for TransactionViewReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -3088,9 +3070,6 @@ impl BlockExt { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -3098,34 +3077,34 @@ impl BlockExt { Self::FIELD_COUNT != self.field_count() } pub fn total_difficulty(&self) -> Uint256 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint256::new_unchecked(self.0.slice(start..end)) } pub fn total_uncles_count(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn received_at(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn txs_fees(&self) -> Uint64Vec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; Uint64Vec::new_unchecked(self.0.slice(start..end)) } pub fn verified(&self) -> BoolOpt { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[20..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[5][..]) as usize; + let end = molecule::unpack_number(&slice[24..]) as usize; BoolOpt::new_unchecked(self.0.slice(start..end)) } else { BoolOpt::new_unchecked(self.0.slice(start..)) @@ -3213,9 +3192,6 @@ impl<'r> BlockExtReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -3223,34 +3199,34 @@ impl<'r> BlockExtReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn total_difficulty(&self) -> Uint256Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint256Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn total_uncles_count(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn received_at(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn txs_fees(&self) -> Uint64VecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; Uint64VecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn verified(&self) -> BoolOptReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[20..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[5][..]) as usize; + let end = molecule::unpack_number(&slice[24..]) as usize; BoolOptReader::new_unchecked(&self.as_slice()[start..end]) } else { BoolOptReader::new_unchecked(&self.as_slice()[start..]) @@ -3299,10 +3275,10 @@ impl<'r> molecule::prelude::Reader<'r> for BlockExtReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -3458,9 +3434,6 @@ impl EpochExt { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -3468,52 +3441,52 @@ impl EpochExt { Self::FIELD_COUNT != self.field_count() } pub fn previous_epoch_hash_rate(&self) -> Uint256 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint256::new_unchecked(self.0.slice(start..end)) } pub fn last_block_hash_in_previous_epoch(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } pub fn compact_target(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } pub fn number(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn base_block_reward(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[4][..]) as usize; - let end = molecule::unpack_number(&offsets[5][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[20..]) as usize; + let end = molecule::unpack_number(&slice[24..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn remainder_reward(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[5][..]) as usize; - let end = molecule::unpack_number(&offsets[6][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[24..]) as usize; + let end = molecule::unpack_number(&slice[28..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn start_number(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[6][..]) as usize; - let end = molecule::unpack_number(&offsets[7][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[28..]) as usize; + let end = molecule::unpack_number(&slice[32..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn length(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[7][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[32..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[8][..]) as usize; + let end = molecule::unpack_number(&slice[36..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } else { Uint64::new_unchecked(self.0.slice(start..)) @@ -3612,9 +3585,6 @@ impl<'r> EpochExtReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -3622,52 +3592,52 @@ impl<'r> EpochExtReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn previous_epoch_hash_rate(&self) -> Uint256Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint256Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn last_block_hash_in_previous_epoch(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn compact_target(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn number(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn base_block_reward(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[4][..]) as usize; - let end = molecule::unpack_number(&offsets[5][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[20..]) as usize; + let end = molecule::unpack_number(&slice[24..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn remainder_reward(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[5][..]) as usize; - let end = molecule::unpack_number(&offsets[6][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[24..]) as usize; + let end = molecule::unpack_number(&slice[28..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn start_number(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[6][..]) as usize; - let end = molecule::unpack_number(&offsets[7][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[28..]) as usize; + let end = molecule::unpack_number(&slice[32..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn length(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[7][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[32..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[8][..]) as usize; + let end = molecule::unpack_number(&slice[36..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } else { Uint64Reader::new_unchecked(&self.as_slice()[start..]) @@ -3716,10 +3686,10 @@ impl<'r> molecule::prelude::Reader<'r> for EpochExtReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -4053,9 +4023,6 @@ impl TransactionInfo { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -4063,22 +4030,22 @@ impl TransactionInfo { Self::FIELD_COUNT != self.field_count() } pub fn block_number(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn block_epoch(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn key(&self) -> TransactionKey { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; TransactionKey::new_unchecked(self.0.slice(start..end)) } else { TransactionKey::new_unchecked(self.0.slice(start..)) @@ -4157,9 +4124,6 @@ impl<'r> TransactionInfoReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -4167,22 +4131,22 @@ impl<'r> TransactionInfoReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn block_number(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn block_epoch(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn key(&self) -> TransactionKeyReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; TransactionKeyReader::new_unchecked(&self.as_slice()[start..end]) } else { TransactionKeyReader::new_unchecked(&self.as_slice()[start..]) @@ -4231,10 +4195,10 @@ impl<'r> molecule::prelude::Reader<'r> for TransactionInfoReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -4355,9 +4319,6 @@ impl TransactionMeta { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -4365,40 +4326,40 @@ impl TransactionMeta { Self::FIELD_COUNT != self.field_count() } pub fn block_hash(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } pub fn block_number(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn epoch_number(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn len(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } pub fn bits(&self) -> Bytes { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[4][..]) as usize; - let end = molecule::unpack_number(&offsets[5][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[20..]) as usize; + let end = molecule::unpack_number(&slice[24..]) as usize; Bytes::new_unchecked(self.0.slice(start..end)) } pub fn cellbase(&self) -> Bool { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[5][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[24..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[6][..]) as usize; + let end = molecule::unpack_number(&slice[28..]) as usize; Bool::new_unchecked(self.0.slice(start..end)) } else { Bool::new_unchecked(self.0.slice(start..)) @@ -4483,9 +4444,6 @@ impl<'r> TransactionMetaReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -4493,40 +4451,40 @@ impl<'r> TransactionMetaReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn block_hash(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn block_number(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn epoch_number(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn len(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn bits(&self) -> BytesReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[4][..]) as usize; - let end = molecule::unpack_number(&offsets[5][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[20..]) as usize; + let end = molecule::unpack_number(&slice[24..]) as usize; BytesReader::new_unchecked(&self.as_slice()[start..end]) } pub fn cellbase(&self) -> BoolReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[5][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[24..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[6][..]) as usize; + let end = molecule::unpack_number(&slice[28..]) as usize; BoolReader::new_unchecked(&self.as_slice()[start..end]) } else { BoolReader::new_unchecked(&self.as_slice()[start..]) @@ -4575,10 +4533,10 @@ impl<'r> molecule::prelude::Reader<'r> for TransactionMetaReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -4726,9 +4684,6 @@ impl TransactionPoint { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -4736,22 +4691,22 @@ impl TransactionPoint { Self::FIELD_COUNT != self.field_count() } pub fn tx_hash(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } pub fn block_number(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn index(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } else { Uint32::new_unchecked(self.0.slice(start..)) @@ -4830,9 +4785,6 @@ impl<'r> TransactionPointReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -4840,22 +4792,22 @@ impl<'r> TransactionPointReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn tx_hash(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn block_number(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn index(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } else { Uint32Reader::new_unchecked(&self.as_slice()[start..]) @@ -4904,10 +4856,10 @@ impl<'r> molecule::prelude::Reader<'r> for TransactionPointReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -5187,9 +5139,6 @@ impl LockHashCellOutput { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -5197,22 +5146,22 @@ impl LockHashCellOutput { Self::FIELD_COUNT != self.field_count() } pub fn lock_hash(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } pub fn block_number(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn cell_output(&self) -> CellOutputOpt { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; CellOutputOpt::new_unchecked(self.0.slice(start..end)) } else { CellOutputOpt::new_unchecked(self.0.slice(start..)) @@ -5291,9 +5240,6 @@ impl<'r> LockHashCellOutputReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -5301,22 +5247,22 @@ impl<'r> LockHashCellOutputReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn lock_hash(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn block_number(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn cell_output(&self) -> CellOutputOptReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; CellOutputOptReader::new_unchecked(&self.as_slice()[start..end]) } else { CellOutputOptReader::new_unchecked(&self.as_slice()[start..]) @@ -5365,10 +5311,10 @@ impl<'r> molecule::prelude::Reader<'r> for LockHashCellOutputReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -5681,9 +5627,6 @@ impl LockHashIndexState { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -5691,16 +5634,16 @@ impl LockHashIndexState { Self::FIELD_COUNT != self.field_count() } pub fn block_number(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn block_hash(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } else { Byte32::new_unchecked(self.0.slice(start..)) @@ -5777,9 +5720,6 @@ impl<'r> LockHashIndexStateReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -5787,16 +5727,16 @@ impl<'r> LockHashIndexStateReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn block_number(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn block_hash(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } else { Byte32Reader::new_unchecked(&self.as_slice()[start..]) @@ -5845,10 +5785,10 @@ impl<'r> molecule::prelude::Reader<'r> for LockHashIndexStateReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -5957,9 +5897,6 @@ impl LiveCellOutput { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -5967,22 +5904,22 @@ impl LiveCellOutput { Self::FIELD_COUNT != self.field_count() } pub fn cell_output(&self) -> CellOutput { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; CellOutput::new_unchecked(self.0.slice(start..end)) } pub fn output_data_len(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn cellbase(&self) -> Bool { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Bool::new_unchecked(self.0.slice(start..end)) } else { Bool::new_unchecked(self.0.slice(start..)) @@ -6061,9 +5998,6 @@ impl<'r> LiveCellOutputReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -6071,22 +6005,22 @@ impl<'r> LiveCellOutputReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn cell_output(&self) -> CellOutputReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; CellOutputReader::new_unchecked(&self.as_slice()[start..end]) } pub fn output_data_len(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn cellbase(&self) -> BoolReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; BoolReader::new_unchecked(&self.as_slice()[start..end]) } else { BoolReader::new_unchecked(&self.as_slice()[start..]) @@ -6135,10 +6069,10 @@ impl<'r> molecule::prelude::Reader<'r> for LiveCellOutputReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -6783,9 +6717,6 @@ impl CompactBlock { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -6793,34 +6724,34 @@ impl CompactBlock { Self::FIELD_COUNT != self.field_count() } pub fn header(&self) -> Header { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Header::new_unchecked(self.0.slice(start..end)) } pub fn short_ids(&self) -> ProposalShortIdVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; ProposalShortIdVec::new_unchecked(self.0.slice(start..end)) } pub fn prefilled_transactions(&self) -> IndexTransactionVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; IndexTransactionVec::new_unchecked(self.0.slice(start..end)) } pub fn uncles(&self) -> Byte32Vec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; Byte32Vec::new_unchecked(self.0.slice(start..end)) } pub fn proposals(&self) -> ProposalShortIdVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[20..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[5][..]) as usize; + let end = molecule::unpack_number(&slice[24..]) as usize; ProposalShortIdVec::new_unchecked(self.0.slice(start..end)) } else { ProposalShortIdVec::new_unchecked(self.0.slice(start..)) @@ -6908,9 +6839,6 @@ impl<'r> CompactBlockReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -6918,34 +6846,34 @@ impl<'r> CompactBlockReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn header(&self) -> HeaderReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; HeaderReader::new_unchecked(&self.as_slice()[start..end]) } pub fn short_ids(&self) -> ProposalShortIdVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; ProposalShortIdVecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn prefilled_transactions(&self) -> IndexTransactionVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; IndexTransactionVecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn uncles(&self) -> Byte32VecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; Byte32VecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn proposals(&self) -> ProposalShortIdVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[20..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[5][..]) as usize; + let end = molecule::unpack_number(&slice[24..]) as usize; ProposalShortIdVecReader::new_unchecked(&self.as_slice()[start..end]) } else { ProposalShortIdVecReader::new_unchecked(&self.as_slice()[start..]) @@ -6994,10 +6922,10 @@ impl<'r> molecule::prelude::Reader<'r> for CompactBlockReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -7135,9 +7063,6 @@ impl RelayTransaction { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -7145,16 +7070,16 @@ impl RelayTransaction { Self::FIELD_COUNT != self.field_count() } pub fn cycles(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn transaction(&self) -> Transaction { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Transaction::new_unchecked(self.0.slice(start..end)) } else { Transaction::new_unchecked(self.0.slice(start..)) @@ -7231,9 +7156,6 @@ impl<'r> RelayTransactionReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -7241,16 +7163,16 @@ impl<'r> RelayTransactionReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn cycles(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn transaction(&self) -> TransactionReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; TransactionReader::new_unchecked(&self.as_slice()[start..end]) } else { TransactionReader::new_unchecked(&self.as_slice()[start..]) @@ -7299,10 +7221,10 @@ impl<'r> molecule::prelude::Reader<'r> for RelayTransactionReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -7405,9 +7327,6 @@ impl RelayTransactionVec { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -7422,12 +7341,14 @@ impl RelayTransactionVec { } } pub fn get_unchecked(&self, idx: usize) -> RelayTransaction { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { RelayTransaction::new_unchecked(self.0.slice(start..)) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; RelayTransaction::new_unchecked(self.0.slice(start..end)) } } @@ -7500,9 +7421,6 @@ impl<'r> RelayTransactionVecReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -7517,12 +7435,14 @@ impl<'r> RelayTransactionVecReader<'r> { } } pub fn get_unchecked(&self, idx: usize) -> RelayTransactionReader<'r> { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { RelayTransactionReader::new_unchecked(&self.as_slice()[start..]) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; RelayTransactionReader::new_unchecked(&self.as_slice()[start..end]) } } @@ -7569,10 +7489,10 @@ impl<'r> molecule::prelude::Reader<'r> for RelayTransactionVecReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..item_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(item_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -7750,9 +7670,6 @@ impl RelayTransactions { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -7760,10 +7677,10 @@ impl RelayTransactions { Self::FIELD_COUNT != self.field_count() } pub fn transactions(&self) -> RelayTransactionVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; RelayTransactionVec::new_unchecked(self.0.slice(start..end)) } else { RelayTransactionVec::new_unchecked(self.0.slice(start..)) @@ -7837,9 +7754,6 @@ impl<'r> RelayTransactionsReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -7847,10 +7761,10 @@ impl<'r> RelayTransactionsReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn transactions(&self) -> RelayTransactionVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; RelayTransactionVecReader::new_unchecked(&self.as_slice()[start..end]) } else { RelayTransactionVecReader::new_unchecked(&self.as_slice()[start..]) @@ -7899,10 +7813,10 @@ impl<'r> molecule::prelude::Reader<'r> for RelayTransactionsReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -7993,9 +7907,6 @@ impl RelayTransactionHashes { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -8003,10 +7914,10 @@ impl RelayTransactionHashes { Self::FIELD_COUNT != self.field_count() } pub fn tx_hashes(&self) -> Byte32Vec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Vec::new_unchecked(self.0.slice(start..end)) } else { Byte32Vec::new_unchecked(self.0.slice(start..)) @@ -8080,9 +7991,6 @@ impl<'r> RelayTransactionHashesReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -8090,10 +7998,10 @@ impl<'r> RelayTransactionHashesReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn tx_hashes(&self) -> Byte32VecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32VecReader::new_unchecked(&self.as_slice()[start..end]) } else { Byte32VecReader::new_unchecked(&self.as_slice()[start..]) @@ -8142,10 +8050,10 @@ impl<'r> molecule::prelude::Reader<'r> for RelayTransactionHashesReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -8236,9 +8144,6 @@ impl GetRelayTransactions { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -8246,10 +8151,10 @@ impl GetRelayTransactions { Self::FIELD_COUNT != self.field_count() } pub fn tx_hashes(&self) -> Byte32Vec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Vec::new_unchecked(self.0.slice(start..end)) } else { Byte32Vec::new_unchecked(self.0.slice(start..)) @@ -8323,9 +8228,6 @@ impl<'r> GetRelayTransactionsReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -8333,10 +8235,10 @@ impl<'r> GetRelayTransactionsReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn tx_hashes(&self) -> Byte32VecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32VecReader::new_unchecked(&self.as_slice()[start..end]) } else { Byte32VecReader::new_unchecked(&self.as_slice()[start..]) @@ -8385,10 +8287,10 @@ impl<'r> molecule::prelude::Reader<'r> for GetRelayTransactionsReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -8484,9 +8386,6 @@ impl GetBlockTransactions { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -8494,22 +8393,22 @@ impl GetBlockTransactions { Self::FIELD_COUNT != self.field_count() } pub fn block_hash(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } pub fn indexes(&self) -> Uint32Vec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint32Vec::new_unchecked(self.0.slice(start..end)) } pub fn uncle_indexes(&self) -> Uint32Vec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Uint32Vec::new_unchecked(self.0.slice(start..end)) } else { Uint32Vec::new_unchecked(self.0.slice(start..)) @@ -8588,9 +8487,6 @@ impl<'r> GetBlockTransactionsReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -8598,22 +8494,22 @@ impl<'r> GetBlockTransactionsReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn block_hash(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn indexes(&self) -> Uint32VecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint32VecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn uncle_indexes(&self) -> Uint32VecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Uint32VecReader::new_unchecked(&self.as_slice()[start..end]) } else { Uint32VecReader::new_unchecked(&self.as_slice()[start..]) @@ -8662,10 +8558,10 @@ impl<'r> molecule::prelude::Reader<'r> for GetBlockTransactionsReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -8782,9 +8678,6 @@ impl BlockTransactions { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -8792,22 +8685,22 @@ impl BlockTransactions { Self::FIELD_COUNT != self.field_count() } pub fn block_hash(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } pub fn transactions(&self) -> TransactionVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; TransactionVec::new_unchecked(self.0.slice(start..end)) } pub fn uncles(&self) -> UncleBlockVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; UncleBlockVec::new_unchecked(self.0.slice(start..end)) } else { UncleBlockVec::new_unchecked(self.0.slice(start..)) @@ -8886,9 +8779,6 @@ impl<'r> BlockTransactionsReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -8896,22 +8786,22 @@ impl<'r> BlockTransactionsReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn block_hash(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn transactions(&self) -> TransactionVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; TransactionVecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn uncles(&self) -> UncleBlockVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; UncleBlockVecReader::new_unchecked(&self.as_slice()[start..end]) } else { UncleBlockVecReader::new_unchecked(&self.as_slice()[start..]) @@ -8960,10 +8850,10 @@ impl<'r> molecule::prelude::Reader<'r> for BlockTransactionsReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -9079,9 +8969,6 @@ impl GetBlockProposal { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -9089,16 +8976,16 @@ impl GetBlockProposal { Self::FIELD_COUNT != self.field_count() } pub fn block_hash(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } pub fn proposals(&self) -> ProposalShortIdVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; ProposalShortIdVec::new_unchecked(self.0.slice(start..end)) } else { ProposalShortIdVec::new_unchecked(self.0.slice(start..)) @@ -9175,9 +9062,6 @@ impl<'r> GetBlockProposalReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -9185,16 +9069,16 @@ impl<'r> GetBlockProposalReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn block_hash(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn proposals(&self) -> ProposalShortIdVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; ProposalShortIdVecReader::new_unchecked(&self.as_slice()[start..end]) } else { ProposalShortIdVecReader::new_unchecked(&self.as_slice()[start..]) @@ -9243,10 +9127,10 @@ impl<'r> molecule::prelude::Reader<'r> for GetBlockProposalReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -9348,9 +9232,6 @@ impl BlockProposal { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -9358,10 +9239,10 @@ impl BlockProposal { Self::FIELD_COUNT != self.field_count() } pub fn transactions(&self) -> TransactionVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; TransactionVec::new_unchecked(self.0.slice(start..end)) } else { TransactionVec::new_unchecked(self.0.slice(start..)) @@ -9435,9 +9316,6 @@ impl<'r> BlockProposalReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -9445,10 +9323,10 @@ impl<'r> BlockProposalReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn transactions(&self) -> TransactionVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; TransactionVecReader::new_unchecked(&self.as_slice()[start..end]) } else { TransactionVecReader::new_unchecked(&self.as_slice()[start..]) @@ -9497,10 +9375,10 @@ impl<'r> molecule::prelude::Reader<'r> for BlockProposalReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -9597,9 +9475,6 @@ impl IndexTransaction { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -9607,16 +9482,16 @@ impl IndexTransaction { Self::FIELD_COUNT != self.field_count() } pub fn index(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } pub fn transaction(&self) -> Transaction { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Transaction::new_unchecked(self.0.slice(start..end)) } else { Transaction::new_unchecked(self.0.slice(start..)) @@ -9693,9 +9568,6 @@ impl<'r> IndexTransactionReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -9703,16 +9575,16 @@ impl<'r> IndexTransactionReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn index(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn transaction(&self) -> TransactionReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; TransactionReader::new_unchecked(&self.as_slice()[start..end]) } else { TransactionReader::new_unchecked(&self.as_slice()[start..]) @@ -9761,10 +9633,10 @@ impl<'r> molecule::prelude::Reader<'r> for IndexTransactionReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -9867,9 +9739,6 @@ impl IndexTransactionVec { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -9884,12 +9753,14 @@ impl IndexTransactionVec { } } pub fn get_unchecked(&self, idx: usize) -> IndexTransaction { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { IndexTransaction::new_unchecked(self.0.slice(start..)) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; IndexTransaction::new_unchecked(self.0.slice(start..end)) } } @@ -9962,9 +9833,6 @@ impl<'r> IndexTransactionVecReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -9979,12 +9847,14 @@ impl<'r> IndexTransactionVecReader<'r> { } } pub fn get_unchecked(&self, idx: usize) -> IndexTransactionReader<'r> { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { IndexTransactionReader::new_unchecked(&self.as_slice()[start..]) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; IndexTransactionReader::new_unchecked(&self.as_slice()[start..end]) } } @@ -10031,10 +9901,10 @@ impl<'r> molecule::prelude::Reader<'r> for IndexTransactionVecReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..item_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(item_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -10735,9 +10605,6 @@ impl GetHeaders { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -10745,16 +10612,16 @@ impl GetHeaders { Self::FIELD_COUNT != self.field_count() } pub fn hash_stop(&self) -> Byte32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32::new_unchecked(self.0.slice(start..end)) } pub fn block_locator_hashes(&self) -> Byte32Vec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Byte32Vec::new_unchecked(self.0.slice(start..end)) } else { Byte32Vec::new_unchecked(self.0.slice(start..)) @@ -10836,9 +10703,6 @@ impl<'r> GetHeadersReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -10846,16 +10710,16 @@ impl<'r> GetHeadersReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn hash_stop(&self) -> Byte32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn block_locator_hashes(&self) -> Byte32VecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Byte32VecReader::new_unchecked(&self.as_slice()[start..end]) } else { Byte32VecReader::new_unchecked(&self.as_slice()[start..]) @@ -10904,10 +10768,10 @@ impl<'r> molecule::prelude::Reader<'r> for GetHeadersReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -11009,9 +10873,6 @@ impl GetBlocks { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -11019,10 +10880,10 @@ impl GetBlocks { Self::FIELD_COUNT != self.field_count() } pub fn block_hashes(&self) -> Byte32Vec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32Vec::new_unchecked(self.0.slice(start..end)) } else { Byte32Vec::new_unchecked(self.0.slice(start..)) @@ -11096,9 +10957,6 @@ impl<'r> GetBlocksReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -11106,10 +10964,10 @@ impl<'r> GetBlocksReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn block_hashes(&self) -> Byte32VecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Byte32VecReader::new_unchecked(&self.as_slice()[start..end]) } else { Byte32VecReader::new_unchecked(&self.as_slice()[start..]) @@ -11158,10 +11016,10 @@ impl<'r> molecule::prelude::Reader<'r> for GetBlocksReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -11252,9 +11110,6 @@ impl SendHeaders { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -11262,10 +11117,10 @@ impl SendHeaders { Self::FIELD_COUNT != self.field_count() } pub fn headers(&self) -> HeaderVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; HeaderVec::new_unchecked(self.0.slice(start..end)) } else { HeaderVec::new_unchecked(self.0.slice(start..)) @@ -11339,9 +11194,6 @@ impl<'r> SendHeadersReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -11349,10 +11201,10 @@ impl<'r> SendHeadersReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn headers(&self) -> HeaderVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; HeaderVecReader::new_unchecked(&self.as_slice()[start..end]) } else { HeaderVecReader::new_unchecked(&self.as_slice()[start..]) @@ -11401,10 +11253,10 @@ impl<'r> molecule::prelude::Reader<'r> for SendHeadersReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -11505,9 +11357,6 @@ impl SendBlock { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -11515,10 +11364,10 @@ impl SendBlock { Self::FIELD_COUNT != self.field_count() } pub fn block(&self) -> Block { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Block::new_unchecked(self.0.slice(start..end)) } else { Block::new_unchecked(self.0.slice(start..)) @@ -11592,9 +11441,6 @@ impl<'r> SendBlockReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -11602,10 +11448,10 @@ impl<'r> SendBlockReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn block(&self) -> BlockReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; BlockReader::new_unchecked(&self.as_slice()[start..end]) } else { BlockReader::new_unchecked(&self.as_slice()[start..]) @@ -11654,10 +11500,10 @@ impl<'r> molecule::prelude::Reader<'r> for SendBlockReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -11752,9 +11598,6 @@ impl SetFilter { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -11762,22 +11605,22 @@ impl SetFilter { Self::FIELD_COUNT != self.field_count() } pub fn hash_seed(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } pub fn filter(&self) -> Bytes { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Bytes::new_unchecked(self.0.slice(start..end)) } pub fn num_hashes(&self) -> Byte { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Byte::new_unchecked(self.0.slice(start..end)) } else { Byte::new_unchecked(self.0.slice(start..)) @@ -11856,9 +11699,6 @@ impl<'r> SetFilterReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -11866,22 +11706,22 @@ impl<'r> SetFilterReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn hash_seed(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn filter(&self) -> BytesReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; BytesReader::new_unchecked(&self.as_slice()[start..end]) } pub fn num_hashes(&self) -> ByteReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; ByteReader::new_unchecked(&self.as_slice()[start..end]) } else { ByteReader::new_unchecked(&self.as_slice()[start..]) @@ -11930,10 +11770,10 @@ impl<'r> molecule::prelude::Reader<'r> for SetFilterReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -12045,9 +11885,6 @@ impl AddFilter { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -12055,10 +11892,10 @@ impl AddFilter { Self::FIELD_COUNT != self.field_count() } pub fn filter(&self) -> Bytes { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Bytes::new_unchecked(self.0.slice(start..end)) } else { Bytes::new_unchecked(self.0.slice(start..)) @@ -12132,9 +11969,6 @@ impl<'r> AddFilterReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -12142,10 +11976,10 @@ impl<'r> AddFilterReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn filter(&self) -> BytesReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; BytesReader::new_unchecked(&self.as_slice()[start..end]) } else { BytesReader::new_unchecked(&self.as_slice()[start..]) @@ -12194,10 +12028,10 @@ impl<'r> molecule::prelude::Reader<'r> for AddFilterReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -12287,9 +12121,6 @@ impl ClearFilter { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -12363,9 +12194,6 @@ impl<'r> ClearFilterReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -12482,9 +12310,6 @@ impl FilteredBlock { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -12492,22 +12317,22 @@ impl FilteredBlock { Self::FIELD_COUNT != self.field_count() } pub fn header(&self) -> Header { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Header::new_unchecked(self.0.slice(start..end)) } pub fn transactions(&self) -> TransactionVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; TransactionVec::new_unchecked(self.0.slice(start..end)) } pub fn proof(&self) -> MerkleProof { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; MerkleProof::new_unchecked(self.0.slice(start..end)) } else { MerkleProof::new_unchecked(self.0.slice(start..)) @@ -12586,9 +12411,6 @@ impl<'r> FilteredBlockReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -12596,22 +12418,22 @@ impl<'r> FilteredBlockReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn header(&self) -> HeaderReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; HeaderReader::new_unchecked(&self.as_slice()[start..end]) } pub fn transactions(&self) -> TransactionVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; TransactionVecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn proof(&self) -> MerkleProofReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; MerkleProofReader::new_unchecked(&self.as_slice()[start..end]) } else { MerkleProofReader::new_unchecked(&self.as_slice()[start..]) @@ -12660,10 +12482,10 @@ impl<'r> molecule::prelude::Reader<'r> for FilteredBlockReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -12778,9 +12600,6 @@ impl MerkleProof { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -12788,16 +12607,16 @@ impl MerkleProof { Self::FIELD_COUNT != self.field_count() } pub fn indices(&self) -> Uint32Vec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32Vec::new_unchecked(self.0.slice(start..end)) } pub fn lemmas(&self) -> Byte32Vec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Byte32Vec::new_unchecked(self.0.slice(start..end)) } else { Byte32Vec::new_unchecked(self.0.slice(start..)) @@ -12874,9 +12693,6 @@ impl<'r> MerkleProofReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -12884,16 +12700,16 @@ impl<'r> MerkleProofReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn indices(&self) -> Uint32VecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32VecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn lemmas(&self) -> Byte32VecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Byte32VecReader::new_unchecked(&self.as_slice()[start..end]) } else { Byte32VecReader::new_unchecked(&self.as_slice()[start..]) @@ -12942,10 +12758,10 @@ impl<'r> molecule::prelude::Reader<'r> for MerkleProofReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -13046,9 +12862,6 @@ impl InIBD { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -13122,9 +12935,6 @@ impl<'r> InIBDReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -13229,9 +13039,6 @@ impl Time { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -13239,10 +13046,10 @@ impl Time { Self::FIELD_COUNT != self.field_count() } pub fn timestamp(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } else { Uint64::new_unchecked(self.0.slice(start..)) @@ -13316,9 +13123,6 @@ impl<'r> TimeReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -13326,10 +13130,10 @@ impl<'r> TimeReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn timestamp(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } else { Uint64Reader::new_unchecked(&self.as_slice()[start..]) @@ -13378,10 +13182,10 @@ impl<'r> molecule::prelude::Reader<'r> for TimeReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -13481,9 +13285,6 @@ impl RawAlert { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -13491,46 +13292,46 @@ impl RawAlert { Self::FIELD_COUNT != self.field_count() } pub fn notice_until(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn id(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } pub fn cancel(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } pub fn priority(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } pub fn message(&self) -> Bytes { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[4][..]) as usize; - let end = molecule::unpack_number(&offsets[5][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[20..]) as usize; + let end = molecule::unpack_number(&slice[24..]) as usize; Bytes::new_unchecked(self.0.slice(start..end)) } pub fn min_version(&self) -> BytesOpt { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[5][..]) as usize; - let end = molecule::unpack_number(&offsets[6][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[24..]) as usize; + let end = molecule::unpack_number(&slice[28..]) as usize; BytesOpt::new_unchecked(self.0.slice(start..end)) } pub fn max_version(&self) -> BytesOpt { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[6][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[28..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[7][..]) as usize; + let end = molecule::unpack_number(&slice[32..]) as usize; BytesOpt::new_unchecked(self.0.slice(start..end)) } else { BytesOpt::new_unchecked(self.0.slice(start..)) @@ -13617,9 +13418,6 @@ impl<'r> RawAlertReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -13627,46 +13425,46 @@ impl<'r> RawAlertReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn notice_until(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn id(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn cancel(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn priority(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[3][..]) as usize; - let end = molecule::unpack_number(&offsets[4][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[16..]) as usize; + let end = molecule::unpack_number(&slice[20..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn message(&self) -> BytesReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[4][..]) as usize; - let end = molecule::unpack_number(&offsets[5][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[20..]) as usize; + let end = molecule::unpack_number(&slice[24..]) as usize; BytesReader::new_unchecked(&self.as_slice()[start..end]) } pub fn min_version(&self) -> BytesOptReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[5][..]) as usize; - let end = molecule::unpack_number(&offsets[6][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[24..]) as usize; + let end = molecule::unpack_number(&slice[28..]) as usize; BytesOptReader::new_unchecked(&self.as_slice()[start..end]) } pub fn max_version(&self) -> BytesOptReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[6][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[28..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[7][..]) as usize; + let end = molecule::unpack_number(&slice[32..]) as usize; BytesOptReader::new_unchecked(&self.as_slice()[start..end]) } else { BytesOptReader::new_unchecked(&self.as_slice()[start..]) @@ -13715,10 +13513,10 @@ impl<'r> molecule::prelude::Reader<'r> for RawAlertReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -13875,9 +13673,6 @@ impl Alert { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -13885,16 +13680,16 @@ impl Alert { Self::FIELD_COUNT != self.field_count() } pub fn raw(&self) -> RawAlert { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; RawAlert::new_unchecked(self.0.slice(start..end)) } pub fn signatures(&self) -> BytesVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; BytesVec::new_unchecked(self.0.slice(start..end)) } else { BytesVec::new_unchecked(self.0.slice(start..)) @@ -13971,9 +13766,6 @@ impl<'r> AlertReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -13981,16 +13773,16 @@ impl<'r> AlertReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn raw(&self) -> RawAlertReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; RawAlertReader::new_unchecked(&self.as_slice()[start..end]) } pub fn signatures(&self) -> BytesVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; BytesVecReader::new_unchecked(&self.as_slice()[start..end]) } else { BytesVecReader::new_unchecked(&self.as_slice()[start..]) @@ -14039,10 +13831,10 @@ impl<'r> molecule::prelude::Reader<'r> for AlertReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -14149,9 +13941,6 @@ impl Identify { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -14159,22 +13948,22 @@ impl Identify { Self::FIELD_COUNT != self.field_count() } pub fn flag(&self) -> Uint64 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64::new_unchecked(self.0.slice(start..end)) } pub fn name(&self) -> Bytes { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Bytes::new_unchecked(self.0.slice(start..end)) } pub fn client_version(&self) -> Bytes { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Bytes::new_unchecked(self.0.slice(start..end)) } else { Bytes::new_unchecked(self.0.slice(start..)) @@ -14253,9 +14042,6 @@ impl<'r> IdentifyReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -14263,22 +14049,22 @@ impl<'r> IdentifyReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn flag(&self) -> Uint64Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint64Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn name(&self) -> BytesReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; BytesReader::new_unchecked(&self.as_slice()[start..end]) } pub fn client_version(&self) -> BytesReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; BytesReader::new_unchecked(&self.as_slice()[start..end]) } else { BytesReader::new_unchecked(&self.as_slice()[start..]) @@ -14327,10 +14113,10 @@ impl<'r> molecule::prelude::Reader<'r> for IdentifyReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { diff --git a/util/types/src/generated/protocols.rs b/util/types/src/generated/protocols.rs index e3da4c768b..e22fa123b4 100644 --- a/util/types/src/generated/protocols.rs +++ b/util/types/src/generated/protocols.rs @@ -1,4 +1,4 @@ -// Generated by Molecule 0.5.0 +// Generated by Molecule 0.6.0 use super::blockchain::*; use molecule::prelude::*; @@ -343,9 +343,6 @@ impl PingMessage { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -353,10 +350,10 @@ impl PingMessage { Self::FIELD_COUNT != self.field_count() } pub fn payload(&self) -> PingPayload { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; PingPayload::new_unchecked(self.0.slice(start..end)) } else { PingPayload::new_unchecked(self.0.slice(start..)) @@ -430,9 +427,6 @@ impl<'r> PingMessageReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -440,10 +434,10 @@ impl<'r> PingMessageReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn payload(&self) -> PingPayloadReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; PingPayloadReader::new_unchecked(&self.as_slice()[start..end]) } else { PingPayloadReader::new_unchecked(&self.as_slice()[start..]) @@ -492,10 +486,10 @@ impl<'r> molecule::prelude::Reader<'r> for PingMessageReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -586,9 +580,6 @@ impl Ping { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -596,10 +587,10 @@ impl Ping { Self::FIELD_COUNT != self.field_count() } pub fn nonce(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } else { Uint32::new_unchecked(self.0.slice(start..)) @@ -673,9 +664,6 @@ impl<'r> PingReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -683,10 +671,10 @@ impl<'r> PingReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn nonce(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } else { Uint32Reader::new_unchecked(&self.as_slice()[start..]) @@ -735,10 +723,10 @@ impl<'r> molecule::prelude::Reader<'r> for PingReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -829,9 +817,6 @@ impl Pong { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -839,10 +824,10 @@ impl Pong { Self::FIELD_COUNT != self.field_count() } pub fn nonce(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } else { Uint32::new_unchecked(self.0.slice(start..)) @@ -916,9 +901,6 @@ impl<'r> PongReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -926,10 +908,10 @@ impl<'r> PongReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn nonce(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } else { Uint32Reader::new_unchecked(&self.as_slice()[start..]) @@ -978,10 +960,10 @@ impl<'r> molecule::prelude::Reader<'r> for PongReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -1073,9 +1055,6 @@ impl NodeVec { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -1090,12 +1069,14 @@ impl NodeVec { } } pub fn get_unchecked(&self, idx: usize) -> Node { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { Node::new_unchecked(self.0.slice(start..)) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; Node::new_unchecked(self.0.slice(start..end)) } } @@ -1168,9 +1149,6 @@ impl<'r> NodeVecReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -1185,12 +1163,14 @@ impl<'r> NodeVecReader<'r> { } } pub fn get_unchecked(&self, idx: usize) -> NodeReader<'r> { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { NodeReader::new_unchecked(&self.as_slice()[start..]) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; NodeReader::new_unchecked(&self.as_slice()[start..end]) } } @@ -1237,10 +1217,10 @@ impl<'r> molecule::prelude::Reader<'r> for NodeVecReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..item_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(item_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -2212,9 +2192,6 @@ impl DiscoveryMessage { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -2222,10 +2199,10 @@ impl DiscoveryMessage { Self::FIELD_COUNT != self.field_count() } pub fn payload(&self) -> DiscoveryPayload { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; DiscoveryPayload::new_unchecked(self.0.slice(start..end)) } else { DiscoveryPayload::new_unchecked(self.0.slice(start..)) @@ -2299,9 +2276,6 @@ impl<'r> DiscoveryMessageReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -2309,10 +2283,10 @@ impl<'r> DiscoveryMessageReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn payload(&self) -> DiscoveryPayloadReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; DiscoveryPayloadReader::new_unchecked(&self.as_slice()[start..end]) } else { DiscoveryPayloadReader::new_unchecked(&self.as_slice()[start..]) @@ -2361,10 +2335,10 @@ impl<'r> molecule::prelude::Reader<'r> for DiscoveryMessageReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -2459,9 +2433,6 @@ impl GetNodes { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -2469,22 +2440,22 @@ impl GetNodes { Self::FIELD_COUNT != self.field_count() } pub fn version(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } pub fn count(&self) -> Uint32 { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint32::new_unchecked(self.0.slice(start..end)) } pub fn listen_port(&self) -> PortOpt { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; PortOpt::new_unchecked(self.0.slice(start..end)) } else { PortOpt::new_unchecked(self.0.slice(start..)) @@ -2563,9 +2534,6 @@ impl<'r> GetNodesReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -2573,22 +2541,22 @@ impl<'r> GetNodesReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn version(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn count(&self) -> Uint32Reader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Uint32Reader::new_unchecked(&self.as_slice()[start..end]) } pub fn listen_port(&self) -> PortOptReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; PortOptReader::new_unchecked(&self.as_slice()[start..end]) } else { PortOptReader::new_unchecked(&self.as_slice()[start..]) @@ -2637,10 +2605,10 @@ impl<'r> molecule::prelude::Reader<'r> for GetNodesReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -2753,9 +2721,6 @@ impl Nodes { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -2763,16 +2728,16 @@ impl Nodes { Self::FIELD_COUNT != self.field_count() } pub fn announce(&self) -> DiscoveryBool { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; DiscoveryBool::new_unchecked(self.0.slice(start..end)) } pub fn items(&self) -> NodeVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; NodeVec::new_unchecked(self.0.slice(start..end)) } else { NodeVec::new_unchecked(self.0.slice(start..)) @@ -2849,9 +2814,6 @@ impl<'r> NodesReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -2859,16 +2821,16 @@ impl<'r> NodesReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn announce(&self) -> DiscoveryBoolReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; DiscoveryBoolReader::new_unchecked(&self.as_slice()[start..end]) } pub fn items(&self) -> NodeVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; NodeVecReader::new_unchecked(&self.as_slice()[start..end]) } else { NodeVecReader::new_unchecked(&self.as_slice()[start..]) @@ -2917,10 +2879,10 @@ impl<'r> molecule::prelude::Reader<'r> for NodesReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -3022,9 +2984,6 @@ impl Node { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -3032,10 +2991,10 @@ impl Node { Self::FIELD_COUNT != self.field_count() } pub fn addresses(&self) -> BytesVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; BytesVec::new_unchecked(self.0.slice(start..end)) } else { BytesVec::new_unchecked(self.0.slice(start..)) @@ -3109,9 +3068,6 @@ impl<'r> NodeReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -3119,10 +3075,10 @@ impl<'r> NodeReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn addresses(&self) -> BytesVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; BytesVecReader::new_unchecked(&self.as_slice()[start..end]) } else { BytesVecReader::new_unchecked(&self.as_slice()[start..]) @@ -3171,10 +3127,10 @@ impl<'r> molecule::prelude::Reader<'r> for NodeReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -3266,9 +3222,6 @@ impl AddressVec { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -3283,12 +3236,14 @@ impl AddressVec { } } pub fn get_unchecked(&self, idx: usize) -> Address { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { Address::new_unchecked(self.0.slice(start..)) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; Address::new_unchecked(self.0.slice(start..end)) } } @@ -3361,9 +3316,6 @@ impl<'r> AddressVecReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn item_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn len(&self) -> usize { self.item_count() } @@ -3378,12 +3330,14 @@ impl<'r> AddressVecReader<'r> { } } pub fn get_unchecked(&self, idx: usize) -> AddressReader<'r> { - let offsets = self.item_offsets(); - let start = molecule::unpack_number(&offsets[idx][..]) as usize; + let slice = self.as_slice(); + let start_idx = molecule::NUMBER_SIZE * (1 + idx); + let start = molecule::unpack_number(&slice[start_idx..]) as usize; if idx == self.len() - 1 { AddressReader::new_unchecked(&self.as_slice()[start..]) } else { - let end = molecule::unpack_number(&offsets[idx + 1][..]) as usize; + let end_idx = start_idx + molecule::NUMBER_SIZE; + let end = molecule::unpack_number(&slice[end_idx..]) as usize; AddressReader::new_unchecked(&self.as_slice()[start..end]) } } @@ -3430,10 +3384,10 @@ impl<'r> molecule::prelude::Reader<'r> for AddressVecReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..item_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(item_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -3604,9 +3558,6 @@ impl Address { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -3614,10 +3565,10 @@ impl Address { Self::FIELD_COUNT != self.field_count() } pub fn bytes(&self) -> Bytes { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; Bytes::new_unchecked(self.0.slice(start..end)) } else { Bytes::new_unchecked(self.0.slice(start..)) @@ -3691,9 +3642,6 @@ impl<'r> AddressReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -3701,10 +3649,10 @@ impl<'r> AddressReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn bytes(&self) -> BytesReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; BytesReader::new_unchecked(&self.as_slice()[start..end]) } else { BytesReader::new_unchecked(&self.as_slice()[start..]) @@ -3753,10 +3701,10 @@ impl<'r> molecule::prelude::Reader<'r> for AddressReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { @@ -3852,9 +3800,6 @@ impl IdentifyMessage { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -3862,22 +3807,22 @@ impl IdentifyMessage { Self::FIELD_COUNT != self.field_count() } pub fn listen_addrs(&self) -> AddressVec { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; AddressVec::new_unchecked(self.0.slice(start..end)) } pub fn observed_addr(&self) -> Address { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; Address::new_unchecked(self.0.slice(start..end)) } pub fn identify(&self) -> Bytes { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; Bytes::new_unchecked(self.0.slice(start..end)) } else { Bytes::new_unchecked(self.0.slice(start..)) @@ -3956,9 +3901,6 @@ impl<'r> IdentifyMessageReader<'r> { (molecule::unpack_number(&self.as_slice()[molecule::NUMBER_SIZE..]) as usize / 4) - 1 } } - pub fn field_offsets(&self) -> &[[u8; 4]] { - molecule::unpack_number_vec(&self.as_slice()[molecule::NUMBER_SIZE..]) - } pub fn count_extra_fields(&self) -> usize { self.field_count() - Self::FIELD_COUNT } @@ -3966,22 +3908,22 @@ impl<'r> IdentifyMessageReader<'r> { Self::FIELD_COUNT != self.field_count() } pub fn listen_addrs(&self) -> AddressVecReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[0][..]) as usize; - let end = molecule::unpack_number(&offsets[1][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[4..]) as usize; + let end = molecule::unpack_number(&slice[8..]) as usize; AddressVecReader::new_unchecked(&self.as_slice()[start..end]) } pub fn observed_addr(&self) -> AddressReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[1][..]) as usize; - let end = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[8..]) as usize; + let end = molecule::unpack_number(&slice[12..]) as usize; AddressReader::new_unchecked(&self.as_slice()[start..end]) } pub fn identify(&self) -> BytesReader<'r> { - let offsets = self.field_offsets(); - let start = molecule::unpack_number(&offsets[2][..]) as usize; + let slice = self.as_slice(); + let start = molecule::unpack_number(&slice[12..]) as usize; if self.has_extra_fields() { - let end = molecule::unpack_number(&offsets[3][..]) as usize; + let end = molecule::unpack_number(&slice[16..]) as usize; BytesReader::new_unchecked(&self.as_slice()[start..end]) } else { BytesReader::new_unchecked(&self.as_slice()[start..]) @@ -4030,10 +3972,10 @@ impl<'r> molecule::prelude::Reader<'r> for IdentifyMessageReader<'r> { if slice_len < header_size { return ve!(Self, HeaderIsBroken, header_size, slice_len); } - let ptr = molecule::unpack_number_vec(&slice[molecule::NUMBER_SIZE..]); - let mut offsets: Vec = ptr[..field_count] - .iter() - .map(|x| molecule::unpack_number(&x[..]) as usize) + let mut offsets: Vec = slice[molecule::NUMBER_SIZE..] + .chunks(molecule::NUMBER_SIZE) + .take(field_count) + .map(|x| molecule::unpack_number(x) as usize) .collect(); offsets.push(total_size); if offsets.windows(2).any(|i| i[0] > i[1]) { From c47e935ca4612aa5af5e6b739e83e97b6354d983 Mon Sep 17 00:00:00 2001 From: Boyu Yang Date: Wed, 22 Apr 2020 04:33:48 +0800 Subject: [PATCH 2/2] refactor: remove '#[allow(clippy::cast_ptr_alignment)]' --- protocols/discovery/src/protocol.rs | 20 +++++++++++------ protocols/ping/src/lib.rs | 17 ++++++++++----- util/types/src/conversion/primitive.rs | 30 +++++++++++++------------- 3 files changed, 40 insertions(+), 27 deletions(-) diff --git a/protocols/discovery/src/protocol.rs b/protocols/discovery/src/protocol.rs index 1eb3788f7c..f2d83aa46e 100644 --- a/protocols/discovery/src/protocol.rs +++ b/protocols/discovery/src/protocol.rs @@ -138,18 +138,24 @@ impl DiscoveryMessage { .as_bytes() } - #[allow(clippy::cast_ptr_alignment)] pub fn decode(data: &[u8]) -> Option { let reader = packed::DiscoveryMessageReader::from_compatible_slice(data).ok()?; match reader.payload().to_enum() { packed::DiscoveryPayloadUnionReader::GetNodes(reader) => { - let le = reader.version().raw_data().as_ptr() as *const u32; - let version = u32::from_le(unsafe { *le }); - let le = reader.count().raw_data().as_ptr() as *const u32; - let count = u32::from_le(unsafe { *le }); + let version = { + let mut b = [0u8; 4]; + b.copy_from_slice(reader.version().raw_data()); + u32::from_le_bytes(b) + }; + let count = { + let mut b = [0u8; 4]; + b.copy_from_slice(reader.count().raw_data()); + u32::from_le_bytes(b) + }; let listen_port = reader.listen_port().to_opt().map(|port_reader| { - let le = port_reader.raw_data().as_ptr() as *const u16; - u16::from_le(unsafe { *le }) + let mut b = [0u8; 2]; + b.copy_from_slice(port_reader.raw_data()); + u16::from_le_bytes(b) }); Some(DiscoveryMessage::GetNodes { version, diff --git a/protocols/ping/src/lib.rs b/protocols/ping/src/lib.rs index 02c12b7a89..8d2bbd5814 100644 --- a/protocols/ping/src/lib.rs +++ b/protocols/ping/src/lib.rs @@ -285,17 +285,24 @@ impl PingMessage { .as_bytes() } - #[allow(clippy::cast_ptr_alignment)] fn decode(data: &[u8]) -> Option { let reader = packed::PingMessageReader::from_compatible_slice(data).ok()?; match reader.payload().to_enum() { packed::PingPayloadUnionReader::Ping(reader) => { - let le = reader.nonce().raw_data().as_ptr() as *const u32; - Some(PingPayload::Ping(u32::from_le(unsafe { *le }))) + let nonce = { + let mut b = [0u8; 4]; + b.copy_from_slice(reader.as_slice()); + u32::from_le_bytes(b) + }; + Some(PingPayload::Ping(nonce)) } packed::PingPayloadUnionReader::Pong(reader) => { - let le = reader.nonce().raw_data().as_ptr() as *const u32; - Some(PingPayload::Pong(u32::from_le(unsafe { *le }))) + let nonce = { + let mut b = [0u8; 4]; + b.copy_from_slice(reader.as_slice()); + u32::from_le_bytes(b) + }; + Some(PingPayload::Pong(nonce)) } } } diff --git a/util/types/src/conversion/primitive.rs b/util/types/src/conversion/primitive.rs index a2e934ff24..9e3b3900e7 100644 --- a/util/types/src/conversion/primitive.rs +++ b/util/types/src/conversion/primitive.rs @@ -43,28 +43,28 @@ impl Pack for usize { } impl<'r> Unpack for packed::Uint32Reader<'r> { - #[allow(clippy::cast_ptr_alignment)] fn unpack(&self) -> u32 { - let le = self.as_slice().as_ptr() as *const u32; - u32::from_le(unsafe { *le }) + let mut b = [0u8; 4]; + b.copy_from_slice(self.as_slice()); + u32::from_le_bytes(b) } } impl_conversion_for_entity_unpack!(u32, Uint32); impl<'r> Unpack for packed::Uint64Reader<'r> { - #[allow(clippy::cast_ptr_alignment)] fn unpack(&self) -> u64 { - let le = self.as_slice().as_ptr() as *const u64; - u64::from_le(unsafe { *le }) + let mut b = [0u8; 8]; + b.copy_from_slice(self.as_slice()); + u64::from_le_bytes(b) } } impl_conversion_for_entity_unpack!(u64, Uint64); impl<'r> Unpack for packed::Uint128Reader<'r> { - #[allow(clippy::cast_ptr_alignment)] fn unpack(&self) -> u128 { - let le = self.as_slice().as_ptr() as *const u128; - u128::from_le(unsafe { *le }) + let mut b = [0u8; 16]; + b.copy_from_slice(self.as_slice()); + u128::from_le_bytes(b) } } impl_conversion_for_entity_unpack!(u128, Uint128); @@ -96,19 +96,19 @@ impl Pack for usize { } impl<'r> Unpack for packed::BeUint32Reader<'r> { - #[allow(clippy::cast_ptr_alignment)] fn unpack(&self) -> u32 { - let be = self.as_slice().as_ptr() as *const u32; - u32::from_be(unsafe { *be }) + let mut b = [0u8; 4]; + b.copy_from_slice(self.as_slice()); + u32::from_be_bytes(b) } } impl_conversion_for_entity_unpack!(u32, BeUint32); impl<'r> Unpack for packed::BeUint64Reader<'r> { - #[allow(clippy::cast_ptr_alignment)] fn unpack(&self) -> u64 { - let be = self.as_slice().as_ptr() as *const u64; - u64::from_be(unsafe { *be }) + let mut b = [0u8; 8]; + b.copy_from_slice(self.as_slice()); + u64::from_be_bytes(b) } } impl_conversion_for_entity_unpack!(u64, BeUint64);