aboutsummaryrefslogtreecommitdiff
path: root/objectstore/mix/new.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-04 12:45:42 +0800
committerGravatar Runxi Yu2026-03-04 12:45:42 +0800
commit787791683d40a4bfff5f19d10686cb181bb69bf6 (patch)
treecd3a13cc1af3883acfb2f735133d0df5a831ba65 /objectstore/mix/new.go
parentobjectstore/mix: Rename from objectstore/chain (diff)
signatureNo signature
objectstore/mix: Separate
Diffstat (limited to 'objectstore/mix/new.go')
-rw-r--r--objectstore/mix/new.go40
1 files changed, 40 insertions, 0 deletions
diff --git a/objectstore/mix/new.go b/objectstore/mix/new.go
new file mode 100644
index 00000000..c6fdeeee
--- /dev/null
+++ b/objectstore/mix/new.go
@@ -0,0 +1,40 @@
+package mix
+
+import "codeberg.org/lindenii/furgit/objectstore"
+
+// New creates a Mix from backends.
+func New(backends ...objectstore.Store) *Mix {
+ nodeByStore := make(map[objectstore.Store]*backendNode, len(backends))
+
+ var (
+ head *backendNode
+ tail *backendNode
+ )
+
+ for _, backend := range backends {
+ if backend == nil {
+ continue
+ }
+
+ node := &backendNode{
+ backend: backend,
+ prev: tail,
+ }
+ if tail != nil {
+ tail.next = node
+ }
+
+ if head == nil {
+ head = node
+ }
+
+ tail = node
+ nodeByStore[backend] = node
+ }
+
+ return &Mix{
+ backendHead: head,
+ backendTail: tail,
+ backendNodeByStore: nodeByStore,
+ }
+}