Files
hk4e/pkg/object/object.go
2022-12-19 13:40:04 +08:00

96 lines
1.4 KiB
Go

package object
import (
"bytes"
"encoding/gob"
"fmt"
"github.com/vmihailenco/msgpack/v5"
)
func DeepCopy(dst, src any) error {
var buf bytes.Buffer
err := gob.NewEncoder(&buf).Encode(src)
if err != nil {
return err
}
err = gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst)
if err != nil {
return err
}
return nil
}
func FastDeepCopy(dst, src any) error {
data, err := msgpack.Marshal(src)
if err != nil {
return err
}
err = msgpack.Unmarshal(data, dst)
if err != nil {
return err
}
return nil
}
func ConvBoolToInt64(v bool) int64 {
if v {
return 1
} else {
return 0
}
}
func ConvInt64ToBool(v int64) bool {
if v != 0 {
return true
} else {
return false
}
}
func ConvListToMap[T any](l []T) map[uint64]T {
ret := make(map[uint64]T)
for index, value := range l {
ret[uint64(index)] = value
}
return ret
}
func ConvMapToList[T any](m map[uint64]T) []T {
ret := make([]T, 0)
for _, value := range m {
ret = append(ret, value)
}
return ret
}
func IsUtf8String(value string) bool {
data := []byte(value)
for i := 0; i < len(data); {
str := fmt.Sprintf("%b", data[i])
num := 0
for num < len(str) {
if str[num] != '1' {
break
}
num++
}
if data[i]&0x80 == 0x00 {
i++
continue
} else if num > 2 {
i++
for j := 0; j < num-1; j++ {
if data[i]&0xc0 != 0x80 {
return false
}
i++
}
} else {
return false
}
}
return true
}