package yu_fast

import (
	"unsafe"
)

// B2S
//
//	@Description: 在没有内存分配的情况下将字节片转换为字符串
func B2S(b []byte) string {
	return *(*string)(unsafe.Pointer(&b))
}

type sliceHeader struct {
	data uintptr
	len  int
	cap  int
}

type stringHeader struct {
	data uintptr
	len  int
}

// S2B
//
//	@Description: 在没有内存分配的情况下将字符串转换为字节片
func S2B(s string) (b []byte) {
	bh := (*sliceHeader)(unsafe.Pointer(&b))
	sh := (*stringHeader)(unsafe.Pointer(&s))
	bh.data = sh.data
	bh.len = sh.len
	bh.cap = sh.len
	return
	return *(*[]byte)(unsafe.Pointer(&s))
}

// P2B
//
//	@Description: 指针转[]byte
//	@param ptr 数据指针
//	@param size 数据尺寸
//	@return []byte 转换结果
func P2B[T int | uintptr](ptr T, size T) []byte {
	j_bufs := make([]byte, size)
	copy(j_bufs, *(*[]byte)(unsafe.Pointer(&[3]uintptr{uintptr(ptr), uintptr(size), uintptr(size)})))
	return j_bufs
}

// P2S
//
//	@Description: 指针转 string
//	@param ptr 数据指针
//	@param size 数据尺寸
//	@return []byte 转换结果
func P2S[T int | uintptr](ptr T, size T) string {
	return string(P2B(ptr, size))
}
