reth_trie_common/
input.rs1use crate::{prefix_set::TriePrefixSetsMut, updates::TrieUpdates, HashedPostState};
2
3#[derive(Default, Debug, Clone)]
5pub struct TrieInput {
6 pub nodes: TrieUpdates,
9 pub state: HashedPostState,
11 pub prefix_sets: TriePrefixSetsMut,
15}
16
17impl TrieInput {
18 pub const fn new(
20 nodes: TrieUpdates,
21 state: HashedPostState,
22 prefix_sets: TriePrefixSetsMut,
23 ) -> Self {
24 Self { nodes, state, prefix_sets }
25 }
26
27 pub fn from_state(state: HashedPostState) -> Self {
30 let prefix_sets = state.construct_prefix_sets();
31 Self { nodes: TrieUpdates::default(), state, prefix_sets }
32 }
33
34 pub fn from_blocks<'a>(
37 blocks: impl IntoIterator<Item = (&'a HashedPostState, &'a TrieUpdates)>,
38 ) -> Self {
39 let mut input = Self::default();
40 input.extend_with_blocks(blocks);
41 input
42 }
43
44 pub fn extend_with_blocks<'a>(
49 &mut self,
50 blocks: impl IntoIterator<Item = (&'a HashedPostState, &'a TrieUpdates)>,
51 ) {
52 for (hashed_state, trie_updates) in blocks {
53 self.append_cached_ref(trie_updates, hashed_state);
54 }
55 }
56
57 pub fn prepend_self(&mut self, mut other: Self) {
59 core::mem::swap(&mut self.nodes, &mut other.nodes);
60 self.nodes.extend(other.nodes);
61 core::mem::swap(&mut self.state, &mut other.state);
62 self.state.extend(other.state);
63 self.prefix_sets.extend(other.prefix_sets);
65 }
66
67 pub fn prepend(&mut self, mut state: HashedPostState) {
69 self.prefix_sets.extend(state.construct_prefix_sets());
70 core::mem::swap(&mut self.state, &mut state);
71 self.state.extend(state);
72 }
73
74 pub fn prepend_cached(&mut self, mut nodes: TrieUpdates, mut state: HashedPostState) {
77 core::mem::swap(&mut self.nodes, &mut nodes);
78 self.nodes.extend(nodes);
79 core::mem::swap(&mut self.state, &mut state);
80 self.state.extend(state);
81 }
82
83 pub fn append(&mut self, state: HashedPostState) {
85 self.prefix_sets.extend(state.construct_prefix_sets());
86 self.state.extend(state);
87 }
88
89 pub fn append_ref(&mut self, state: &HashedPostState) {
91 self.prefix_sets.extend(state.construct_prefix_sets());
92 self.state.extend_ref(state);
93 }
94
95 pub fn append_cached(&mut self, nodes: TrieUpdates, state: HashedPostState) {
98 self.nodes.extend(nodes);
99 self.state.extend(state);
100 }
101
102 pub fn append_cached_ref(&mut self, nodes: &TrieUpdates, state: &HashedPostState) {
105 self.nodes.extend_ref(nodes);
106 self.state.extend_ref(state);
107 }
108
109 pub fn clear(&mut self) {
111 self.nodes.clear();
112 self.state.clear();
113 self.prefix_sets.clear();
114 }
115
116 pub fn cleared(mut self) -> Self {
118 self.clear();
119 self
120 }
121}