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
 | 
						|
}
 |