updates time scale handling
This commit is contained in:
		@@ -25,6 +25,7 @@ import com.minres.scviewer.database.DoubleVal;
 | 
			
		||||
import com.minres.scviewer.database.EventList;
 | 
			
		||||
import com.minres.scviewer.database.IEventList;
 | 
			
		||||
import com.minres.scviewer.database.IWaveform;
 | 
			
		||||
import com.minres.scviewer.database.IWaveformDb;
 | 
			
		||||
import com.minres.scviewer.database.IWaveformDbLoader;
 | 
			
		||||
import com.minres.scviewer.database.InputFormatException;
 | 
			
		||||
import com.minres.scviewer.database.RelationType;
 | 
			
		||||
@@ -45,17 +46,17 @@ public class FstDbLoader implements IWaveformDbLoader, IFstDatabaseBuilder {
 | 
			
		||||
	/** The max time. */
 | 
			
		||||
	private long maxTime;
 | 
			
		||||
 | 
			
		||||
	private int timeScale;
 | 
			
		||||
	private long timeScaleFactor;
 | 
			
		||||
	
 | 
			
		||||
	/** The pcs. */
 | 
			
		||||
	protected PropertyChangeSupport pcs = new PropertyChangeSupport(this);
 | 
			
		||||
 | 
			
		||||
    static int calculateTimescaleMultipierPower(int power){
 | 
			
		||||
    	int answer = 1;
 | 
			
		||||
        if(power<=0){
 | 
			
		||||
    static long calculateTimescaleMultipierPower(long time_scale){
 | 
			
		||||
    	long answer = 1;
 | 
			
		||||
        if(time_scale<=0){
 | 
			
		||||
            return answer;
 | 
			
		||||
        } else{
 | 
			
		||||
            for(int i = 1; i<= power; i++)
 | 
			
		||||
            for(int i = 1; i<= time_scale; i++)
 | 
			
		||||
                answer *= 10;
 | 
			
		||||
            return answer;
 | 
			
		||||
        }
 | 
			
		||||
@@ -94,7 +95,7 @@ public class FstDbLoader implements IWaveformDbLoader, IFstDatabaseBuilder {
 | 
			
		||||
	 */
 | 
			
		||||
	@Override
 | 
			
		||||
	public long getMaxTime() {
 | 
			
		||||
		return maxTime*calculateTimescaleMultipierPower(15+timeScale); // timescape is 1e(timeScale), we calculate in fs
 | 
			
		||||
		return maxTime;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* (non-Javadoc)
 | 
			
		||||
@@ -149,8 +150,9 @@ public class FstDbLoader implements IWaveformDbLoader, IFstDatabaseBuilder {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void setMaxTime(long maxTime, int timeScale) {
 | 
			
		||||
		this.maxTime = maxTime;
 | 
			
		||||
		this.timeScale=timeScale;	
 | 
			
		||||
		long eff_time_scale=timeScale-IWaveformDb.databaseTimeScale;
 | 
			
		||||
		this.timeScaleFactor = calculateTimescaleMultipierPower(eff_time_scale);
 | 
			
		||||
		this.maxTime = maxTime*timeScaleFactor;
 | 
			
		||||
	}	
 | 
			
		||||
	/* (non-Javadoc)
 | 
			
		||||
	 * @see com.minres.scviewer.database.IWaveformDbLoader#getAllRelationTypes()
 | 
			
		||||
@@ -182,6 +184,6 @@ public class FstDbLoader implements IWaveformDbLoader, IFstDatabaseBuilder {
 | 
			
		||||
 | 
			
		||||
	public void getEvents(int id, int width, IEventList values) {
 | 
			
		||||
		if(values instanceof EventList)
 | 
			
		||||
			parser.getValueChanges(id, width, calculateTimescaleMultipierPower(15+timeScale), (EventList) values);
 | 
			
		||||
			parser.getValueChanges(id, width, timeScaleFactor, (EventList) values);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -37,7 +37,7 @@ class FstFileParser {
 | 
			
		||||
	    	System.out.println(version);
 | 
			
		||||
	    	long endTime = FstLibrary.fstReaderGetEndTime(fst);
 | 
			
		||||
	    	byte timeScale = FstLibrary.fstReaderGetTimescale(fst);
 | 
			
		||||
	    	builder.setMaxTime(endTime, timeScale);
 | 
			
		||||
	    	builder.setMaxTime(endTime, -timeScale);
 | 
			
		||||
	    	FstLibrary.fstReaderIterateHierRewind(fst);
 | 
			
		||||
	    	Pointer p = FstLibrary.fstReaderIterateHier(fst);
 | 
			
		||||
	    	while(p!=null && !p.equals(Pointer.NULL)) {
 | 
			
		||||
@@ -77,7 +77,7 @@ class FstFileParser {
 | 
			
		||||
	    	return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public void getValueChanges(final int id, final int width, int timeScale, final EventList values) {
 | 
			
		||||
	public void getValueChanges(final int id, final int width, long timeScale, final EventList values) {
 | 
			
		||||
		FstLibrary.fstReaderClrFacProcessMaskAll(fst);
 | 
			
		||||
		FstLibrary.fstReaderSetFacProcessMask(fst, id);
 | 
			
		||||
		FstLibrary.iterateValueChanges(fst, new ValueChangeCallback() {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user