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/common.h"
14 #include "borrowed-object.hpp"
15 #include "message-iterator.hpp"
16 #include "self-component-port.hpp"
20 class SelfMessageIterator final : public BorrowedObject<bt_self_message_iterator>
23 explicit SelfMessageIterator(const LibObjPtr libObjPtr) noexcept :
24 _ThisBorrowedObject {libObjPtr}
28 MessageIterator::Shared createMessageIterator(const SelfComponentInputPort port) const
30 bt_message_iterator *libMsgIterPtr = nullptr;
31 const auto status = bt_message_iterator_create_from_message_iterator(
32 this->libObjPtr(), port.libObjPtr(), &libMsgIterPtr);
35 case BT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_OK:
36 return MessageIterator::Shared::createWithoutRef(libMsgIterPtr);
37 case BT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_MEMORY_ERROR:
39 case BT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_ERROR:
46 SelfComponent component() const noexcept
48 return SelfComponent {bt_self_message_iterator_borrow_component(this->libObjPtr())};
51 SelfComponentOutputPort port() const noexcept
53 return SelfComponentOutputPort {bt_self_message_iterator_borrow_port(this->libObjPtr())};
56 bool isInterrupted() const noexcept
58 return static_cast<bool>(bt_self_message_iterator_is_interrupted(this->libObjPtr()));
62 T& data() const noexcept
64 return *static_cast<T *>(bt_self_message_iterator_get_data(this->libObjPtr()));
68 SelfMessageIterator data(T& obj) const noexcept
70 bt_self_message_iterator_set_data(this->libObjPtr(),
71 const_cast<void *>(static_cast<const void *>(&obj)));
75 bt2::StreamBeginningMessage::Shared
76 createStreamBeginningMessage(const bt2::ConstStream stream) const
78 const auto libObjPtr =
79 bt_message_stream_beginning_create(this->libObjPtr(), stream.libObjPtr());
85 return bt2::StreamBeginningMessage::Shared::createWithoutRef(libObjPtr);
88 bt2::StreamEndMessage::Shared createStreamEndMessage(const bt2::ConstStream stream) const
90 const auto libObjPtr = bt_message_stream_end_create(this->libObjPtr(), stream.libObjPtr());
96 return bt2::StreamEndMessage::Shared::createWithoutRef(libObjPtr);
99 bt2::EventMessage::Shared createEventMessage(const bt2::ConstEventClass eventCls,
100 const bt2::ConstStream stream) const
102 const auto libObjPtr =
103 bt_message_event_create(this->libObjPtr(), eventCls.libObjPtr(), stream.libObjPtr());
106 throw MemoryError {};
109 return bt2::EventMessage::Shared::createWithoutRef(libObjPtr);
112 bt2::EventMessage::Shared createEventMessage(const bt2::ConstEventClass eventCls,
113 const bt2::ConstStream stream,
114 const std::uint64_t clockSnapshotValue) const
116 const auto libObjPtr = bt_message_event_create_with_default_clock_snapshot(
117 this->libObjPtr(), eventCls.libObjPtr(), stream.libObjPtr(), clockSnapshotValue);
120 throw MemoryError {};
123 return bt2::EventMessage::Shared::createWithoutRef(libObjPtr);
126 bt2::EventMessage::Shared createEventMessage(const bt2::ConstEventClass eventCls,
127 const bt2::ConstPacket packet) const
129 const auto libObjPtr = bt_message_event_create_with_packet(
130 this->libObjPtr(), eventCls.libObjPtr(), packet.libObjPtr());
133 throw MemoryError {};
136 return bt2::EventMessage::Shared::createWithoutRef(libObjPtr);
139 bt2::EventMessage::Shared createEventMessage(const bt2::ConstEventClass eventCls,
140 const bt2::ConstPacket packet,
141 const std::uint64_t clockSnapshotValue) const
143 const auto libObjPtr = bt_message_event_create_with_packet_and_default_clock_snapshot(
144 this->libObjPtr(), eventCls.libObjPtr(), packet.libObjPtr(), clockSnapshotValue);
147 throw MemoryError {};
150 return bt2::EventMessage::Shared::createWithoutRef(libObjPtr);
153 bt2::PacketBeginningMessage::Shared
154 createPacketBeginningMessage(const bt2::ConstPacket packet) const
156 const auto libObjPtr =
157 bt_message_packet_beginning_create(this->libObjPtr(), packet.libObjPtr());
160 throw MemoryError {};
163 return bt2::PacketBeginningMessage::Shared::createWithoutRef(libObjPtr);
166 bt2::PacketBeginningMessage::Shared
167 createPacketBeginningMessage(const bt2::ConstPacket packet,
168 const std::uint64_t clockSnapshotValue) const
170 const auto libObjPtr = bt_message_packet_beginning_create_with_default_clock_snapshot(
171 this->libObjPtr(), packet.libObjPtr(), clockSnapshotValue);
174 throw MemoryError {};
177 return bt2::PacketBeginningMessage::Shared::createWithoutRef(libObjPtr);
180 bt2::PacketEndMessage::Shared createPacketEndMessage(const bt2::ConstPacket packet) const
182 const auto libObjPtr = bt_message_packet_end_create(this->libObjPtr(), packet.libObjPtr());
185 throw MemoryError {};
188 return bt2::PacketEndMessage::Shared::createWithoutRef(libObjPtr);
191 bt2::PacketEndMessage::Shared
192 createPacketEndMessage(const bt2::ConstPacket packet,
193 const std::uint64_t clockSnapshotValue) const
195 const auto libObjPtr = bt_message_packet_end_create_with_default_clock_snapshot(
196 this->libObjPtr(), packet.libObjPtr(), clockSnapshotValue);
199 throw MemoryError {};
202 return bt2::PacketEndMessage::Shared::createWithoutRef(libObjPtr);
205 bt2::DiscardedEventsMessage::Shared createDiscardedEventsMessage(const bt2::ConstStream stream)
207 const auto libObjPtr =
208 bt_message_discarded_events_create(this->libObjPtr(), stream.libObjPtr());
211 throw MemoryError {};
214 return bt2::DiscardedEventsMessage::Shared::createWithoutRef(libObjPtr);
217 bt2::DiscardedEventsMessage::Shared
218 createDiscardedEventsMessage(const bt2::ConstStream stream,
219 const std::uint64_t beginningClockSnapshotValue,
220 const std::uint64_t endClockSnapshotValue) const
222 const auto libObjPtr = bt_message_discarded_events_create_with_default_clock_snapshots(
223 this->libObjPtr(), stream.libObjPtr(), beginningClockSnapshotValue,
224 endClockSnapshotValue);
227 throw MemoryError {};
230 return bt2::DiscardedEventsMessage::Shared::createWithoutRef(libObjPtr);
233 bt2::DiscardedPacketsMessage::Shared
234 createDiscardedPacketsMessage(const bt2::ConstStream stream) const
236 const auto libObjPtr =
237 bt_message_discarded_packets_create(this->libObjPtr(), stream.libObjPtr());
240 throw MemoryError {};
243 return bt2::DiscardedPacketsMessage::Shared::createWithoutRef(libObjPtr);
246 bt2::DiscardedPacketsMessage::Shared
247 createDiscardedPacketsMessage(const bt2::ConstStream stream,
248 const std::uint64_t beginningClockSnapshotValue,
249 const std::uint64_t endClockSnapshotValue) const
251 const auto libObjPtr = bt_message_discarded_packets_create_with_default_clock_snapshots(
252 this->libObjPtr(), stream.libObjPtr(), beginningClockSnapshotValue,
253 endClockSnapshotValue);
256 throw MemoryError {};
259 return bt2::DiscardedPacketsMessage::Shared::createWithoutRef(libObjPtr);
262 bt2::MessageIteratorInactivityMessage::Shared
263 createMessageIteratorInactivityMessage(const bt2::ConstClockClass clockClass,
264 const std::uint64_t clockSnapshotValue) const
266 const auto libObjPtr = bt_message_message_iterator_inactivity_create(
267 this->libObjPtr(), clockClass.libObjPtr(), clockSnapshotValue);
270 throw MemoryError {};
273 return bt2::MessageIteratorInactivityMessage::Shared::createWithoutRef(libObjPtr);
277 } /* namespace bt2 */
279 #endif /* BABELTRACE_CPP_COMMON_BT2_SELF_MESSAGE_ITERATOR_HPP */