raise NotImplementedError
-class _GenericMessageIterator(object._SharedObject, _MessageIterator):
+class _UserComponentInputPortMessageIterator(object._SharedObject, _MessageIterator):
+ _get_ref = staticmethod(
+ native_bt.self_component_port_input_message_iterator_get_ref
+ )
+ _put_ref = staticmethod(
+ native_bt.self_component_port_input_message_iterator_put_ref
+ )
+
def __init__(self, ptr):
self._current_msgs = []
self._at = 0
def __next__(self):
if len(self._current_msgs) == self._at:
- status, msgs = self._get_msg_range(self._ptr)
+ status, msgs = native_bt.bt2_self_component_port_input_get_msg_range(
+ self._ptr
+ )
utils._handle_func_status(
status, 'unexpected error: cannot advance the message iterator'
)
return bt2_message._create_from_ptr(msg_ptr)
- @property
def can_seek_beginning(self):
- res = self._can_seek_beginning(self._ptr)
+ status, res = native_bt.self_component_port_input_message_iterator_can_seek_beginning(
+ self._ptr
+ )
+ utils._handle_func_status(
+ status,
+ 'cannot check whether or not message iterator can seek its beginning',
+ )
return res != 0
def seek_beginning(self):
self._current_msgs.clear()
self._at = 0
- status = self._seek_beginning(self._ptr)
+ status = native_bt.self_component_port_input_message_iterator_seek_beginning(
+ self._ptr
+ )
utils._handle_func_status(status, 'cannot seek message iterator beginning')
-# This is created when a component wants to iterate on one of its input ports.
-class _UserComponentInputPortMessageIterator(_GenericMessageIterator):
- _get_msg_range = staticmethod(native_bt.bt2_self_component_port_input_get_msg_range)
- _get_ref = staticmethod(
- native_bt.self_component_port_input_message_iterator_get_ref
- )
- _put_ref = staticmethod(
- native_bt.self_component_port_input_message_iterator_put_ref
- )
- _can_seek_beginning = staticmethod(
- native_bt.self_component_port_input_message_iterator_can_seek_beginning
- )
- _seek_beginning = staticmethod(
- native_bt.self_component_port_input_message_iterator_seek_beginning
- )
-
-
# This is extended by the user to implement component classes in Python. It
# is created for a given output port when an input port message iterator is
# created on the input port on the other side of the connection. It is also
def _component(self):
return native_bt.bt2_get_user_component_from_user_msg_iter(self._bt_ptr)
+ @property
+ def _port(self):
+ port_ptr = native_bt.self_message_iterator_borrow_port(self._bt_ptr)
+ assert port_ptr is not None
+ return bt2_port._create_self_from_ptr_and_get_ref(
+ port_ptr, native_bt.PORT_TYPE_OUTPUT
+ )
+
@property
def addr(self):
return int(self._bt_ptr)
except Exception:
raise
- utils._check_type(msg, bt2_message._Message)
+ utils._check_type(msg, bt2_message._MessageConst)
# The reference we return will be given to the message array.
# However, the `msg` Python object may stay alive, if the user has kept
msg._get_ref(msg._ptr)
return int(msg._ptr)
- @property
def _bt_can_seek_beginning_from_native(self):
# Here, we mimic the behavior of the C API:
#
- # - If the iterator has a _user_can_seek_beginning attribute,
+ # - If the iterator has a _user_can_seek_beginning method,
# read it and use that result.
- # - Otherwise, the presence or absence of a `_seek_beginning`
+ # - Otherwise, the presence or absence of a `_user_seek_beginning`
# method indicates whether the iterator can seek beginning.
if hasattr(self, '_user_can_seek_beginning'):
- can_seek_beginning = self._user_can_seek_beginning
+ can_seek_beginning = self._user_can_seek_beginning()
utils._check_bool(can_seek_beginning)
return can_seek_beginning
else: