formulaCriteriaEval evaluate formula criteria expression.
(val formulaArg, criteria *formulaCriteria)
| 1872 | |
| 1873 | // formulaCriteriaEval evaluate formula criteria expression. |
| 1874 | func formulaCriteriaEval(val formulaArg, criteria *formulaCriteria) (result bool, err error) { |
| 1875 | s := NewStack() |
| 1876 | tokenCalcFunc := map[byte]func(rOpd, lOpd formulaArg, opdStack *Stack) error{ |
| 1877 | criteriaEq: calcEq, |
| 1878 | criteriaNe: calcNEq, |
| 1879 | criteriaL: calcL, |
| 1880 | criteriaLe: calcLe, |
| 1881 | criteriaG: calcG, |
| 1882 | criteriaGe: calcGe, |
| 1883 | } |
| 1884 | switch criteria.Type { |
| 1885 | case criteriaEq, criteriaLe, criteriaGe, criteriaNe, criteriaL, criteriaG: |
| 1886 | if fn, ok := tokenCalcFunc[criteria.Type]; ok { |
| 1887 | if _ = fn(criteria.Condition, val, s); s.Len() > 0 { |
| 1888 | return s.Pop().(formulaArg).Number == 1, err |
| 1889 | } |
| 1890 | } |
| 1891 | case criteriaRegexp: |
| 1892 | return regexp.MatchString(criteria.Condition.Value(), val.Value()) |
| 1893 | } |
| 1894 | return |
| 1895 | } |
| 1896 | |
| 1897 | // Engineering Functions |
| 1898 |
no test coverage detected