in src/main/java/com/twitter/sbf/core/SparseBinaryMatrix.java [393:430]
void updateRow(int rowId, int[] newRow) {
int oldHead = 0;
int newHead = 0;
int[] oldRow = this.rows[rowId];
while (oldHead < oldRow.length && newHead < newRow.length) {
int oldColId = oldRow[oldHead];
int newColId = newRow[newHead];
if (oldColId < newColId) {
synchronized (this.getColumn(oldColId)) {
this.getColumn(oldColId).remove(rowId);
}
oldHead++;
} else if (oldColId > newColId) {
synchronized (this.getColumn(newColId)) {
this.getColumn(newColId).add(rowId);
}
newHead++;
} else {
oldHead++;
newHead++;
}
}
while (oldHead < oldRow.length) {
int oldColId = oldRow[oldHead];
synchronized (this.getColumn(oldColId)) {
this.getColumn(oldColId).remove(rowId);
}
oldHead++;
}
while (newHead < newRow.length) {
int newColId = newRow[newHead];
synchronized (this.getColumn(newColId)) {
this.getColumn(newColId).add(rowId);
}
newHead++;
}
this.rows[rowId] = newRow;
}