package core

import (
	"math"
	"unsafe"
)

func boolToRaw(b bool) uint64 {
	if b {
		return 1
	}
	return 0
}

func rawToBool(r uint64) bool {
	return r != 0
}

func int64ToRaw(i int64) uint64 {
	return uint64(i)
}

func rawToInt64(r uint64) int64 {
	return int64(r)
}

func uint64ToRaw(u uint64) uint64 {
	return u
}

func rawToUint64(r uint64) uint64 {
	return r
}

func float64ToRaw(f float64) uint64 {
	return math.Float64bits(f)
}

func rawToFloat64(r uint64) float64 {
	return math.Float64frombits(r)
}

func int32ToRaw(i int32) uint64 {
	return uint64(i)
}

func rawToInt32(r uint64) int32 {
	return int32(r)
}

func uint32ToRaw(u uint32) uint64 {
	return uint64(u)
}

func rawToUint32(r uint64) uint32 {
	return uint32(r)
}

func float32ToRaw(f float32) uint64 {
	return uint32ToRaw(math.Float32bits(f))
}

func rawToFloat32(r uint64) float32 {
	return math.Float32frombits(rawToUint32(r))
}

func rawPtrToFloat64Ptr(r *uint64) *float64 {
	return (*float64)(unsafe.Pointer(r))
}

func rawPtrToInt64Ptr(r *uint64) *int64 {
	return (*int64)(unsafe.Pointer(r))
}

func rawPtrToUint64Ptr(r *uint64) *uint64 {
	return r
}