mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-05 16:15:56 +00:00
39 lines
663 B
Go
39 lines
663 B
Go
package util
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/binary"
|
|
"encoding/hex"
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
counter = uint64(0)
|
|
)
|
|
|
|
func init() {
|
|
rand.Seed(time.Now().UTC().UnixNano())
|
|
}
|
|
|
|
type SUUID uint64
|
|
|
|
func Id() SUUID {
|
|
millis := uint64(time.Now().UTC().UnixNano())
|
|
id := millis << (64 - 41)
|
|
id |= uint64(rand.Intn(128)) << (64 - 41 - 13)
|
|
id |= counter % 1024
|
|
counter += 1
|
|
return SUUID(id)
|
|
}
|
|
|
|
func SUUID_to_Hex(a SUUID) string {
|
|
buf := new(bytes.Buffer)
|
|
binary.Write(buf, binary.BigEndian, a)
|
|
return hex.EncodeToString(buf.Bytes())
|
|
}
|
|
func Hex_to_SUUID(str string) SUUID {
|
|
b, _ := hex.DecodeString(str)
|
|
num := binary.BigEndian.Uint64(b)
|
|
return SUUID(num)
|
|
}
|