mirror of
https://github.com/yjs/yjs.git
synced 2025-12-16 11:47:46 +01:00
[idmap/idset] implement forEach and perf improvement on diffingAttributionManager
This commit is contained in:
@@ -175,8 +175,20 @@ export class DiffAttributionManager {
|
|||||||
this._prevBOH = prevDoc.on('beforeObserverCalls', tr => {
|
this._prevBOH = prevDoc.on('beforeObserverCalls', tr => {
|
||||||
insertIntoIdSet(_prevDocInserts, tr.insertSet)
|
insertIntoIdSet(_prevDocInserts, tr.insertSet)
|
||||||
insertIntoIdSet(prevDocDeletes, tr.deleteSet)
|
insertIntoIdSet(prevDocDeletes, tr.deleteSet)
|
||||||
this.inserts = diffIdMap(this.inserts, tr.insertSet)
|
if (tr.insertSet.clients.size < 2) {
|
||||||
this.deletes = diffIdMap(this.deletes, tr.deleteSet)
|
tr.insertSet.forEach((idrange, client) => {
|
||||||
|
this.inserts.delete(client, idrange.clock, idrange.len)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.inserts = diffIdMap(this.inserts, tr.insertSet)
|
||||||
|
}
|
||||||
|
if (tr.deleteSet.clients.size < 2) {
|
||||||
|
tr.deleteSet.forEach((attrRange, client) => {
|
||||||
|
this.deletes.delete(client, attrRange.clock, attrRange.len)
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
this.deletes = diffIdMap(this.deletes, tr.deleteSet)
|
||||||
|
}
|
||||||
// @todo fire update ranges on `tr.insertSet` and `tr.deleteSet`
|
// @todo fire update ranges on `tr.insertSet` and `tr.deleteSet`
|
||||||
})
|
})
|
||||||
this._destroyHandler = nextDoc.on('destroy', this.destroy.bind(this))
|
this._destroyHandler = nextDoc.on('destroy', this.destroy.bind(this))
|
||||||
|
|||||||
@@ -321,6 +321,17 @@ export class IdMap {
|
|||||||
this.attrs = new Set()
|
this.attrs = new Set()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {(attrRange:AttrRange<Attrs>, client:number) => void} f
|
||||||
|
*/
|
||||||
|
forEach (f) {
|
||||||
|
this.clients.forEach((ranges, client) => {
|
||||||
|
ranges.getIds().forEach((range) => {
|
||||||
|
f(range, client)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ID} id
|
* @param {ID} id
|
||||||
* @return {boolean}
|
* @return {boolean}
|
||||||
|
|||||||
@@ -113,6 +113,17 @@ export class IdSet {
|
|||||||
this.clients = new Map()
|
this.clients = new Map()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {(idrange:IdRange, client:number) => void} f
|
||||||
|
*/
|
||||||
|
forEach (f) {
|
||||||
|
this.clients.forEach((ranges, client) => {
|
||||||
|
ranges.getIds().forEach((range) => {
|
||||||
|
f(range, client)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {ID} id
|
* @param {ID} id
|
||||||
* @return {boolean}
|
* @return {boolean}
|
||||||
|
|||||||
Reference in New Issue
Block a user