Refactored database data model to improve speed and reduce memory

consumption
This commit is contained in:
2018-11-05 18:21:54 +01:00
parent e687eef42c
commit 93fd192782
29 changed files with 360 additions and 471 deletions

View File

@ -41,7 +41,7 @@ public class WaveformDb extends HierNode implements IWaveformDb {
private List<RelationType> relationTypes;
private Map<String, IWaveform<?>> waveforms;
private Map<String, IWaveform> waveforms;
private Long maxTime;
@ -61,7 +61,7 @@ public class WaveformDb extends HierNode implements IWaveformDb {
public WaveformDb() {
super();
waveforms = new HashMap<String, IWaveform<?>>();
waveforms = new HashMap<String, IWaveform>();
relationTypes=new ArrayList<>();
maxTime=0L;
}
@ -72,20 +72,20 @@ public class WaveformDb extends HierNode implements IWaveformDb {
}
@Override
public IWaveform<? extends IWaveformEvent> getStreamByName(String name) {
public IWaveform getStreamByName(String name) {
return waveforms.get(name);
}
@Override
public List<IWaveform<?>> getAllWaves() {
return new ArrayList<IWaveform<?>>(waveforms.values());
public List<IWaveform> getAllWaves() {
return new ArrayList<IWaveform>(waveforms.values());
}
@Override
public boolean load(File inp) throws Exception {
for(IWaveformDbLoader loader:loaders){
if(loader.load(this, inp)){
for(IWaveform<?> w:loader.getAllWaves()){
for(IWaveform w:loader.getAllWaves()){
waveforms.put(w.getFullName(),w);
}
if(loader.getMaxTime()>maxTime){
@ -125,8 +125,8 @@ public class WaveformDb extends HierNode implements IWaveformDb {
private void buildHierarchyNodes() throws InputFormatException{
childNodes= new ArrayList<IHierNode>();
for(IWaveform<?> stream:getAllWaves()){
updateMaxTime(stream);
for(IWaveform stream:getAllWaves()){
//updateMaxTime(stream);
String[] hier = stream.getName().split("\\.");
IHierNode node = this;
List<String> path=new LinkedList<String>();
@ -169,16 +169,6 @@ public class WaveformDb extends HierNode implements IWaveformDb {
}
}
private void updateMaxTime(IWaveform<?> waveform) {
Long last=0L;
if(waveform instanceof ITxStream<?> && ((ITxStream<?>)waveform).getEvents().lastEntry()!=null)
last=((ITxStream<?>)waveform).getEvents().lastEntry().getKey();
else if(waveform instanceof ISignal<?> && ((ISignal<?>)waveform).getEvents().lastEntry()!=null)
last=((ISignal<?>)waveform).getEvents().lastEntry().getKey();
if(last>maxTime)
maxTime=last;
}
private static String join(Collection<?> col, String delim) {
StringBuilder sb = new StringBuilder();
Iterator<?> iter = col.iterator();