// Path: src/main/java/org/deri/cqels/lang/cqels/Duration.java
// public class Duration {
// 	long nanoTime;
// 	String str;
// 	public Duration(){
// 		
// 	}
// 	
// 	public Duration(String str){
// 		this.str=str;
// 		nanoTime=parse(str);
// 		//System.out.println("window time "+nanoTime);
// 	}
// 	
// 	private long parse(String str){
// 		//System.out.println("window "+str);
// 		String number="0"; long unit=0;
// 		int l=str.length()-1;
// 		if(str.charAt(l)=='s'){
// 			if(str.charAt(l-1)=='m'){
// 				number=str.substring(0, l-1);
// 				unit=(long)1E6;
// 			}else if(str.charAt(l-1)=='n'){
// 				number=str.substring(0, l-1);
// 				unit=1;
// 			}
// 			else{
// 				number=str.substring(0, l);
// 				unit=(long)1E9;
// 			}
// 		}
// 		else if(str.charAt(l)=='m'){
// 			number=str.substring(0, l);
// 			unit=(long)60E9;
// 		}
// 		else if(str.charAt(l)=='h'){
// 			number=str.substring(0, l-1);
// 			unit=(long)3600E9;
// 		}
// 		else if(str.charAt(l)=='d'){
// 			number=str.substring(0, l-1);
// 			unit=((long)3600E9)*24;
// 		}
// 		
// 		return Long.parseLong(number)*unit;
// 	}
// 	public long inNanosec(){
// 		return nanoTime;
// 	}
// }
// 
// Path: src/main/java/org/deri/cqels/lang/cqels/DurationSet.java
// public class DurationSet {
// 	ArrayList<Duration> durations;
// 	public DurationSet(){
// 		durations= new ArrayList<Duration>();
// 	}
// 	public  void add(Duration duration){
// 		durations.add(duration);
// 	}
// 	
// 	public long inNanoSec(){
// 		long nano=0;
// 		for(Duration duration:durations)
// 			nano+=duration.inNanosec();
// 		
// 		return nano;
// 			
// 	}
// }


import java.util.Timer;
import org.deri.cqels.lang.cqels.Duration;
import org.deri.cqels.lang.cqels.DurationSet;
import com.sleepycat.bind.tuple.LongBinding;
import com.sleepycat.je.Cursor;
import com.sleepycat.je.CursorConfig;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.LockMode;
import com.sleepycat.je.OperationStatus;
package org.deri.cqels.engine;



/** 
 * This class implements the time-based window 
 * @author		Danh Le Phuoc
 * @author 		Chan Le Van
 * @organization DERI Galway, NUIG, Ireland  www.deri.ie
 * @email 	danh.lephuoc@deri.org
 * @email   chan.levan@deri.org
 */
public class RangeWindow implements Window {
	volatile Database buff;
    long w;
    long slide;
    long wInMili;
    long sInMili;
    long lastTimestamp = -1;
    Timer timer;
    long timeout = 3600000;
    long start  = -1;
    public RangeWindow( long w) {
    	this.w = w;
		timer = new Timer();  
		slide = 0;
    }
    
    public RangeWindow(long w, long slide) {
    	this.w = w; 
    	this.slide = slide;
    	this.wInMili = (long)(this.w / 1E6);
		this.sInMili = (long)(this.slide / 1E6);
		timer = new Timer();    
    }
	
// Path: src/main/java/org/deri/cqels/lang/cqels/Duration.java
// public class Duration {
// 	long nanoTime;
// 	String str;
// 	public Duration(){
// 		
// 	}
// 	
// 	public Duration(String str){
// 		this.str=str;
// 		nanoTime=parse(str);
// 		//System.out.println("window time "+nanoTime);
// 	}
// 	
// 	private long parse(String str){
// 		//System.out.println("window "+str);
// 		String number="0"; long unit=0;
// 		int l=str.length()-1;
// 		if(str.charAt(l)=='s'){
// 			if(str.charAt(l-1)=='m'){
// 				number=str.substring(0, l-1);
// 				unit=(long)1E6;
// 			}else if(str.charAt(l-1)=='n'){
// 				number=str.substring(0, l-1);
// 				unit=1;
// 			}
// 			else{
// 				number=str.substring(0, l);
// 				unit=(long)1E9;
// 			}
// 		}
// 		else if(str.charAt(l)=='m'){
// 			number=str.substring(0, l);
// 			unit=(long)60E9;
// 		}
// 		else if(str.charAt(l)=='h'){
// 			number=str.substring(0, l-1);
// 			unit=(long)3600E9;
// 		}
// 		else if(str.charAt(l)=='d'){
// 			number=str.substring(0, l-1);
// 			unit=((long)3600E9)*24;
// 		}
// 		
// 		return Long.parseLong(number)*unit;
// 	}
// 	public long inNanosec(){
// 		return nanoTime;
// 	}
// }
// 
// Path: src/main/java/org/deri/cqels/lang/cqels/DurationSet.java
// public class DurationSet {
// 	ArrayList<Duration> durations;
// 	public DurationSet(){
// 		durations= new ArrayList<Duration>();
// 	}
// 	public  void add(Duration duration){
// 		durations.add(duration);
// 	}
// 	
// 	public long inNanoSec(){
// 		long nano=0;
// 		for(Duration duration:durations)
// 			nano+=duration.inNanosec();
// 		
// 		return nano;
// 			
// 	}
// }


// Path: src/main/java/org/deri/cqels/engine/RangeWindow.java
import java.util.Timer;
import org.deri.cqels.lang.cqels.Duration;
import org.deri.cqels.lang.cqels.DurationSet;
import com.sleepycat.bind.tuple.LongBinding;
import com.sleepycat.je.Cursor;
import com.sleepycat.je.CursorConfig;
import com.sleepycat.je.Database;
import com.sleepycat.je.DatabaseEntry;
import com.sleepycat.je.LockMode;
import com.sleepycat.je.OperationStatus;

package org.deri.cqels.engine;



/** 
 * This class implements the time-based window 
 * @author		Danh Le Phuoc
 * @author 		Chan Le Van
 * @organization DERI Galway, NUIG, Ireland  www.deri.ie
 * @email 	danh.lephuoc@deri.org
 * @email   chan.levan@deri.org
 */
public class RangeWindow implements Window {
	volatile Database buff;
    long w;
    long slide;
    long wInMili;
    long sInMili;
    long lastTimestamp = -1;
    Timer timer;
    long timeout = 3600000;
    long start  = -1;
    public RangeWindow( long w) {
    	this.w = w;
		timer = new Timer();  
		slide = 0;
    }
    
    public RangeWindow(long w, long slide) {
    	this.w = w; 
    	this.slide = slide;
    	this.wInMili = (long)(this.w / 1E6);
		this.sInMili = (long)(this.slide / 1E6);
		timer = new Timer();    
    }
	
	public RangeWindow(DurationSet durations, Duration slideDuration) {