some more refactoring
This commit is contained in:
		| @@ -84,16 +84,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	private void putEvent(TxEvent ev){ | 	private void putEvent(TxEvent ev){ | ||||||
| 		Long time = ev.getTime(); | 		events.put(ev.getTime(), ev); | ||||||
| 		if(events.containsKey(time)) { |  | ||||||
| 			IEvent[] oldV = events.get(time); |  | ||||||
| 			IEvent[] newV = new IEvent[oldV.length+1]; |  | ||||||
| 			System.arraycopy(oldV, 0, newV, 0, oldV.length); |  | ||||||
| 			newV[oldV.length]=ev; |  | ||||||
| 			events.put(time, newV); |  | ||||||
| 		} else { |  | ||||||
| 			events.put(time, new IEvent[] {ev}); |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	protected abstract Map<Integer, ITx> getTransactions(); | 	protected abstract Map<Integer, ITx> getTransactions(); | ||||||
|   | |||||||
| @@ -73,14 +73,7 @@ abstract class AbstractTxStream extends HierNode implements IWaveform { | |||||||
| 	 * @param evt the evt | 	 * @param evt the evt | ||||||
| 	 */ | 	 */ | ||||||
| 	public void addEvent(ITxEvent evt) { | 	public void addEvent(ITxEvent evt) { | ||||||
| 		if (!events.containsKey(evt.getTime())) | 		events.put(evt.getTime(), evt); | ||||||
| 			events.put(evt.getTime(), new IEvent[] { evt }); |  | ||||||
| 		else { |  | ||||||
| 			IEvent[] evts = events.get(evt.getTime()); |  | ||||||
| 			IEvent[] newEvts = Arrays.copyOf(evts, evts.length + 1); |  | ||||||
| 			newEvts[evts.length] = evt; |  | ||||||
| 			events.put(evt.getTime(), newEvts); |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/** | 	/** | ||||||
|   | |||||||
| @@ -67,15 +67,7 @@ public class VCDSignal<T extends IEvent> extends HierNode implements IWaveform { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	public void addSignalChange(Long time, T value){ | 	public void addSignalChange(Long time, T value){ | ||||||
| 		if(values.containsKey(time)) { | 		values.put(time, value); | ||||||
| 			IEvent[] oldV = values.get(time); |  | ||||||
| 			IEvent[] newV = new IEvent[oldV.length+1]; |  | ||||||
| 			System.arraycopy(oldV, 0, newV, 0, oldV.length); |  | ||||||
| 			newV[oldV.length]=value; |  | ||||||
| 			values.put(time, newV); |  | ||||||
| 		} else { |  | ||||||
| 			values.put(time, new IEvent[] {value}); |  | ||||||
| 		} |  | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
| 	@Override | 	@Override | ||||||
|   | |||||||
| @@ -1,5 +1,7 @@ | |||||||
| package com.minres.scviewer.database; | package com.minres.scviewer.database; | ||||||
|  |  | ||||||
|  | import java.util.Arrays; | ||||||
|  |  | ||||||
| public class EventEntry implements Comparable<EventEntry>{ | public class EventEntry implements Comparable<EventEntry>{ | ||||||
| 	public long timestamp; // unsigned | 	public long timestamp; // unsigned | ||||||
| 	public IEvent[] events = null; | 	public IEvent[] events = null; | ||||||
| @@ -25,4 +27,15 @@ public class EventEntry implements Comparable<EventEntry>{ | |||||||
| 	public String toString() { | 	public String toString() { | ||||||
| 		return String.format("e.%d@%d", events.length,timestamp); | 		return String.format("e.%d@%d", events.length,timestamp); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  |  | ||||||
|  | 	public void append(IEvent value) { | ||||||
|  | 		if(events.length==0) | ||||||
|  | 			events = new IEvent[] {value}; | ||||||
|  | 		else { | ||||||
|  | 			int idx = events.length; | ||||||
|  | 			events = Arrays.copyOf(events, idx+1); | ||||||
|  | 			events[idx]=value; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| package com.minres.scviewer.database; | package com.minres.scviewer.database; | ||||||
|  |  | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
|  | import java.util.Arrays; | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
| import java.util.Collections; | import java.util.Collections; | ||||||
|  |  | ||||||
| @@ -85,24 +86,23 @@ public class EventList  implements IEventList { | |||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
| 	public IEvent[] put(long key, IEvent[] value) { | 	public void put(long key, IEvent value) { | ||||||
| 		if(unmodifiable) throw new UnsupportedOperationException(); | 		if(unmodifiable) throw new UnsupportedOperationException(); | ||||||
| 		EventEntry e = new EventEntry(key, value); |  | ||||||
| 		if(store.size()==0 || store.get(store.size()-1).timestamp < key) { | 		if(store.size()==0 || store.get(store.size()-1).timestamp < key) { | ||||||
| 			store.add(e); | 			store.add(new EventEntry(key, new IEvent[] {value})); | ||||||
| 		} else { | 		} else { | ||||||
| 			int index = Collections.binarySearch(store, new EventEntry(key)); | 			int index = Collections.binarySearch(store, new EventEntry(key)); | ||||||
| 	        // < 0 if element is not in the list, see Collections.binarySearch | 	        // < 0 if element is not in the list, see Collections.binarySearch | ||||||
| 	        if (index < 0) { | 	        if (index < 0) { | ||||||
|  | 	    		EventEntry e = new EventEntry(key, new IEvent[] {value}); | ||||||
| 	        	index = -(index + 1); | 	        	index = -(index + 1); | ||||||
| 		        store.add(index, e); | 		        store.add(index, e); | ||||||
| 	        } else {  | 	        } else {  | ||||||
| 	            // Insertion index is index of existing element, to add new element behind it increase index | 	            // Insertion index is index of existing element, to add new element behind it increase index | ||||||
| 	        	store.set(index, e); | 	        	store.get(index).append(value); | ||||||
| 	        } | 	        } | ||||||
| 		} | 		} | ||||||
| 		end=store.size(); | 		end=store.size(); | ||||||
|         return e.events; |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	@Override | 	@Override | ||||||
|   | |||||||
| @@ -12,7 +12,7 @@ public interface IEventList extends Iterable<EventEntry> { | |||||||
|  |  | ||||||
| 	IEvent[] get(long key); | 	IEvent[] get(long key); | ||||||
|  |  | ||||||
| 	IEvent[] put(long key, IEvent[] value); | 	void put(long key, IEvent value); | ||||||
|  |  | ||||||
| 	long firstKey(); | 	long firstKey(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -12,7 +12,6 @@ import java.util.stream.Collectors; | |||||||
| import org.junit.Test; | import org.junit.Test; | ||||||
|  |  | ||||||
| import com.minres.scviewer.database.EventList; | import com.minres.scviewer.database.EventList; | ||||||
| import com.minres.scviewer.database.IEvent; |  | ||||||
| import com.minres.scviewer.database.IEventList; | import com.minres.scviewer.database.IEventList; | ||||||
|  |  | ||||||
| public class EventListTest { | public class EventListTest { | ||||||
| @@ -20,7 +19,7 @@ public class EventListTest { | |||||||
| 	EventList createList(int[] times) { | 	EventList createList(int[] times) { | ||||||
| 		EventList list = new EventList(); | 		EventList list = new EventList(); | ||||||
| 		for(int time: times) | 		for(int time: times) | ||||||
| 			list.put(time, new IEvent[] {}); | 			list.put(time, null); | ||||||
| 		return list; | 		return list; | ||||||
| 	} | 	} | ||||||
| 	 | 	 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user