/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 <utility>
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  stage();
78  return writeStaged();
79  }
80 
83  size_t stage() { return serializer_.finishPayload(payload_, sendStampNow()); }
84 
87  uint64_t writeStaged() {
89  serializer_.headerSpan(), serializer_.payloadSpan());
90  }
91 
99  // (flatbuffers::FlatBufferBuilder& fbb) -> flatbuffers::Offset<TableType>
112  template <typename TBuilderFunction>
113  uint64_t write(TBuilderFunction&& builder_function) {
114  stage(std::forward<TBuilderFunction>(builder_function));
115  return writeStaged();
116  }
117 
120  template <typename TBuilderFunction>
121  size_t stage(TBuilderFunction&& builder_function) {
122  return serializer_.finishPayload<TableType, TBuilderFunction>(
123  std::forward<TBuilderFunction>(builder_function), sendStampNow());
124  }
125 
126  private:
127  MessageSerializer serializer_;
128  NativeTableType payload_;
129 };
130 
131 } // 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
uint64_t writeStaged()
Definition: message_output.h:87
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:113
msg::MessageHeaderT const & header() const
Definition: message_output.h:51
size_t stage(TBuilderFunction &&builder_function)
Definition: message_output.h:121
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
size_t stage()
Definition: message_output.h:83
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: handlers.h:24
Definition: message_spec.h:44