1
0
Fork 0
mirror of https://github.com/anyproto/any-sync.git synced 2025-06-08 05:57:03 +09:00

optimize ldiff compare

This commit is contained in:
Sergey Cherepanov 2025-06-02 16:05:03 +02:00
parent e9ea002e2d
commit 4de1398b7b
No known key found for this signature in database
GPG key ID: 87F8EDE8FBDF637C

View file

@ -381,17 +381,23 @@ func (d *diff) compareResults(dctx *diffCtx, r Range, myRes, otherRes RangeResul
} }
func (d *diff) compareElementsEqual(dctx *diffCtx, my, other []Element) { func (d *diff) compareElementsEqual(dctx *diffCtx, my, other []Element) {
find := func(list []Element, targetEl Element) (has, eq bool) { find := func(list map[string]string, targetEl Element) (has, eq bool) {
for _, el := range list { if head, ok := list[targetEl.Id]; ok {
if el.Id == targetEl.Id { return true, head == targetEl.Head
return true, el.Head == targetEl.Head
}
} }
return false, false return false, false
} }
toMap := func(els []Element) map[string]string {
result := make(map[string]string, len(els))
for _, el := range els {
result[el.Id] = el.Head
}
return result
}
for _, el := range my { for _, el := range my {
has, eq := find(other, el) has, eq := find(toMap(other), el)
if !has { if !has {
dctx.removedIds = append(dctx.removedIds, el.Id) dctx.removedIds = append(dctx.removedIds, el.Id)
continue continue
@ -403,7 +409,7 @@ func (d *diff) compareElementsEqual(dctx *diffCtx, my, other []Element) {
} }
for _, el := range other { for _, el := range other {
if has, _ := find(my, el); !has { if has, _ := find(toMap(my), el); !has {
dctx.newIds = append(dctx.newIds, el.Id) dctx.newIds = append(dctx.newIds, el.Id)
} }
} }