/
baseDirectory.go
57 lines (47 loc) · 1.06 KB
/
baseDirectory.go
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package store
import ()
type BaseDirectorySPI interface {
// DirectoryImplSPI
LockID() string
}
/* Base implementation for a concrete Directory. */
type BaseDirectory struct {
spi BaseDirectorySPI
IsOpen bool
lockFactory LockFactory
}
func NewBaseDirectory(spi BaseDirectorySPI) *BaseDirectory {
assert(spi != nil)
return &BaseDirectory{
// DirectoryImpl: NewDirectoryImpl(spi),
spi: spi,
IsOpen: true,
}
}
func (d *BaseDirectory) MakeLock(name string) Lock {
return d.lockFactory.Make(name)
}
func (d *BaseDirectory) ClearLock(name string) error {
if d.lockFactory != nil {
return d.lockFactory.Clear(name)
}
return nil
}
func (d *BaseDirectory) SetLockFactory(lockFactory LockFactory) {
assert(d != nil && lockFactory != nil)
d.lockFactory = lockFactory
d.lockFactory.SetLockPrefix(d.spi.LockID())
}
func assert(ok bool) {
if !ok {
panic("assert fail")
}
}
func (d *BaseDirectory) LockFactory() LockFactory {
return d.lockFactory
}
func (d *BaseDirectory) EnsureOpen() {
if !d.IsOpen {
panic("this Directory is closed")
}
}