package util // IsHighBitSet 判断最高位是否为 1(表/字段是否被删除) func IsHighBitSet(b byte) bool { return b&0x80 != 0 } // SetHighBit 将最高位置 1(标记删除) func SetHighBit(b byte) byte { return b | 0x80 } // BytesToString 字节数组转字符串(固定长度表名专用) func BytesToString(b []byte) string { for i := range b { if b[i] == 0 { return string(b[:i]) } } return string(b) } // 工具函数:int64比较 func CompareInt64(a, b int64) int { if a < b { return -1 } else if a > b { return 1 } return 0 } // 工具函数:uint64比较 func CompareUint64(a, b uint64) int { if a < b { return -1 } else if a > b { return 1 } return 0 } // BinarySearch // 通用二分查找:适用于所有有序 []byte 连续存储的索引条目 // entryLen: 单个条目长度 // compare: 比较函数:mid条目数据 vs 目标key // 返回:找到的位置pos, 是否找到found func BinarySearch( entries []byte, entryLen int, key []byte, compare func(a, b []byte) int, ) (pos uint32, found bool) { n := len(entries) / entryLen if n == 0 { return 0, false } left := 0 right := n - 1 pos = uint32(n) for left <= right { mid := (left + right) >> 1 start := mid * entryLen midEntry := entries[start : start+entryLen] cmp := compare(midEntry, key) // <--- 现在两个参数 switch { case cmp == 0: return uint32(mid), true case cmp < 0: left = mid + 1 default: right = mid - 1 pos = uint32(mid) } } return pos, false }