Fix: use of spaces instead of tabs in babeltrace.i.in
[babeltrace.git] / bindings / python / babeltrace.i.in
index 5142952ec5fdeac715a28e01510354b29ed68f07..aaa102094d6740da590c93ba831b124516b592e4 100644 (file)
@@ -99,6 +99,12 @@ const char *_bt_python_get_array_string(struct bt_definition *field);
 const char *_bt_python_get_sequence_string(struct bt_definition *field);
 int _bt_python_field_integer_get_signedness(const struct bt_ctf_field *field);
 enum ctf_type_id _bt_python_get_field_type(const struct bt_ctf_field *field);
+struct bt_iter_pos *_bt_python_create_iter_pos(void);
+struct bt_ctf_iter *_bt_python_ctf_iter_create_intersect(
+               struct bt_context *ctx,
+               struct bt_iter_pos *inter_begin_pos,
+               struct bt_iter_pos *inter_end_pos);
+int _bt_python_has_intersection(struct bt_context *ctx);
 
 /* =================================================================
                CONTEXT.H, CONTEXT-INTERNAL.H
@@ -133,8 +139,9 @@ class TraceCollection:
        The TraceCollection is the object that contains all currently opened traces.
        """
 
-       def __init__(self):
+       def __init__(self, intersect_mode=False):
                self._tc = _bt_context_create()
+               self._intersect_mode = intersect_mode
 
        def __del__(self):
                _bt_context_put(self._tc)
@@ -206,6 +213,14 @@ class TraceCollection:
                        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 _bt_python_has_intersection(self._tc)
+
        @property
        def events(self):
                """
@@ -223,21 +238,25 @@ class TraceCollection:
                event after the the generator has gone out of scope may result in a
                crash or data corruption.
                """
-               begin_pos_ptr = _bt_iter_pos()
-               end_pos_ptr = _bt_iter_pos()
-               begin_pos_ptr.type = SEEK_BEGIN
-               end_pos_ptr.type = SEEK_LAST
+               begin_pos_ptr = _bt_python_create_iter_pos()
+               end_pos_ptr = _bt_python_create_iter_pos()
+               if not self.intersect_mode:
+                       begin_pos_ptr.type = SEEK_BEGIN
+                       end_pos_ptr.type = SEEK_LAST
 
                for event in self._events(begin_pos_ptr, end_pos_ptr):
                        yield event
 
+               _bt_iter_free_pos(begin_pos_ptr)
+               _bt_iter_free_pos(end_pos_ptr)
+
        def events_timestamps(self, timestamp_begin, timestamp_end):
                """
                Generator function to iterate over the events of open in the current
                TraceCollection from timestamp_begin to timestamp_end.
                """
-               begin_pos_ptr = _bt_iter_pos()
-               end_pos_ptr = _bt_iter_pos()
+               begin_pos_ptr = _bt_python_create_iter_pos()
+               end_pos_ptr = _bt_python_create_iter_pos()
                begin_pos_ptr.type = end_pos_ptr.type = SEEK_TIME
                begin_pos_ptr.u.seek_time = timestamp_begin
                end_pos_ptr.u.seek_time = timestamp_end
@@ -245,6 +264,9 @@ class TraceCollection:
                for event in self._events(begin_pos_ptr, end_pos_ptr):
                        yield event
 
+               _bt_iter_free_pos(begin_pos_ptr)
+               _bt_iter_free_pos(end_pos_ptr)
+
        @property
        def timestamp_begin(self):
                pos_ptr = _bt_iter_pos()
@@ -264,10 +286,25 @@ class TraceCollection:
                ev_ptr = _bt_ctf_iter_read_event(ctf_it_ptr)
                _bt_ctf_iter_destroy(ctf_it_ptr)
                if ev_ptr is None:
-                       return None;
+                       return None
+               ev = Event.__new__(Event)
+               ev._e = ev_ptr
+               return ev.timestamp
 
        def _events(self, begin_pos_ptr, end_pos_ptr):
-               ctf_it_ptr = _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 = _bt_python_ctf_iter_create_intersect(
+                               self._tc, begin_pos_ptr, end_pos_ptr
+                       )
+               else:
+                       ctf_it_ptr = _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.")
@@ -793,7 +830,7 @@ class Event(collections.Mapping):
        def _field_list_with_scope(self, scope):
                fields = []
                scope_ptr = _bt_ctf_get_top_level_scope(self._e, scope)
-               
+
                # Returns a list [list_ptr, count]. If list_ptr is NULL, SWIG will only
                # provide the "count" return value
                count = 0
This page took 0.024878 seconds and 4 git commands to generate.