void updateRow()

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;
  }