package models // import "github.com/influxdata/influxdb/models" import ( "strconv" "unsafe" ) // parseIntBytes is a zero-alloc wrapper around strconv.ParseInt. func parseIntBytes(b []byte, base int, bitSize int) (i int64, err error) { s := unsafeBytesToString(b) return strconv.ParseInt(s, base, bitSize) } // parseUintBytes is a zero-alloc wrapper around strconv.ParseUint. func parseUintBytes(b []byte, base int, bitSize int) (i uint64, err error) { s := unsafeBytesToString(b) return strconv.ParseUint(s, base, bitSize) } // parseFloatBytes is a zero-alloc wrapper around strconv.ParseFloat. func parseFloatBytes(b []byte, bitSize int) (float64, error) { s := unsafeBytesToString(b) return strconv.ParseFloat(s, bitSize) } // parseBoolBytes is a zero-alloc wrapper around strconv.ParseBool. func parseBoolBytes(b []byte) (bool, error) { return strconv.ParseBool(unsafeBytesToString(b)) } // unsafeBytesToString converts a []byte to a string without a heap allocation. func unsafeBytesToString(in []byte) string { return *(*string)(unsafe.Pointer(&in)) }