package engine type diffSensitivity struct { prefixes pathPrefixIndex pointers []string } func newDiffSensitivity(left, right map[string]bool) *diffSensitivity { sensitivity := &diffSensitivity{} seen := make(map[string]struct{}, len(left)+len(right)) for _, classifications := range []map[string]bool{left, right} { for pointer, classified := range classifications { if !classified { continue } if _, found := seen[pointer]; found { continue } seen[pointer] = struct{}{} id := len(sensitivity.pointers) sensitivity.pointers = append(sensitivity.pointers, pointer) sensitivity.prefixes.insert(pointer, id) } } return sensitivity } func (sensitivity *diffSensitivity) isSensitiveAtOrAbove(pointer string) bool { if sensitivity == nil { return false } found := false sensitivity.prefixes.visitAncestors(pointer, func(int) { found = true }) return found } func (sensitivity *diffSensitivity) hasStrictDescendant(pointer string) bool { if sensitivity == nil { return false } found := false sensitivity.prefixes.visitDescendants(pointer, func(id int) { if sensitivity.pointers[id] != pointer { found = true } }) return found }