Remove if statement at compile time

This commit is contained in:
Mark Spanbroek 2023-11-13 14:15:38 +01:00 committed by markspanbroek
parent a311828b9e
commit cce9c13a04

View File

@ -15,28 +15,28 @@ func merkleRoot(xs: openArray[F], isBottomLayer: static bool) : F =
let b = high(xs)
let m = b-a+1
if m==1 and not isBottomLayer:
return xs[a]
when not isBottomLayer:
if m==1:
return xs[a]
let halfn : int = m div 2
let n : int = 2*halfn
let isOdd : bool = (n != m)
var ys : seq[F]
if not isOdd:
ys = newSeq[F](halfn)
else:
let halfn : int = m div 2
let n : int = 2*halfn
let isOdd : bool = (n != m)
ys = newSeq[F](halfn+1)
var ys : seq[F]
if not isOdd:
ys = newSeq[F](halfn)
else:
ys = newSeq[F](halfn+1)
for i in 0..<halfn:
const key = when isBottomLayer: KeyBottomLayer else: KeyNone
ys[i] = compress( xs[a+2*i], xs[a+2*i+1], key = key )
if isOdd:
const key = when isBottomLayer: KeyOddAndBottomLayer else: KeyOdd
ys[halfn] = compress( xs[n], zero, key = key )
for i in 0..<halfn:
const key = when isBottomLayer: KeyBottomLayer else: KeyNone
ys[i] = compress( xs[a+2*i], xs[a+2*i+1], key = key )
if isOdd:
const key = when isBottomLayer: KeyOddAndBottomLayer else: KeyOdd
ys[halfn] = compress( xs[n], zero, key = key )
return merkleRoot(ys, isBottomLayer = false)
return merkleRoot(ys, isBottomLayer = false)
func merkleRoot*(xs: openArray[F]) : F =
merkleRoot(xs, isBottomLayer = true)