2018-09-04 16:35:38 +00:00
|
|
|
package tracer
|
|
|
|
|
2018-09-05 15:36:14 +00:00
|
|
|
import (
|
|
|
|
"strconv"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
2018-09-04 16:35:38 +00:00
|
|
|
// toFloat64 attempts to convert value into a float64. If it succeeds it returns
|
|
|
|
// the value and true, otherwise 0 and false.
|
|
|
|
func toFloat64(value interface{}) (f float64, ok bool) {
|
|
|
|
switch i := value.(type) {
|
|
|
|
case byte:
|
|
|
|
return float64(i), true
|
|
|
|
case float32:
|
|
|
|
return float64(i), true
|
|
|
|
case float64:
|
|
|
|
return i, true
|
|
|
|
case int:
|
|
|
|
return float64(i), true
|
|
|
|
case int16:
|
|
|
|
return float64(i), true
|
|
|
|
case int32:
|
|
|
|
return float64(i), true
|
|
|
|
case int64:
|
|
|
|
return float64(i), true
|
|
|
|
case uint:
|
|
|
|
return float64(i), true
|
|
|
|
case uint16:
|
|
|
|
return float64(i), true
|
|
|
|
case uint32:
|
|
|
|
return float64(i), true
|
|
|
|
case uint64:
|
|
|
|
return float64(i), true
|
|
|
|
default:
|
|
|
|
return 0, false
|
|
|
|
}
|
|
|
|
}
|
2018-09-05 15:36:14 +00:00
|
|
|
|
|
|
|
// parseUint64 parses a uint64 from either an unsigned 64 bit base-10 string
|
|
|
|
// or a signed 64 bit base-10 string representing an unsigned integer
|
|
|
|
func parseUint64(str string) (uint64, error) {
|
|
|
|
if strings.HasPrefix(str, "-") {
|
|
|
|
id, err := strconv.ParseInt(str, 10, 64)
|
|
|
|
if err != nil {
|
|
|
|
return 0, err
|
|
|
|
}
|
|
|
|
return uint64(id), nil
|
|
|
|
}
|
|
|
|
return strconv.ParseUint(str, 10, 64)
|
|
|
|
}
|