@@ -266,64 +266,68 @@ func (tree *MutableTree) set(key []byte, value []byte) (updated bool, err error)
266
266
func (tree * MutableTree ) recursiveSet (node * Node , key []byte , value []byte ) (
267
267
newSelf * Node , updated bool , err error ,
268
268
) {
269
- version := tree .version + 1
270
-
271
269
if node .isLeaf () {
272
- if ! tree .skipFastStorageUpgrade {
273
- tree .addUnsavedAddition (key , fastnode .NewNode (key , value , version ))
274
- }
275
- switch bytes .Compare (key , node .key ) {
276
- case - 1 : // setKey < leafKey
277
- return & Node {
278
- key : node .key ,
279
- subtreeHeight : 1 ,
280
- size : 2 ,
281
- nodeKey : nil ,
282
- leftNode : NewNode (key , value ),
283
- rightNode : node ,
284
- }, false , nil
285
- case 1 : // setKey > leafKey
286
- return & Node {
287
- key : key ,
288
- subtreeHeight : 1 ,
289
- size : 2 ,
290
- nodeKey : nil ,
291
- leftNode : node ,
292
- rightNode : NewNode (key , value ),
293
- }, false , nil
294
- default :
295
- return NewNode (key , value ), true , nil
270
+ return tree .recursiveSetLeaf (node , key , value )
271
+ }
272
+ node , err = node .clone (tree )
273
+ if err != nil {
274
+ return nil , false , err
275
+ }
276
+
277
+ if bytes .Compare (key , node .key ) < 0 {
278
+ node .leftNode , updated , err = tree .recursiveSet (node .leftNode , key , value )
279
+ if err != nil {
280
+ return nil , updated , err
296
281
}
297
282
} else {
298
- node , err = node . clone ( tree )
283
+ node . rightNode , updated , err = tree . recursiveSet ( node . rightNode , key , value )
299
284
if err != nil {
300
- return nil , false , err
285
+ return nil , updated , err
301
286
}
287
+ }
302
288
303
- if bytes .Compare (key , node .key ) < 0 {
304
- node .leftNode , updated , err = tree .recursiveSet (node .leftNode , key , value )
305
- if err != nil {
306
- return nil , updated , err
307
- }
308
- } else {
309
- node .rightNode , updated , err = tree .recursiveSet (node .rightNode , key , value )
310
- if err != nil {
311
- return nil , updated , err
312
- }
313
- }
289
+ if updated {
290
+ return node , updated , nil
291
+ }
292
+ err = node .calcHeightAndSize (tree .ImmutableTree )
293
+ if err != nil {
294
+ return nil , false , err
295
+ }
296
+ newNode , err := tree .balance (node )
297
+ if err != nil {
298
+ return nil , false , err
299
+ }
300
+ return newNode , updated , err
301
+ }
314
302
315
- if updated {
316
- return node , updated , nil
317
- }
318
- err = node .calcHeightAndSize (tree .ImmutableTree )
319
- if err != nil {
320
- return nil , false , err
321
- }
322
- newNode , err := tree .balance (node )
323
- if err != nil {
324
- return nil , false , err
325
- }
326
- return newNode , updated , err
303
+ func (tree * MutableTree ) recursiveSetLeaf (node * Node , key []byte , value []byte ) (
304
+ newSelf * Node , updated bool , err error ,
305
+ ) {
306
+ version := tree .version + 1
307
+ if ! tree .skipFastStorageUpgrade {
308
+ tree .addUnsavedAddition (key , fastnode .NewNode (key , value , version ))
309
+ }
310
+ switch bytes .Compare (key , node .key ) {
311
+ case - 1 : // setKey < leafKey
312
+ return & Node {
313
+ key : node .key ,
314
+ subtreeHeight : 1 ,
315
+ size : 2 ,
316
+ nodeKey : nil ,
317
+ leftNode : NewNode (key , value ),
318
+ rightNode : node ,
319
+ }, false , nil
320
+ case 1 : // setKey > leafKey
321
+ return & Node {
322
+ key : key ,
323
+ subtreeHeight : 1 ,
324
+ size : 2 ,
325
+ nodeKey : nil ,
326
+ leftNode : node ,
327
+ rightNode : NewNode (key , value ),
328
+ }, false , nil
329
+ default :
330
+ return NewNode (key , value ), true , nil
327
331
}
328
332
}
329
333
0 commit comments