Files
r53/vendor/github.com/aws/smithy-go/endpoints/private/bdd/evaluate.go
T
2026-10-24 02:44:51 +00:00

36 lines
797 B
Go

package bdd
const resultOffset int32 = 100_000_000
const intsPerNode = 3
// Evaluate traverses a compiled BDD node array and returns the result index.
// nodes is a flat array of [condIdx, hi, lo] triples (1-indexed).
// root is the root node reference. evalCond returns true/false for condition index.
func Evaluate(nodes []int32, root int32, evalCond func(int) bool) int32 {
ref := root
for {
if ref >= resultOffset {
return ref - resultOffset
}
if ref == 1 || ref == -1 {
return 0 // NoMatchRule
}
complement := ref < 0
nodeIdx := ref
if complement {
nodeIdx = -ref
}
base := (nodeIdx - 1) * intsPerNode
condIdx := nodes[base]
hi := nodes[base+1]
lo := nodes[base+2]
if complement != evalCond(int(condIdx)) {
ref = hi
} else {
ref = lo
}
}
}