diff options
Diffstat (limited to 'object/tree/entry.go')
| -rw-r--r-- | object/tree/entry.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/object/tree/entry.go b/object/tree/entry.go new file mode 100644 index 00000000..cddcde73 --- /dev/null +++ b/object/tree/entry.go @@ -0,0 +1,39 @@ +package tree + +import ( + "bytes" + + objectid "codeberg.org/lindenii/furgit/object/id" +) + +// TreeEntry represents a single entry in a tree. +type TreeEntry struct { + Mode FileMode + Name []byte + ID objectid.ObjectID +} + +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 + } + + if cmp < 0 { + low = mid + 1 + } else { + high = mid - 1 + } + } + + return nil +} |
