ctf: Introduce IEventDefinition
[deliverable/tracecompass.git] / ctf / org.eclipse.tracecompass.ctf.core / src / org / eclipse / tracecompass / ctf / core / trace / CTFTraceReader.java
index d6eed173ed329e050786f68e3923744a04e52c5e..9f2c45c7736a5d78f3d8ce129a43a591ffbdc8ad 100644 (file)
@@ -24,14 +24,11 @@ import java.util.PriorityQueue;
 import java.util.Set;
 
 import org.eclipse.tracecompass.ctf.core.CTFException;
-import org.eclipse.tracecompass.ctf.core.event.EventDefinition;
 import org.eclipse.tracecompass.ctf.core.event.IEventDeclaration;
+import org.eclipse.tracecompass.ctf.core.event.IEventDefinition;
 import org.eclipse.tracecompass.internal.ctf.core.Activator;
 import org.eclipse.tracecompass.internal.ctf.core.trace.StreamInputReaderTimestampComparator;
 
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSet.Builder;
-
 /**
  * A CTF trace reader. Reads the events of a trace.
  *
@@ -116,11 +113,8 @@ public class CTFTraceReader implements AutoCloseable {
          */
         fStartTime = 0;
         if (hasMoreEvents()) {
-            EventDefinition currentEvent = getTopStream().getCurrentEvent();
-            if (currentEvent != null) {
-                fStartTime = currentEvent.getTimestamp();
-                setEndTime(fStartTime);
-            }
+            fStartTime = checkNotNull(getTopStream().getCurrentEvent()).getTimestamp();
+            setEndTime(fStartTime);
         }
     }
 
@@ -207,7 +201,7 @@ public class CTFTraceReader implements AutoCloseable {
         /*
          * For each stream.
          */
-        for (CTFStream stream : fTrace.getStreams()) {
+        for (ICTFStream stream : fTrace.getStreams()) {
             Set<CTFStreamInput> streamInputs = stream.getStreamInputs();
 
             /*
@@ -246,21 +240,21 @@ public class CTFTraceReader implements AutoCloseable {
      */
     public void update() throws CTFException {
         Set<CTFStreamInputReader> readers = new HashSet<>();
-        for (CTFStream stream : fTrace.getStreams()) {
+        for (ICTFStream stream : fTrace.getStreams()) {
             Set<CTFStreamInput> streamInputs = stream.getStreamInputs();
             for (CTFStreamInput streamInput : streamInputs) {
                 /*
-                 * Create a reader.
-                 */
-                CTFStreamInputReader streamInputReader = new CTFStreamInputReader(checkNotNull(streamInput));
-
-                /*
-                 * Add it to the group.
+                 * Create a reader to check if it already exists in the list. If it doesn't, add it.
                  */
-                if (!fStreamInputReaders.contains(streamInputReader)) {
-                    streamInputReader.readNextEvent();
-                    fStreamInputReaders.add(streamInputReader);
-                    readers.add(streamInputReader);
+                try (CTFStreamInputReader streamInputReader = new CTFStreamInputReader(checkNotNull(streamInput))) {
+                    if (!fStreamInputReaders.contains(streamInputReader)) {
+                        CTFStreamInputReader streamInputReaderToAdd = new CTFStreamInputReader(checkNotNull(streamInput));
+                        streamInputReaderToAdd.readNextEvent();
+                        fStreamInputReaders.add(streamInputReaderToAdd);
+                        readers.add(streamInputReaderToAdd);
+                    }
+                } catch (IOException e) {
+                    Activator.logError(e.getMessage(), e);
                 }
             }
         }
@@ -280,11 +274,12 @@ public class CTFTraceReader implements AutoCloseable {
      * @return the iterable of the stream input readers
      */
     public Iterable<IEventDeclaration> getEventDeclarations() {
-        ImmutableSet.Builder<IEventDeclaration> builder = new Builder<>();
+        Set<IEventDeclaration> retSet = new HashSet<>();
         for (CTFStreamInputReader sir : fStreamInputReaders) {
-            builder.addAll(sir.getEventDeclarations());
+            retSet.addAll(sir.getEventDeclarations());
         }
-        return builder.build();
+        retSet.remove(null);
+        return retSet;
     }
 
     /**
@@ -334,8 +329,9 @@ public class CTFTraceReader implements AutoCloseable {
      *
      * @return An event definition, or null of the trace reader reached the end
      *         of the trace.
+     * @since 2.0
      */
-    public EventDefinition getCurrentEventDef() {
+    public IEventDefinition getCurrentEventDef() {
         CTFStreamInputReader top = getTopStream();
         return (top != null) ? top.getCurrentEvent() : null;
     }
@@ -372,7 +368,7 @@ public class CTFTraceReader implements AutoCloseable {
              * We're in OK, there's a guaranteed top#getCurrentEvent() unless another
              * thread does something bad.
              */
-            EventDefinition currentEvent = checkNotNull(top.getCurrentEvent());
+            IEventDefinition currentEvent = checkNotNull(top.getCurrentEvent());
             final long topEnd = fTrace.timestampCyclesToNanos(currentEvent.getTimestamp());
             setEndTime(Math.max(topEnd, getEndTime()));
             fEventCountPerTraceFile[top.getName()]++;
This page took 0.026888 seconds and 5 git commands to generate.