in backend/new.js [418:445]
function addBlockOperation(block, op, objectId, actorIds, isChangeOp) {
// Keep track of the largest objectId contained within a block
if (op[objActorIdx] !== null && op[objCtrIdx] !== null &&
(block.lastObjectCtr === undefined || block.lastObjectCtr < op[objCtrIdx] ||
(block.lastObjectCtr === op[objCtrIdx] && actorIds[block.lastObjectActor] < actorIds[op[objActorIdx]]))) {
block.lastObjectActor = op[objActorIdx]
block.lastObjectCtr = op[objCtrIdx]
}
if (op[keyStrIdx] !== null) {
// TODO this comparison should use UTF-8 encoding, not JavaScript's UTF-16
if (block.lastKey[objectId] === undefined || block.lastKey[objectId] < op[keyStrIdx]) {
block.lastKey[objectId] = op[keyStrIdx]
}
} else {
// List element
const elemIdActor = op[insertIdx] ? op[idActorIdx] : op[keyActorIdx]
const elemIdCtr = op[insertIdx] ? op[idCtrIdx] : op[keyCtrIdx]
bloomFilterAdd(block.bloom, elemIdActor, elemIdCtr)
if (op[succNumIdx] === 0 || isChangeOp) {
if (block.firstVisibleActor === undefined) block.firstVisibleActor = elemIdActor
if (block.firstVisibleCtr === undefined) block.firstVisibleCtr = elemIdCtr
block.lastVisibleActor = elemIdActor
block.lastVisibleCtr = elemIdCtr
}
}
}