rawhelpers.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. package internal // import "go.opentelemetry.io/otel/internal"
  4. import (
  5. "math"
  6. "unsafe"
  7. )
  8. func BoolToRaw(b bool) uint64 { // nolint:revive // b is not a control flag.
  9. if b {
  10. return 1
  11. }
  12. return 0
  13. }
  14. func RawToBool(r uint64) bool {
  15. return r != 0
  16. }
  17. func Int64ToRaw(i int64) uint64 {
  18. // Assumes original was a valid int64 (overflow not checked).
  19. return uint64(i) // nolint: gosec
  20. }
  21. func RawToInt64(r uint64) int64 {
  22. // Assumes original was a valid int64 (overflow not checked).
  23. return int64(r) // nolint: gosec
  24. }
  25. func Float64ToRaw(f float64) uint64 {
  26. return math.Float64bits(f)
  27. }
  28. func RawToFloat64(r uint64) float64 {
  29. return math.Float64frombits(r)
  30. }
  31. func RawPtrToFloat64Ptr(r *uint64) *float64 {
  32. // Assumes original was a valid *float64 (overflow not checked).
  33. return (*float64)(unsafe.Pointer(r)) // nolint: gosec
  34. }
  35. func RawPtrToInt64Ptr(r *uint64) *int64 {
  36. // Assumes original was a valid *int64 (overflow not checked).
  37. return (*int64)(unsafe.Pointer(r)) // nolint: gosec
  38. }