@@ -90,12 +90,23 @@ pub fn calculate_root_from_leaves_repeated(c: &mut Criterion) {
90
90
} ,
91
91
|( init_storage, storage_updates, mut trie_updates) | {
92
92
let mut storage = init_storage;
93
- for update in storage_updates {
93
+ let mut storage_updates = storage_updates. into_iter ( ) . peekable ( ) ;
94
+ while let Some ( update) = storage_updates. next ( ) {
94
95
storage. extend ( & update) ;
95
96
96
97
let prefix_set = update. construct_prefix_set ( ) . freeze ( ) ;
97
- let storage_sorted = storage. clone ( ) . into_sorted ( ) ;
98
- let trie_updates_sorted = trie_updates. clone ( ) . into_sorted ( ) ;
98
+ let ( storage_sorted, trie_updates_sorted) =
99
+ if storage_updates. peek ( ) . is_some ( ) {
100
+ (
101
+ storage. clone ( ) . into_sorted ( ) ,
102
+ trie_updates. clone ( ) . into_sorted ( ) ,
103
+ )
104
+ } else {
105
+ (
106
+ std:: mem:: take ( & mut storage) . into_sorted ( ) ,
107
+ std:: mem:: take ( & mut trie_updates) . into_sorted ( ) ,
108
+ )
109
+ } ;
99
110
100
111
let walker = TrieWalker :: new (
101
112
InMemoryStorageTrieCursor :: new (
@@ -133,7 +144,9 @@ pub fn calculate_root_from_leaves_repeated(c: &mut Criterion) {
133
144
}
134
145
hb. root ( ) ;
135
146
136
- trie_updates. finalize ( node_iter. walker , hb) ;
147
+ if storage_updates. peek ( ) . is_some ( ) {
148
+ trie_updates. finalize ( node_iter. walker , hb) ;
149
+ }
137
150
}
138
151
} ,
139
152
)
0 commit comments