package binlog import ( "bytes" "encoding/hex" "strings" "sync" ) func intToBytes(num int, buf []byte) []byte { for i := 0; i < len(buf); i++ { buf[i] = byte(num & 0xff) num = num >> 8 } return buf } func uintToBytes(num uint, buf []byte) []byte { for i := 0; i < len(buf); i++ { buf[i] = byte(num & 0xff) num = num >> 8 } return buf } func stringNullToBytes(a string) []byte { ret := []byte(a) ret = append(ret, byte(0)) return ret } func bytesToUint(buf []byte) uint { var a uint var i uint for _, b := range buf { a += uint(b) << i i += 8 } return a } func bytesToUint64(buf []byte) uint64 { var a uint64 var i uint for _, b := range buf { a += uint64(b) << i i += 8 } return a } type tBytesToUuidCache struct { mutex sync.RWMutex bs []byte uuid string } var bytesToUuidCache tBytesToUuidCache func bytesToUuid(buf []byte) (ret string) { bytesToUuidCache.mutex.RLock() if 0 == bytes.Compare(buf, bytesToUuidCache.bs) { bytesToUuidCache.mutex.RUnlock() return bytesToUuidCache.uuid } bytesToUuidCache.mutex.RUnlock() uuid := strings.ToUpper(hex.EncodeToString(buf)) bytesToUuidCache.mutex.Lock() bytesToUuidCache.bs = make([]byte, len(buf)) copy(bytesToUuidCache.bs, buf) bytesToUuidCache.uuid = uuid bytesToUuidCache.mutex.Unlock() return uuid }