| 12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- package buffer
- import (
- "slices"
- "cmp"
- )
- type Cursor struct {
- Offset int
- }
- type CursorManager struct {
- Cursors []Cursor
- PrimaryIdx int
- }
- func (cm *CursorManager) AddCursor(cur Cursor) {
- cm.Cursors = append(cm.Cursors, cur)
- cm.DeduplicateAndSort()
- }
- func (cm *CursorManager) DeduplicateAndSort() {
- if len(cm.Cursors) <= 1 {
- return
- }
- primaryCursor := cm.Cursors[cm.PrimaryIdx]
- slices.SortFunc(cm.Cursors, func(a, b Cursor) int {
- return cmp.Compare(a.Offset, b.Offset)
- })
- cm.Cursors = slices.CompactFunc(cm.Cursors, func(a, b Cursor) bool {
- return a.Offset == b.Offset
- })
- for i, cur := range cm.Cursors {
- if cur == primaryCursor {
- cm.PrimaryIdx = i
- break
- }
- }
- }
|