/***************************************************************************************************
|
|
Each level on a SMTInsert has a state.
|
|
|
|
The state of the level depends on the state of te botom level and on `xor` and
|
|
`is0` signals.
|
|
|
|
`isOldLev` 1 when is the level where oldLeaf is.
|
|
|
|
`xor` signal is 0 if the index bit at the current level is the same in the old
|
|
and the new index, and 1 if it is different.
|
|
|
|
`is0` signal, is 1 if we are inserting in an empty leaf and 0 if we are inserting
|
|
in a leaf that contains an element.
|
|
|
|
The states are:
|
|
|
|
top: While the index bits of the old and new insex in the top level is the same, whe are in the top state.
|
|
old0 and old1: When the we reach insert level, we go to old0 and old1 states
|
|
according to `is0` signal.
|
|
btn: Once in old1 we go to btn until xor=1
|
|
new1: This level is reached when xor=1. Here is where we insert the hash of the
|
|
old and the new trees with just one element.
|
|
na: Not appliable. After inserting it, we go to the na level.
|
|
|
|
|
|
|
|
###########
|
|
levIns==curLevel # #
|
|
xor=0 is0=1 ┌────────────▶# old0 #────────┐
|
|
┌─────┐ │ ## ## │
|
|
│ │ │ ######### │ any
|
|
│ ▼ │ │
|
|
│ ########### │ │ ###########
|
|
│ # # ────────────┘ └────────▶# #
|
|
└──# top # # na #
|
|
## ## ────┐ ┌──▶## ##
|
|
######### │ │ #########
|
|
│ │
|
|
│ ########### ########### │ any
|
|
levIns==curLevel │ # # xor=1 # # │
|
|
is0=0 └───▶# old1 #─────────────▶# new1 #──┘
|
|
## ## ## ##
|
|
#########──┐ #########
|
|
│ ▲
|
|
│ ┌─────┘
|
|
any │ ###########│ xor=1
|
|
│ # #
|
|
└─▶# btn #
|
|
## ##
|
|
#########◀───────┐
|
|
│ │
|
|
│ │
|
|
└────────────┘
|
|
xor=0
|
|
|
|
***************************************************************************************************/
|
|
|
|
state
|