Exemplo n.º 1
0
func (self *RuleEngine) GetFiredExpressions(data *facts.FactCollection) []string {
	counter := make(map[int]int)
	for _, k := range data.Keys() {
		ids, ok := self.expressionIndex[k]
		if ok {
			for _, id := range ids {
				v, exist := counter[id]
				if !exist {
					counter[id] = 1
				} else {
					counter[id] = v + 1
				}
			}
		}
	}

	firedExpressions := []string{}
	for k, v := range counter {
		if v == self.varCountInExpressions[k] {
			fmt.Println(self.expressions[k])
			ret := expression.CalcReversePolishNotation(self.expressions[k], data)
			if ret == "true" {
				fmt.Println("fire expression", self.expressionNames[k], self.expressions[k])
				firedExpressions = append(firedExpressions, self.expressionNames[k])
			}
		}
	}
	return firedExpressions
}