guesstimate/server/internal/diffsync/document.go

57 lines
882 B
Go

package diffsync
import "sync"
type Version uint64
type void struct{}
type Document struct {
content []byte
patcher Patcher
differ Differ
peers map[*Peer]void
peersMutex sync.RWMutex
}
func (d *Document) NewPeer() *Peer {
d.peersMutex.Lock()
defer d.peersMutex.Unlock()
p := &Peer{
document: d,
shadow: NewShadow(Copy(d.content)),
editsStack: make(EditsStack, 0),
}
d.peers[p] = void{}
return p
}
func (d *Document) RemovePeer(p *Peer) {
d.peersMutex.Lock()
defer d.peersMutex.Unlock()
delete(d.peers, p)
p.document = nil
}
func (d *Document) Content() []byte {
return d.content
}
func NewDocument(content []byte, funcs ...OptionFunc) *Document {
opt := MergeOption(
DefaultOption(),
funcs...,
)
return &Document{
content: content,
patcher: opt.Patcher,
differ: opt.Differ,
peers: make(map[*Peer]void),
}
}