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