mirror of
https://github.com/hanzo-fi/stack.git
synced 2026-10-30 20:34:43 +00:00
Co-authored-by: Antoine Wacheux <[email protected]> Co-authored-by: Maxence Maireaux <[email protected]> Co-authored-by: Brieuc Caillot <[email protected]>
43 lines
748 B
Go
43 lines
748 B
Go
package command
|
|
|
|
import (
|
|
"fmt"
|
|
"sync"
|
|
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type Reference int
|
|
|
|
const (
|
|
referenceReverts = iota
|
|
referenceIks
|
|
referenceTxReference
|
|
)
|
|
|
|
type Referencer struct {
|
|
references map[Reference]*sync.Map
|
|
}
|
|
|
|
func (r *Referencer) take(ref Reference, key any) error {
|
|
_, loaded := r.references[ref].LoadOrStore(fmt.Sprintf("%d/%s", ref, key), struct{}{})
|
|
if loaded {
|
|
return errors.New("already taken")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (r *Referencer) release(ref Reference, key any) {
|
|
r.references[ref].Delete(fmt.Sprintf("%d/%s", ref, key))
|
|
}
|
|
|
|
func NewReferencer() *Referencer {
|
|
return &Referencer{
|
|
references: map[Reference]*sync.Map{
|
|
referenceReverts: {},
|
|
referenceIks: {},
|
|
referenceTxReference: {},
|
|
},
|
|
}
|
|
}
|