From aa7e2873aa4da53fbaa4774fdd33f5af20c1afb0 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Mon, 30 Mar 2026 05:40:58 +0000 Subject: object/tree: Add helpers and cleanup --- object/tree/entry.go | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'object/tree/entry.go') 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 } -- cgit v1.3.1-10-gc9f91