in backend/new.js [362:413]
function updateBlockMetadata(block, actorIds) {
block.bloom = new Uint8Array(BLOOM_FILTER_SIZE)
block.lastKey = {}
block.numVisible = {}
block.numOps = 0
block.lastObjectActor = undefined
block.lastObjectCtr = undefined
block.firstVisibleActor = undefined
block.firstVisibleCtr = undefined
block.lastVisibleActor = undefined
block.lastVisibleCtr = undefined
for (let col of block.columns) col.decoder.reset()
const [objActorD, objCtrD, keyActorD, keyCtrD, keyStrD, idActorD, idCtrD, insertD, /* actionD */,
/* valLenD */, /* valRawD */, /* chldActorD */, /* chldCtrD */, succNumD] = block.columns.map(col => col.decoder)
while (!idCtrD.done) {
block.numOps += 1
const objActor = objActorD.readValue(), objCtr = objCtrD.readValue()
const keyActor = keyActorD.readValue(), keyCtr = keyCtrD.readValue(), keyStr = keyStrD.readValue()
const idActor = idActorD.readValue(), idCtr = idCtrD.readValue()
const insert = insertD.readValue(), succNum = succNumD.readValue()
const objectId = objActor === null ? '_root' : `${objCtr}@${actorIds[objActor]}`
if (objActor !== null && objCtr !== null) {
block.lastObjectActor = objActor
block.lastObjectCtr = objCtr
}
if (keyStr !== null) {
// Map key: for each object, record the highest key contained in the block
block.lastKey[objectId] = keyStr
} else if (insert || keyCtr !== null) {
// List element
if (block.numVisible[objectId] === undefined) block.numVisible[objectId] = 0
const elemIdActor = insert ? idActor : keyActor
const elemIdCtr = insert ? idCtr : keyCtr
bloomFilterAdd(block.bloom, elemIdActor, elemIdCtr)
// If the list element is visible, update the block metadata accordingly
if (succNum === 0) {
if (block.firstVisibleActor === undefined) block.firstVisibleActor = elemIdActor
if (block.firstVisibleCtr === undefined) block.firstVisibleCtr = elemIdCtr
if (block.lastVisibleActor !== elemIdActor || block.lastVisibleCtr !== elemIdCtr) {
block.numVisible[objectId] += 1
}
block.lastVisibleActor = elemIdActor
block.lastVisibleCtr = elemIdCtr
}
}
}
}