content: /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   *
   *    http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package org.apache.carbondata.core.scan.result.vector;
  
  import java.util.Arrays;
  
  public class CarbonColumnarBatch {
  
    public CarbonColumnVector[] columnVectors;
  
    private int batchSize;
  
    private int actualSize;
  
    private int rowCounter;
  
    private boolean[] filteredRows;
  
    private int rowsFiltered;
  
    /**
     * Carbon Data file written version
     */
    private String carbonDataFileWrittenVersion = null;
  
    public CarbonColumnarBatch(CarbonColumnVector[] columnVectors, int batchSize,
        boolean[] filteredRows) {
      this.columnVectors = columnVectors;
      this.batchSize = batchSize;
      this.filteredRows = filteredRows;
    }
  
    public boolean[] getFilteredRows() {
      return filteredRows;
    }
  
    public int getBatchSize() {
      return batchSize;
    }
  
    public int getActualSize() {
      return actualSize;
    }
  
    public void setActualSize(int actualSize) {
      this.actualSize = actualSize;
    }
  
    public void reset() {
      actualSize = 0;
      rowCounter = 0;
      rowsFiltered = 0;
      if (filteredRows != null) {
        Arrays.fill(filteredRows, false);
      }
      for (int i = 0; i < columnVectors.length; i++) {
        columnVectors[i].reset();
      }
    }
  
    public int getRowCounter() {
      return rowCounter;
    }
  
    public void setRowCounter(int rowCounter) {
      this.rowCounter = rowCounter;
    }
  
    /**
     * Mark the rows as filtered first before filling the batch, so that these rows will not be added
     * to vector batches.
     * @param rowId
     */
    public void markFiltered(int rowId) {
      if (!filteredRows[rowId]) {
        filteredRows[rowId] = true;
        rowsFiltered++;
      }
      if (rowsFiltered == 1) {
        for (int i = 0; i < columnVectors.length; i++) {
          columnVectors[i].setFilteredRowsExist(true);
        }
      }
    }
  
    public String getCarbonDataFileWrittenVersion() {
      return carbonDataFileWrittenVersion;
    }
  
    public void setCarbonDataFileWrittenVersion(String carbonDataFileWrittenVersion) {
      this.carbonDataFileWrittenVersion = carbonDataFileWrittenVersion;
    }
  }
  