Files
1641c3c852 feat: update for Ledger v2 (#468)
Co-authored-by: Antoine Wacheux <[email protected]>
Co-authored-by: Maxence Maireaux <[email protected]>
Co-authored-by: Brieuc Caillot <[email protected]>
2023-09-20 16:40:28 +02:00

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: {},
},
}
}