WeightFromDynamics function

This commit is contained in:
DanB
2021-02-11 12:21:07 +01:00
parent 6d4e968b68
commit 14738bc554
2 changed files with 16 additions and 2 deletions

View File

@@ -101,3 +101,17 @@ func MatchingItemIDsForEvent(ev utils.MapStorage, stringFldIDs, prefixFldIDs, su
}
return
}
// Weight returns weight of the first matching DynamicWeight
func WeightFromDynamics(dWs []*utils.DynamicWeight,
fltrS FilterS, tnt string, ev utils.DataProvider) (wg float64, err error) {
for _, dW := range dWs {
var pass bool
if pass, err = fltrS.Pass(tnt, dW.FilterIDs, ev); err != nil {
return
} else if pass {
return dW.Weight, nil
}
}
return 0.0, nil
}

View File

@@ -32,13 +32,13 @@ func NewDynamicWeightsFromString(s, dWSep, fltrSep string) (dWs []*DynamicWeight
if lnDwStrs%nrFlds != 0 { // need to have multiples of number of fields in one DynamicWeight
return nil, fmt.Errorf("invalid DynamicWeight format for string <%s>", s)
}
dWs = make([]*DynamicWeight, lnDwStrs/2)
dWs = make([]*DynamicWeight, lnDwStrs/nrFlds)
for i := 0; i < lnDwStrs; i += nrFlds {
dw := &DynamicWeight{FilterIDs: strings.Split(dwStrs[i], fltrSep)}
if dw.Weight, err = strconv.ParseFloat(dwStrs[i+1], 64); err != nil {
return nil, fmt.Errorf("invalid Weight <%s> in string: <%s>", dwStrs[i+1], s)
}
dWs[i/nrFlds] = dw
dWs = append(dWs, dw)
}
return
}