private boolean fill(
      long startRowIndex,
      int i,
      boolean[] isNull,
      Column timeColumn,
      Column valueColumn,
      Object array) {
    long currentRowIndex = startRowIndex + i;
    prepareForNextValueInCurrentColumn(currentRowIndex, i + 1, timeColumn, valueColumn);
    // we don't fill it, if previous value or next value or time column is null
    if (previousIsNull || timeColumn.isNull(i) || nextIsNull(currentRowIndex)) {
      isNull[i] = true;
      return true;
    } else {
      // fill value using previous and next value
      // factor is (x - x0) / (x1 - x0)
      double factor = getFactor(timeColumn.getLong(i));
      fillValue(array, i, factor);
      return false;
    }
  }
The result of Linear Fill functions at timestamp "T" is calculated by performing a linear fitting
method on two time series values, one is at the closest timestamp before T, and the other is at
the closest timestamp after T. Linear Fill function calculation only supports numeric types
including long, int, double and float.
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/fill/linear/LinearFill.java