package com.activequant.timeseries;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author GhostRider
*
* @param <T>
*/
public abstract class TypedColumn<T> extends ArrayList<T> {
/**
*
*/
private static final long serialVersionUID = 1L;
private boolean dirty = false;
private boolean lastObjectDirty = false;
private int lastRowIndex = 0;
private T lastObject = null;
public TypedColumn(List list) {
super(list);
}
public TypedColumn() {
super();
dirty = true;
lastObjectDirty = true;
}
public TypedColumn(ArrayList column) {
super(column);
dirty = true;
lastObjectDirty = true;
}
/**
* Overwrite null with a value.
*
* @param value
*/
public void replaceNull(T value) {
for (int i = 0; i < super.size(); i++) {
if (super.get(i) == null)
super.set(i, value);
}
dirty = true;
lastObjectDirty = true;
}
public void add(int targetIndex, T value) {
super.add(targetIndex, value);
dirty = true;
lastObjectDirty = true;
lastRowIndex = this.size() - 1;
}
public boolean add(T value) {
boolean ret = super.add(value);
dirty = true;
lastObjectDirty = true;
lastRowIndex = this.size() - 1;
return ret;
}
public T get(int row) {
if (row == (lastRowIndex)) {
if (lastObjectDirty) {
lastObject = super.get(lastRowIndex);
lastObjectDirty = false;
}
return lastObject;
}
return super.get(row);
}
public T set(int row, T value) {
T t = super.set(row, value);
dirty = true;
if(row==lastRowIndex){
lastObject = value;
lastObjectDirty = false;
}
return t;
}
public boolean isDirty() {
return dirty;
}
public void setClean() {
dirty = false;
}
}