aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runxi Yu2025-11-15 00:00:00 +0000
committerGravatar Runxi Yu2025-11-15 00:00:00 +0000
commit31595765037b5ebb63578d1d267510c7322bbac6 (patch)
tree0f107705b0d44a9314f116f07987761b27430152
parentOther forges if interested (diff)
signature
tree: Add Entry method (binary search over entries to get hash)
-rw-r--r--obj_tree.go17
1 files changed, 17 insertions, 0 deletions
diff --git a/obj_tree.go b/obj_tree.go
index c78fd375..48121b0a 100644
--- a/obj_tree.go
+++ b/obj_tree.go
@@ -108,3 +108,20 @@ func (t *Tree) Serialize() ([]byte, error) {
copy(raw[len(header):], body)
return raw, nil
}
+
+// Entry looks up a tree entry by name.
+func (t *Tree) Entry(name []byte) *TreeEntry {
+ low, high := 0, len(t.Entries)-1
+ for low <= high {
+ mid := (low + high) / 2
+ cmp := bytes.Compare(t.Entries[mid].Name, name)
+ if cmp == 0 {
+ return &t.Entries[mid]
+ } else if cmp < 0 {
+ low = mid + 1
+ } else {
+ high = mid - 1
+ }
+ }
+ return nil
+}