package edu.brown.benchmark.tpce.generators;
import java.util.GregorianCalendar;
public class WheelTime {
private TWheelConfig wheelConfig;
private int cycles;
private int index;
public WheelTime( TWheelConfig pWheelConfig ){
wheelConfig = pWheelConfig;
cycles = 0;
index = 0;
}
public WheelTime( TWheelConfig pWheelConfig, int cycles, int index ){
wheelConfig = pWheelConfig;
this.cycles = cycles;
this.index = index;
}
public WheelTime( TWheelConfig pWheelConfig, GregorianCalendar base, GregorianCalendar now, int offset ){
wheelConfig = pWheelConfig ;
set( base , now );
add( offset );
}
public int getCycles(){
return cycles;
}
public int getIndex(){
return index;
}
public void add( int interval ){
cycles += interval / wheelConfig.getWheelSize();
index += interval % wheelConfig.getWheelSize();
if( index >= wheelConfig.getWheelSize() ){
cycles++;
index -= wheelConfig.getWheelSize();
}
}
public int offset( final WheelTime Time ){
int interval;
interval = ( cycles - Time.cycles ) * wheelConfig.getWheelSize();
interval += ( index - Time.index );
return( interval );
}
public void set( int cycles, int index ){
this.cycles = cycles;
this.index = index;
}
public void set( GregorianCalendar base, GregorianCalendar now ){
int offset;
offset = (int)(now.getTimeInMillis() - base.getTimeInMillis()) / wheelConfig.getWheelSize(); // convert based on wheel resolution
cycles = offset / wheelConfig.getWheelSize();
index = offset % wheelConfig.getWheelSize();
}
}
class TWheelConfig{
public static final int MaxWheelCycles = 999999999;
private int WheelSize;
private int WheelResolution;
TWheelConfig( int Size, int Resolution ){
WheelSize = Size;
WheelResolution = Resolution;
}
public int getWheelSize(){
return WheelSize;
}
public int getWheelResolution(){
return WheelResolution;
}
public void setWheelSize(int WheelSize){
this.WheelSize = WheelSize;
}
public void setWheelResolution(int WheelResolution){
this.WheelResolution = WheelResolution;
}
}