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