/workspaces/astro/sol3-sdk/cpp/sol3/core/message_output.h Source File

Space-ng SDK: /workspaces/astro/sol3-sdk/cpp/sol3/core/message_output.h Source File
Space-ng SDK
message_output.h
Go to the documentation of this file.
1 // Copyright (c) Space-ng, inc. All rights reserved.
2 #pragma once
3 
7 #include "sol3/core/time.h"
8 
9 #include <type_traits>
10 
11 namespace sol3::core {
12 
19 template <typename TMessageSpec>
21  static_assert(
23  "TMessageSpec must be sol3::core::MessageSpec<...>");
24 
25  public:
26  using TableType = typename TMessageSpec::TableType;
27  using NativeTableType = typename TableType::NativeTableType;
28  using Builder = typename TableType::Builder;
29 
37  IBufferExchange& exchange,
38  uint32_t component_id,
39  size_t slot_count,
40  size_t slot_size)
41  : sol3::core::AnyMessageOutput(
42  exchange,
43  TMessageSpec::makeMessagePort(component_id),
45  NativeTableType::GetSchemaData(),
46  MessageSchema::EvolutionPolicy::FORWARDS_COMPATIBLE),
47  slot_count,
48  slot_size),
49  serializer_(port()) {}
50 
51  msg::MessageHeaderT const& header() const { return serializer_.header(); }
52 
54  NativeTableType& payload() { return payload_; }
55  NativeTableType const& payload() const { return payload_; }
56 
57  // This points to the serialized payload root inside of the last written to
58  // slot in shared memory.
59  TableType const* payloadRoot() const {
60  return AnyMessageOutput::payloadRoot<TableType>();
61  }
62 
64  void addStamp(msg::Stamp const& stamp) { serializer_.addStamp(stamp); }
65 
76  uint64_t write() {
77  serializer_.finishPayload(payload_, sendStampNow());
79  serializer_.headerSpan(), serializer_.payloadSpan());
80  }
81 
89  // (flatbuffers::FlatBufferBuilder& fbb) -> flatbuffers::Offset<TableType>
102  template <typename TBuilderFunction>
103  uint64_t write(TBuilderFunction&& builder_function) {
104  serializer_.finishPayload<TableType, TBuilderFunction>(
105  std::forward<TBuilderFunction>(builder_function), sendStampNow());
107  serializer_.headerSpan(), serializer_.payloadSpan());
108  }
109 
110  private:
111  MessageSerializer serializer_;
112  NativeTableType payload_;
113 };
114 
115 } // namespace sol3::core
Definition: any_message_output.h:17
MessagePort const & port() const
Destination message port.
Definition: any_message_output.h:41
uint64_t write(flatbuffers::span< uint8_t const > header_span, flatbuffers::span< uint8_t const > payload_span)
Returns the sequence number of the slot written to.
Interface for registering, discovering, and disposing shared buffers.
Definition: shmem_buffer.h:112
Definition: message_output.h:20
TableType const * payloadRoot() const
Definition: message_output.h:59
void addStamp(msg::Stamp const &stamp)
Append a timestamp to the header.
Definition: message_output.h:64
typename TableType::Builder Builder
Definition: message_output.h:28
NativeTableType const & payload() const
Definition: message_output.h:55
NativeTableType & payload()
Mutable access to the native FlatBuffers payload.
Definition: message_output.h:54
typename TableType::NativeTableType NativeTableType
Definition: message_output.h:27
typename TMessageSpec::TableType TableType
Definition: message_output.h:26
uint64_t write(TBuilderFunction &&builder_function)
Definition: message_output.h:103
msg::MessageHeaderT const & header() const
Definition: message_output.h:51
MessageOutput(IBufferExchange &exchange, uint32_t component_id, size_t slot_count, size_t slot_size)
Definition: message_output.h:36
uint64_t write()
Definition: message_output.h:76
Definition: message_schema.h:12
Definition: message_serializer.h:57
size_t finishPayload(TBuilderFunction &&builder_function, msg::Stamp stamp)
Definition: message_serializer.h:90
msg::MessageHeaderT const & header() const
A constant view of the message header.
Definition: message_serializer.h:66
flatbuffers::span< uint8_t const > headerSpan() const
Size-prefixed header span for the most recently finished message.
Definition: message_serializer.h:74
void addStamp(msg::Stamp const &stamp)
Append a timestamp to the header.
Definition: message_serializer.h:71
flatbuffers::span< uint8_t const > payloadSpan() const
Non-size-prefixed payload span for the most recently finished message.
Definition: any_message_input.h:15
msg::Stamp sendStampNow(uint16_t host_id=hostIdentity().host_id_numeric)
Creates a send timestamp using the specified clock.
Definition: time.h:58
Definition: carrier_board_msg_spec.h:10
Definition: message_spec.h:44