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), } }