blob: 8c224b48f2b7fdb0588ccef6a7c89b5f2e007821 [file] [log] [blame]
/*
* 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.iotdb.db.utils.windowing.window;
import org.apache.iotdb.db.utils.windowing.api.Window;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.utils.Binary;
import org.apache.tsfile.write.UnSupportedDataTypeException;
public class WindowImpl implements Window {
private final int size;
private final TSDataType dataType;
private long[] timestamps = null;
private int[] intValues = null;
private long[] longValues = null;
private float[] floatValues = null;
private double[] doubleValues = null;
private boolean[] booleanValues = null;
private Binary[] binaryValues = null;
public WindowImpl(EvictableBatchList list, int begin, int size) {
this.size = size;
dataType = list.getDataType();
init(list, begin);
}
private void init(EvictableBatchList list, int begin) {
timestamps = new long[size];
for (int i = 0; i < size; ++i) {
timestamps[i] = list.getTimeByIndex(begin + i);
}
switch (dataType) {
case INT32:
intValues = new int[size];
for (int i = 0; i < size; ++i) {
intValues[i] = list.getIntByIndex(begin + i);
}
break;
case INT64:
longValues = new long[size];
for (int i = 0; i < size; ++i) {
longValues[i] = list.getLongByIndex(begin + i);
}
break;
case FLOAT:
floatValues = new float[size];
for (int i = 0; i < size; ++i) {
floatValues[i] = list.getFloatByIndex(begin + i);
}
break;
case DOUBLE:
doubleValues = new double[size];
for (int i = 0; i < size; ++i) {
doubleValues[i] = list.getDoubleByIndex(begin + i);
}
break;
case BOOLEAN:
booleanValues = new boolean[size];
for (int i = 0; i < size; ++i) {
booleanValues[i] = list.getBooleanByIndex(begin + i);
}
break;
case TEXT:
binaryValues = new Binary[size];
for (int i = 0; i < size; ++i) {
binaryValues[i] = list.getBinaryByIndex(begin + i);
}
break;
default:
throw new UnSupportedDataTypeException(dataType.toString());
}
}
@Override
public int size() {
return size;
}
@Override
public TSDataType getDataType() {
return dataType;
}
@Override
public long getTime(int index) {
return timestamps[index];
}
@Override
public int getInt(int index) {
return intValues[index];
}
@Override
public long getLong(int index) {
return longValues[index];
}
@Override
public float getFloat(int index) {
return floatValues[index];
}
@Override
public double getDouble(int index) {
return doubleValues[index];
}
@Override
public boolean getBoolean(int index) {
return booleanValues[index];
}
@Override
public Binary getBinary(int index) {
return binaryValues[index];
}
@Override
public long[] getTimeArray() {
return timestamps;
}
@Override
public int[] getIntArray() {
return intValues;
}
@Override
public long[] getLongArray() {
return longValues;
}
@Override
public float[] getFloatArray() {
return floatValues;
}
@Override
public double[] getDoubleArray() {
return doubleValues;
}
@Override
public boolean[] getBooleanArray() {
return booleanValues;
}
@Override
public Binary[] getBinaryArray() {
return binaryValues;
}
@Override
public void setInt(int index, int value) {
intValues[index] = value;
}
@Override
public void setLong(int index, long value) {
longValues[index] = value;
}
@Override
public void setFloat(int index, float value) {
floatValues[index] = value;
}
@Override
public void setDouble(int index, double value) {
doubleValues[index] = value;
}
@Override
public void setBoolean(int index, boolean value) {
booleanValues[index] = value;
}
@Override
public void setBinary(int index, Binary value) {
binaryValues[index] = value;
}
}