26 template<
typename Serializer>
29 Serializer::schema_version;
32 template<
typename Serializer>
65 template<std::
size_t MaxBytes>
68 std::array<std::byte, MaxBytes>
bytes{};
71 [[nodiscard]]
bool assign(std::byte
const* data, std::size_t length)
73 if (length > MaxBytes) {
76 for (std::size_t i = 0; i < length; ++i) {
106 template<std::
size_t MaxBytes>
135 template<
typename Serializer>
138 template<std::
size_t MaxBytes>
140 typename Serializer::event_type
const& event,
147 template<std::
size_t MaxBytes>
149 typename Serializer::event_type& event)
151 if constexpr (detail::serializer_has_schema_version<Serializer>) {
156 if constexpr (detail::serializer_has_event_id<Serializer>) {
161 return Serializer::decode(record, event)
173 template<std::
size_t MaxBytes>
190 template<std::
size_t MaxBytes>
205 template<std::
size_t MaxBytes>
231 template<std::
size_t MaxBytes>
247 template<std::
size_t MaxBytes>
274 template<
typename Codec>
277 template<
typename Runtime, std::
size_t MaxBytes>
285 typename Codec::event_type
event{};
286 if (!Codec::decode(frame, event)) {
302 template<
typename Codec>
305 template<
typename Runtime, std::
size_t MaxBytes>
313 typename Codec::event_type
event{};
314 if (!Codec::decode(sample, event)) {
329 template<
typename Codec>
332 template<
typename Runtime, std::
size_t MaxBytes>
336 typename Codec::event_type
event{};
337 if (!Codec::decode(
request, event)) {
342 runtime, std::move(event));
354 template<
typename Codec>
357 template<
typename Runtime, std::
size_t MaxBytes>
361 typename Codec::event_type
event{};
362 if (!Codec::decode(record, event)) {
380 template<
typename Codec>
383 template<
typename Runtime, std::
size_t MaxBytes>
388 if (!message.
valid) {
392 typename Codec::event_type
event{};
393 if (!Codec::decode(message, event)) {
411 template<
typename Slot, std::
size_t Capacity>
414 static_assert(Capacity > 1U,
415 "tsm: shared_memory_channel requires at least two slots");
435 auto& slot = slots_[write_index_];
436 out = { &slot.value, slot.
sequence };
447 auto& slot = slots_[write_index_];
448 if (written.
slot != &slot.value || slot.ready ||
449 written.
sequence != slot.sequence) {
452 slot.sequence = written.
sequence + 1U;
454 write_index_ = next(write_index_);
469 auto const& slot = slots_[read_index_];
470 out = { &slot.value, slot.
sequence };
481 auto& slot = slots_[read_index_];
482 if (read.
slot != &slot.value || !slot.ready ||
487 read_index_ = next(read_index_);
501 [[nodiscard]]
bool full()
const
503 return count_ == Capacity;
505 [[nodiscard]] std::size_t
size()
const
514 std::uint32_t sequence{};
518 static constexpr std::size_t next(std::size_t index)
520 return (index + 1U) % Capacity;
523 std::array<storage_slot, Capacity> slots_{};
524 std::size_t write_index_{};
525 std::size_t read_index_{};
526 std::size_t count_{};
536 template<
typename Serializer>
539 template<
typename Runtime, std::
size_t MaxBytes, std::
size_t Capacity>
545 Capacity>::readable_slot readable{};
551 typename Serializer::event_type
event{};
555 static_cast<void>(
channel.release_read(readable));
560 runtime, std::move(event));
561 static_cast<void>(
channel.release_read(readable));
Definition: transport.h:413
status try_commit_write(writable_slot const &written)
Definition: transport.h:445
std::size_t size() const
Definition: transport.h:505
bool commit_write(writable_slot const &written)
Definition: transport.h:459
status try_acquire_write(writable_slot &out)
Definition: transport.h:430
status try_release_read(readable_slot const &read)
Definition: transport.h:479
bool full() const
Definition: transport.h:501
bool release_read(readable_slot const &read)
Definition: transport.h:492
bool acquire_write(writable_slot &out)
Definition: transport.h:440
bool acquire_read(readable_slot &out) const
Definition: transport.h:474
bool empty() const
Definition: transport.h:497
status try_acquire_read(readable_slot &out) const
Definition: transport.h:464
requires(!has_transition_type_c< T > &&has_transition_member_c< T >) struct transitions_of< T >
Definition: transition.h:479
concept serializer_has_schema_version
Definition: transport.h:27
concept serializer_has_event_id
Definition: transport.h:33
Definition: transport.h:22
status
Definition: transport.h:47
runtime::Runtime< Definition, Policy, MachinePolicy > Runtime
Definition: runtime.h:35
std::chrono::duration< tick_rep, tick_period > tick_duration
Chrono duration type used for semantic scheduler ticks.
Definition: ticks.h:50
static bool send(Runtime &runtime, Event &&event)
Definition: transport.h:32
Definition: transport.h:304
static status receive(Runtime &runtime, dds_sample< MaxBytes > const &sample)
Definition: transport.h:306
Definition: transport.h:192
bool valid
Definition: transport.h:196
std::uint32_t sequence
Definition: transport.h:195
std::uint32_t writer_id
Definition: transport.h:194
payload_buffer< MaxBytes > payload
Definition: transport.h:197
std::uint32_t topic_id
Definition: transport.h:193
Definition: transport.h:382
static status receive(Runtime &runtime, event_io_message< MaxBytes > const &message)
Definition: transport.h:384
Definition: transport.h:249
bool valid
Definition: transport.h:254
std::uint32_t sequence
Definition: transport.h:252
std::uint32_t channel_id
Definition: transport.h:250
std::uint32_t source_id
Definition: transport.h:251
payload_buffer< MaxBytes > payload
Definition: transport.h:255
std::uint16_t event_id
Definition: transport.h:253
Definition: transport.h:276
static status receive(Runtime &runtime, m2m_frame< MaxBytes > const &frame)
Definition: transport.h:278
Definition: transport.h:175
std::uint32_t destination_id
Definition: transport.h:177
std::uint16_t kind
Definition: transport.h:179
std::uint32_t sequence
Definition: transport.h:178
std::uint32_t source_id
Definition: transport.h:176
bool crc_ok
Definition: transport.h:180
payload_buffer< MaxBytes > payload
Definition: transport.h:181
Definition: transport.h:67
std::size_t size
Definition: transport.h:69
std::array< std::byte, MaxBytes > bytes
Definition: transport.h:68
void clear()
Definition: transport.h:83
bool assign(std::byte const *data, std::size_t length)
Definition: transport.h:71
Definition: transport.h:356
static status apply(Runtime &runtime, replay_record< MaxBytes > const &record)
Definition: transport.h:358
Definition: transport.h:233
payload_buffer< MaxBytes > payload
Definition: transport.h:236
tsm::tick_duration tick
Definition: transport.h:234
std::uint16_t event_id
Definition: transport.h:235
Definition: transport.h:331
static rpc_reply request(Runtime &runtime, rpc_request< MaxBytes > const &request)
Definition: transport.h:333
Definition: transport.h:219
bool event_handled
Definition: transport.h:222
status result
Definition: transport.h:221
std::uint32_t correlation_id
Definition: transport.h:220
Definition: transport.h:207
std::uint16_t method
Definition: transport.h:210
payload_buffer< MaxBytes > payload
Definition: transport.h:211
std::uint32_t client_id
Definition: transport.h:208
std::uint32_t correlation_id
Definition: transport.h:209
Definition: transport.h:108
std::uint32_t sequence
Definition: transport.h:110
serializer_header header
Definition: transport.h:109
payload_buffer< MaxBytes > payload
Definition: transport.h:111
Definition: transport.h:137
static status encode(typename Serializer::event_type const &event, serialized_event< MaxBytes > &record)
Definition: transport.h:139
static status decode(serialized_event< MaxBytes > const &record, typename Serializer::event_type &event)
Definition: transport.h:148
Definition: transport.h:538
static status receive_one(Runtime &runtime, shared_memory_channel< serialized_event< MaxBytes >, Capacity > &channel)
Definition: transport.h:540
Definition: transport.h:425
std::uint32_t sequence
Definition: transport.h:427
Slot const * slot
Definition: transport.h:426
Definition: transport.h:419
Slot * slot
Definition: transport.h:420
std::uint32_t sequence
Definition: transport.h:421
Target-neutral tick value type.
Local runtime transport boundary for typed events.