Python bindings: add has_intersection property to TraceCollection
[babeltrace.git] / bindings / python / reader.py
index 52a516705acc339b6d8c4173a038d34191354b2a..bb3d92811b71f3c4e631deeb37df09536f275ded 100644 (file)
@@ -45,12 +45,13 @@ class TraceCollection:
     trace from a trace collection.
     """
 
-    def __init__(self):
+    def __init__(self, intersect_mode=False):
         """
         Creates an empty trace collection.
         """
 
         self._tc = nbt._bt_context_create()
+        self._intersect_mode = intersect_mode
 
     def __del__(self):
         nbt._bt_context_put(self._tc)
@@ -132,6 +133,14 @@ class TraceCollection:
         except AttributeError:
             raise TypeError("in remove_trace, argument 2 must be a TraceHandle instance")
 
+    @property
+    def intersect_mode(self):
+        return self._intersect_mode
+
+    @property
+    def has_intersection(self):
+        return nbt._bt_python_has_intersection(self._tc)
+
     @property
     def events(self):
         """
@@ -147,14 +156,16 @@ class TraceCollection:
 
         begin_pos_ptr = nbt._bt_python_create_iter_pos()
         end_pos_ptr = nbt._bt_python_create_iter_pos()
-        begin_pos_ptr.type = nbt.SEEK_BEGIN
-        end_pos_ptr.type = nbt.SEEK_LAST
+
+        if not self.intersect_mode:
+            begin_pos_ptr.type = nbt.SEEK_BEGIN
+            end_pos_ptr.type = nbt.SEEK_LAST
 
         for event in self._events(begin_pos_ptr, end_pos_ptr):
             yield event
 
-        nbt._bt_iter_free_pos(begin_pos_ptr);
-        nbt._bt_iter_free_pos(end_pos_ptr);
+        nbt._bt_iter_free_pos(begin_pos_ptr)
+        nbt._bt_iter_free_pos(end_pos_ptr)
 
     def events_timestamps(self, timestamp_begin, timestamp_end):
         """
@@ -177,8 +188,8 @@ class TraceCollection:
         for event in self._events(begin_pos_ptr, end_pos_ptr):
             yield event
 
-        nbt._bt_iter_free_pos(begin_pos_ptr);
-        nbt._bt_iter_free_pos(end_pos_ptr);
+        nbt._bt_iter_free_pos(begin_pos_ptr)
+        nbt._bt_iter_free_pos(end_pos_ptr)
 
     @property
     def timestamp_begin(self):
@@ -219,7 +230,18 @@ class TraceCollection:
         return ev.timestamp
 
     def _events(self, begin_pos_ptr, end_pos_ptr):
-        ctf_it_ptr = nbt._bt_ctf_iter_create(self._tc, begin_pos_ptr, end_pos_ptr)
+        if self.intersect_mode:
+            if not self.has_intersection:
+                # There are no events to provide.
+                return
+
+            ctf_it_ptr = nbt._bt_python_ctf_iter_create_intersect(
+                self._tc, begin_pos_ptr, end_pos_ptr
+            )
+        else:
+            ctf_it_ptr = nbt._bt_ctf_iter_create(
+                self._tc, begin_pos_ptr, end_pos_ptr
+            )
 
         if ctf_it_ptr is None:
             raise NotImplementedError("Creation of multiple iterators is unsupported.")
This page took 0.024482 seconds and 4 git commands to generate.