From ae879b8cf5a87199802a33d6b15c76afafa8002b Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sat, 21 Feb 2026 05:35:12 +0800 Subject: objectstore/packed: Add initial pack reading support --- objectstore/packed/delta_cache.go | 58 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 objectstore/packed/delta_cache.go (limited to 'objectstore/packed/delta_cache.go') diff --git a/objectstore/packed/delta_cache.go b/objectstore/packed/delta_cache.go new file mode 100644 index 00000000..66bd8ac4 --- /dev/null +++ b/objectstore/packed/delta_cache.go @@ -0,0 +1,58 @@ +package packed + +import ( + "codeberg.org/lindenii/furgit/internal/cache/lru" + "codeberg.org/lindenii/furgit/objecttype" +) + +// deltaBaseKey identifies one base object by pack location. +type deltaBaseKey struct { + packName string + offset uint64 +} + +// deltaBaseValue stores one cached base object body. +type deltaBaseValue struct { + ty objecttype.Type + content []byte +} + +// deltaCache wraps a weighted LRU for resolved delta bases. +type deltaCache struct { + lru *lru.Cache[deltaBaseKey, deltaBaseValue] +} + +// newDeltaCache creates a delta base cache with a byte budget. +func newDeltaCache(maxBytes int64) *deltaCache { + return &deltaCache{ + lru: lru.New( + maxBytes, + func(_ deltaBaseKey, value deltaBaseValue) int64 { + return int64(len(value.content)) + }, + nil, + ), + } +} + +// get returns a cloned cached base object value. +func (cache *deltaCache) get(key deltaBaseKey) (objecttype.Type, []byte, bool) { + value, ok := cache.lru.Get(key) + if !ok { + return objecttype.TypeInvalid, nil, false + } + return value.ty, append([]byte(nil), value.content...), true +} + +// add stores a cloned base object value. +func (cache *deltaCache) add(key deltaBaseKey, ty objecttype.Type, content []byte) { + cache.lru.Add(key, deltaBaseValue{ + ty: ty, + content: append([]byte(nil), content...), + }) +} + +// clear removes all cached entries. +func (cache *deltaCache) clear() { + cache.lru.Clear() +} -- cgit v1.3.1-10-gc9f91