72 lines
1.2 KiB
Go
72 lines
1.2 KiB
Go
package govaluate
|
|
|
|
// sanitizedParameters is a wrapper for Parameters that does sanitization as
|
|
// parameters are accessed.
|
|
type sanitizedParameters struct {
|
|
orig Parameters
|
|
}
|
|
|
|
func (p sanitizedParameters) Get(key string) (interface{}, error) {
|
|
value, err := p.orig.Get(key)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// should be converted to fixed point?
|
|
if isFixedPoint(value) {
|
|
return castFixedPoint(value), nil
|
|
}
|
|
|
|
return value, nil
|
|
}
|
|
|
|
func isFixedPoint(value interface{}) bool {
|
|
|
|
switch value.(type) {
|
|
case uint8:
|
|
return true
|
|
case uint16:
|
|
return true
|
|
case uint32:
|
|
return true
|
|
case uint64:
|
|
return true
|
|
case int8:
|
|
return true
|
|
case int16:
|
|
return true
|
|
case int32:
|
|
return true
|
|
case int64:
|
|
return true
|
|
case int:
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func castFixedPoint(value interface{}) float64 {
|
|
switch value.(type) {
|
|
case uint8:
|
|
return float64(value.(uint8))
|
|
case uint16:
|
|
return float64(value.(uint16))
|
|
case uint32:
|
|
return float64(value.(uint32))
|
|
case uint64:
|
|
return float64(value.(uint64))
|
|
case int8:
|
|
return float64(value.(int8))
|
|
case int16:
|
|
return float64(value.(int16))
|
|
case int32:
|
|
return float64(value.(int32))
|
|
case int64:
|
|
return float64(value.(int64))
|
|
case int:
|
|
return float64(value.(int))
|
|
}
|
|
|
|
return 0.0
|
|
}
|