@@ -146,13 +146,12 @@ impl<K: Storable + Ord + Clone> Node<K> {
146
146
}
147
147
}
148
148
149
+ const LOAD_SIZE_THRESHOLD : u32 = 8 ;
149
150
// Load the keys.
150
151
let mut keys_encoded_values = Vec :: with_capacity ( num_entries) ;
152
+ let mut buf = vec ! [ ] ;
151
153
for _ in 0 ..num_entries {
152
- keys_encoded_values. push ( (
153
- LazyKey :: by_ref ( Bytes :: from ( offset. get ( ) ) ) ,
154
- LazyValue :: by_ref ( Bytes :: from ( 0usize ) ) ,
155
- ) ) ;
154
+ let key_offset = Bytes :: from ( offset. get ( ) ) ;
156
155
157
156
// Advance offset by the key_size type size if applicable.
158
157
let key_size = if K :: BOUND . is_fixed_size ( ) {
@@ -165,17 +164,31 @@ impl<K: Storable + Ord + Clone> Node<K> {
165
164
offset += U32_SIZE ;
166
165
key_size
167
166
} ;
167
+ let key = if key_size <= LOAD_SIZE_THRESHOLD {
168
+ read_to_vec ( & reader, offset, & mut buf, key_size as usize ) ;
169
+ LazyKey :: by_value ( K :: from_bytes ( Cow :: Borrowed ( & buf) ) )
170
+ } else {
171
+ LazyKey :: by_ref ( key_offset)
172
+ } ;
168
173
169
174
// Advance offset by the size of the key.
170
175
offset += Bytes :: from ( key_size) ;
176
+
177
+ keys_encoded_values. push ( ( key, LazyValue :: by_ref ( Bytes :: from ( 0usize ) ) ) ) ;
171
178
}
172
179
173
180
// Load the values
174
181
for ( _key, value) in keys_encoded_values. iter_mut ( ) {
175
- // Load the values lazily.
176
- * value = LazyValue :: by_ref ( Bytes :: from ( offset. get ( ) ) ) ;
177
- let value_size = read_u32 ( & reader, offset) as usize ;
178
- offset += U32_SIZE + Bytes :: from ( value_size as u64 ) ;
182
+ let value_offset = Bytes :: from ( offset. get ( ) ) ;
183
+ let value_size = read_u32 ( & reader, offset) ;
184
+ offset += U32_SIZE ;
185
+ * value = if value_size <= LOAD_SIZE_THRESHOLD {
186
+ read_to_vec ( & reader, offset, & mut buf, value_size as usize ) ;
187
+ LazyValue :: by_value ( buf. to_vec ( ) )
188
+ } else {
189
+ LazyValue :: by_ref ( value_offset)
190
+ } ;
191
+ offset += Bytes :: from ( value_size as u64 ) ;
179
192
}
180
193
181
194
Self {
0 commit comments