aboutsummaryrefslogtreecommitdiff
path: root/object/tree/entry.go
diff options
context:
space:
mode:
Diffstat (limited to 'object/tree/entry.go')
-rw-r--r--object/tree/entry.go38
1 files changed, 19 insertions, 19 deletions
diff --git a/object/tree/entry.go b/object/tree/entry.go
index 06b8d112..70f1dab7 100644
--- a/object/tree/entry.go
+++ b/object/tree/entry.go
@@ -2,6 +2,7 @@ package tree
import (
"bytes"
+ "slices"
objectid "codeberg.org/lindenii/furgit/object/id"
)
@@ -16,26 +17,25 @@ type TreeEntry struct {
}
func (tree *Tree) entry(name []byte, searchIsTree bool) *TreeEntry {
- low, high := 0, len(tree.Entries)-1
- for low <= high {
- mid := low + (high-low)/2
- entry := &tree.Entries[mid]
-
- cmp := TreeEntryNameCompare(entry.Name, entry.Mode, name, searchIsTree)
- if cmp == 0 {
- if bytes.Equal(entry.Name, name) {
- return entry
- }
-
- return nil
- }
+ index, ok := slices.BinarySearchFunc(tree.Entries, treeEntrySearch{
+ name: name,
+ isTree: searchIsTree,
+ }, func(entry TreeEntry, search treeEntrySearch) int {
+ return TreeEntryNameCompare(entry.Name, entry.Mode, search.name, search.isTree)
+ })
+ if !ok {
+ return nil
+ }
- if cmp < 0 {
- low = mid + 1
- } else {
- high = mid - 1
- }
+ entry := &tree.Entries[index]
+ if !bytes.Equal(entry.Name, name) {
+ return nil
}
- return nil
+ return entry
+}
+
+type treeEntrySearch struct {
+ name []byte
+ isTree bool
}