package org.shanbo.feluca.model;
import org.shanbo.feluca.model.FloatObjects.OneDegree;
import org.shanbo.feluca.model.FloatObjects.TwoDegree;
/**
* using a float window
* implementation for batch job
* @author lgn
*
* @param <T>
*/
public abstract class FloatSumBarrier<T extends FloatObjects > {
Object[] values;
protected FloatWindow window;
public FloatSumBarrier(int capacity, FloatObjects value){
window = new FloatWindow(capacity, value.getObjectSize());
values = new Object[capacity];
for(int i = 0 ; i < capacity; i++){
FloatObjects copy = value.copy();
values[i] = copy;
window.init(i, copy.getArray());
}
}
public void reset(){
window.reset();
}
public T get(int ith ){
if (ith >= values.length || ith < 0){
throw new IndexOutOfBoundsException();
}
window.set(ith);
return (T)(values[ith]);
}
public abstract void call() ;
public static void main(String[] args) {
FloatSumBarrier<TwoDegree> aa = new FloatSumBarrier<TwoDegree>
(10,new TwoDegree(3)){public void call() {}} ;
aa.get(0).setOne(1).setSigmaX(0, 4).setSigmaX(1, 1);
aa.get(2).setSigmaX2(0, 2).setSigmaX(0, 1);
float[][] zip = FloatWindow.clone(aa.window.zip());
zip[1][0] = 10;
zip[1][1] = 110;
zip[1][2] = 1120;
zip[2][0] = 88;
zip[2][3] = 88;
zip[2][6] = 88;
System.out.println(FloatWindow.toString(aa.window.zip()));
System.out.println(aa.window);
aa.window.unzipAndSet(zip);
System.out.println(aa.window);
System.out.println("=====");
FloatSumBarrier<OneDegree> bb = new FloatSumBarrier<OneDegree>
(10,new OneDegree()) {public void call() {}} ;
bb.get(0).set(5);
bb.get(6).set(11);
System.out.println(bb.window);
zip = bb.window.zip();
System.out.println(FloatWindow.toString(zip));
zip = FloatWindow.clone(zip);
zip[1][2] = 3;
zip[1][5] = 31;
bb.window.unzipAndSet(zip);
System.out.println(bb.window);
}
}