2 * Copyright (c) 2023 Philippe Proulx <pproulx@efficios.com>
4 * SPDX-License-Identifier: MIT
7 #ifndef BABELTRACE_CPP_COMMON_BT2_SELF_MESSAGE_ITERATOR_HPP
8 #define BABELTRACE_CPP_COMMON_BT2_SELF_MESSAGE_ITERATOR_HPP
10 #include <babeltrace2/babeltrace.h>
12 #include "common/assert.h"
13 #include "common/common.h"
15 #include "borrowed-object.hpp"
16 #include "message-iterator.hpp"
17 #include "self-component-port.hpp"
21 class SelfMessageIterator final : public BorrowedObject<bt_self_message_iterator>
24 explicit SelfMessageIterator(const LibObjPtr libObjPtr) noexcept :
25 _ThisBorrowedObject {libObjPtr}
29 MessageIterator::Shared createMessageIterator(const SelfComponentInputPort port) const
31 bt_message_iterator *libMsgIterPtr = nullptr;
32 const auto status = bt_message_iterator_create_from_message_iterator(
33 this->libObjPtr(), port.libObjPtr(), &libMsgIterPtr);
36 case BT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_OK:
37 BT_ASSERT(libMsgIterPtr);
38 return MessageIterator::Shared::createWithoutRef(libMsgIterPtr);
39 case BT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_MEMORY_ERROR:
41 case BT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_ERROR:
48 SelfComponent component() const noexcept
50 return SelfComponent {bt_self_message_iterator_borrow_component(this->libObjPtr())};
53 SelfComponentOutputPort port() const noexcept
55 return SelfComponentOutputPort {bt_self_message_iterator_borrow_port(this->libObjPtr())};
58 bool isInterrupted() const noexcept
60 return static_cast<bool>(bt_self_message_iterator_is_interrupted(this->libObjPtr()));
64 T& data() const noexcept
66 return *static_cast<T *>(bt_self_message_iterator_get_data(this->libObjPtr()));
70 void data(T& obj) const noexcept
72 bt_self_message_iterator_set_data(this->libObjPtr(),
73 const_cast<void *>(static_cast<const void *>(&obj)));
76 bt2::StreamBeginningMessage::Shared
77 createStreamBeginningMessage(const bt2::ConstStream stream) const
79 const auto libObjPtr =
80 bt_message_stream_beginning_create(this->libObjPtr(), stream.libObjPtr());
86 return bt2::StreamBeginningMessage::Shared::createWithoutRef(libObjPtr);
89 bt2::StreamEndMessage::Shared createStreamEndMessage(const bt2::ConstStream stream) const
91 const auto libObjPtr = bt_message_stream_end_create(this->libObjPtr(), stream.libObjPtr());
97 return bt2::StreamEndMessage::Shared::createWithoutRef(libObjPtr);
100 bt2::EventMessage::Shared createEventMessage(const bt2::ConstEventClass eventCls,
101 const bt2::ConstStream stream) const
103 const auto libObjPtr =
104 bt_message_event_create(this->libObjPtr(), eventCls.libObjPtr(), stream.libObjPtr());
107 throw MemoryError {};
110 return bt2::EventMessage::Shared::createWithoutRef(libObjPtr);
113 bt2::EventMessage::Shared createEventMessage(const bt2::ConstEventClass eventCls,
114 const bt2::ConstStream stream,
115 const std::uint64_t clockSnapshotValue) const
117 const auto libObjPtr = bt_message_event_create_with_default_clock_snapshot(
118 this->libObjPtr(), eventCls.libObjPtr(), stream.libObjPtr(), clockSnapshotValue);
121 throw MemoryError {};
124 return bt2::EventMessage::Shared::createWithoutRef(libObjPtr);
127 bt2::EventMessage::Shared createEventMessage(const bt2::ConstEventClass eventCls,
128 const bt2::ConstPacket packet) const
130 const auto libObjPtr = bt_message_event_create_with_packet(
131 this->libObjPtr(), eventCls.libObjPtr(), packet.libObjPtr());
134 throw MemoryError {};
137 return bt2::EventMessage::Shared::createWithoutRef(libObjPtr);
140 bt2::EventMessage::Shared createEventMessage(const bt2::ConstEventClass eventCls,
141 const bt2::ConstPacket packet,
142 const std::uint64_t clockSnapshotValue) const
144 const auto libObjPtr = bt_message_event_create_with_packet_and_default_clock_snapshot(
145 this->libObjPtr(), eventCls.libObjPtr(), packet.libObjPtr(), clockSnapshotValue);
148 throw MemoryError {};
151 return bt2::EventMessage::Shared::createWithoutRef(libObjPtr);
154 bt2::PacketBeginningMessage::Shared
155 createPacketBeginningMessage(const bt2::ConstPacket packet) const
157 const auto libObjPtr =
158 bt_message_packet_beginning_create(this->libObjPtr(), packet.libObjPtr());
161 throw MemoryError {};
164 return bt2::PacketBeginningMessage::Shared::createWithoutRef(libObjPtr);
167 bt2::PacketBeginningMessage::Shared
168 createPacketBeginningMessage(const bt2::ConstPacket packet,
169 const std::uint64_t clockSnapshotValue) const
171 const auto libObjPtr = bt_message_packet_beginning_create_with_default_clock_snapshot(
172 this->libObjPtr(), packet.libObjPtr(), clockSnapshotValue);
175 throw MemoryError {};
178 return bt2::PacketBeginningMessage::Shared::createWithoutRef(libObjPtr);
181 bt2::PacketEndMessage::Shared createPacketEndMessage(const bt2::ConstPacket packet) const
183 const auto libObjPtr = bt_message_packet_end_create(this->libObjPtr(), packet.libObjPtr());
186 throw MemoryError {};
189 return bt2::PacketEndMessage::Shared::createWithoutRef(libObjPtr);
192 bt2::PacketEndMessage::Shared
193 createPacketEndMessage(const bt2::ConstPacket packet,
194 const std::uint64_t clockSnapshotValue) const
196 const auto libObjPtr = bt_message_packet_end_create_with_default_clock_snapshot(
197 this->libObjPtr(), packet.libObjPtr(), clockSnapshotValue);
200 throw MemoryError {};
203 return bt2::PacketEndMessage::Shared::createWithoutRef(libObjPtr);
206 bt2::DiscardedEventsMessage::Shared createDiscardedEventsMessage(const bt2::ConstStream stream)
208 const auto libObjPtr =
209 bt_message_discarded_events_create(this->libObjPtr(), stream.libObjPtr());
212 throw MemoryError {};
215 return bt2::DiscardedEventsMessage::Shared::createWithoutRef(libObjPtr);
218 bt2::DiscardedEventsMessage::Shared
219 createDiscardedEventsMessage(const bt2::ConstStream stream,
220 const std::uint64_t beginningClockSnapshotValue,
221 const std::uint64_t endClockSnapshotValue)
223 const auto libObjPtr = bt_message_discarded_events_create_with_default_clock_snapshots(
224 this->libObjPtr(), stream.libObjPtr(), beginningClockSnapshotValue,
225 endClockSnapshotValue);
228 throw MemoryError {};
231 return bt2::DiscardedEventsMessage::Shared::createWithoutRef(libObjPtr);
234 bt2::DiscardedPacketsMessage::Shared
235 createDiscardedPacketsMessage(const bt2::ConstStream stream)
237 const auto libObjPtr =
238 bt_message_discarded_packets_create(this->libObjPtr(), stream.libObjPtr());
241 throw MemoryError {};
244 return bt2::DiscardedPacketsMessage::Shared::createWithoutRef(libObjPtr);
247 bt2::DiscardedPacketsMessage::Shared
248 createDiscardedPacketsMessage(const bt2::ConstStream stream,
249 const std::uint64_t beginningClockSnapshotValue,
250 const std::uint64_t endClockSnapshotValue)
252 const auto libObjPtr = bt_message_discarded_packets_create_with_default_clock_snapshots(
253 this->libObjPtr(), stream.libObjPtr(), beginningClockSnapshotValue,
254 endClockSnapshotValue);
257 throw MemoryError {};
260 return bt2::DiscardedPacketsMessage::Shared::createWithoutRef(libObjPtr);
263 bt2::MessageIteratorInactivityMessage::Shared
264 createMessageIteratorInactivityMessage(const bt2::ConstClockClass clockClass,
265 const std::uint64_t clockSnapshotValue)
267 const auto libObjPtr = bt_message_message_iterator_inactivity_create(
268 this->libObjPtr(), clockClass.libObjPtr(), clockSnapshotValue);
271 throw MemoryError {};
274 return bt2::MessageIteratorInactivityMessage::Shared::createWithoutRef(libObjPtr);
278 } /* namespace bt2 */
280 #endif /* BABELTRACE_CPP_COMMON_BT2_SELF_MESSAGE_ITERATOR_HPP */