aboutsummaryrefslogtreecommitdiff
path: root/object/store/memory/memory.go
blob: 9c7b59d32f6a64654549fda78fb6dc36509849a8 (about) (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package memory

import (
	"lindenii.org/go/furgit/object/id"
	"lindenii.org/go/furgit/object/store"
	"lindenii.org/go/furgit/object/typ"
	"lindenii.org/go/lgo/sync"
)

// Memory is one in-memory object store.
//
// Labels: MT-Safe, Close-Caller.
type Memory struct {
	objectFormat id.ObjectFormat
	objects      *sync.Map[id.ObjectID, storedObject]
}

// storedObject is one in-memory object entry.
type storedObject struct {
	ty      typ.Type
	content []byte
}

var (
	_ store.ObjectReader = (*Memory)(nil)
	_ store.ObjectWriter = (*Memory)(nil)
)

// New builds one empty in-memory store for one object format.
func New(objectFormat id.ObjectFormat) *Memory {
	return &Memory{
		objectFormat: objectFormat,
		objects:      &sync.Map[id.ObjectID, storedObject]{},
	}
}

// ObjectFormat returns the object format used by the store.
func (memory *Memory) ObjectFormat() id.ObjectFormat {
	return memory.objectFormat
}