Sen API
Sen Libraries
Loading...
Searching...
No Matches
output_stream.h
Go to the documentation of this file.
1// === output_stream.h =================================================================================================
2// Sen Infrastructure
3// Released under the Apache License v2.0 (SPDX-License-Identifier Apache-2.0).
4// See the LICENSE.txt file for more information.
5// © Airbus SAS, Airbus Helicopters, and Airbus Defence and Space SAU/GmbH/SAS.
6// =====================================================================================================================
7
8#ifndef SEN_CORE_IO_OUTPUT_STREAM_H
9#define SEN_CORE_IO_OUTPUT_STREAM_H
10
11// sen
16
17// std
18#include <cstring>
19
20namespace sen
21{
22
26template <typename BufferEndian>
28{
29 SEN_NOCOPY_NOMOVE(OutputStreamTemplate)
30
31public:
32 explicit OutputStreamTemplate(Writer& writer) noexcept: writer_(writer) {}
33 ~OutputStreamTemplate() noexcept = default;
34
35public:
36 void writeBool(bool val) { writeBasic(impl::BoolTransportType {val ? uchar_t {1U} : uchar_t {0U}}); }
37 void writeChar(char val) { writeBasic(val); }
38 void writeUChar(unsigned char val) { writeBasic(val); }
39 void writeInt8(int8_t val) { writeBasic(val); }
40 void writeUInt8(uint8_t val) { writeBasic(val); }
41 void writeInt16(int16_t val) { writeBasic(val); }
42 void writeUInt16(uint16_t val) { writeBasic(val); }
43 void writeInt32(int32_t val) { writeBasic(val); }
44 void writeUInt32(uint32_t val) { writeBasic(val); }
45 void writeInt64(int64_t val) { writeBasic(val); }
46 void writeUInt64(uint64_t val) { writeBasic(val); }
47 void writeFloat32(float32_t val) { writeBasic(val); }
48 void writeFloat64(float64_t val) { writeBasic(val); }
49 void writeString(std::string_view val);
51
52public:
53 [[nodiscard]] Writer& getWriter() noexcept { return writer_; }
54 [[nodiscard]] const Writer& getWriter() const noexcept { return writer_; }
55
56private:
57 template <typename T>
58 impl::IfBasic<T, void> writeBasic(T val);
59
60private:
61 Writer& writer_;
62};
63
65
66//----------------------------------------------------------------------------------------------------------------------
67// Inline implementation
68//----------------------------------------------------------------------------------------------------------------------
69
70template <typename BufferEndian>
71inline void OutputStreamTemplate<BufferEndian>::writeString(std::string_view val)
72{
73 // write the size of the sequence
74 auto size = static_cast<uint32_t>(val.size());
75 writeUInt32(size);
76
77 if (size == 0U)
78 {
79 return;
80 }
81
82 std::memcpy(writer_.advance(size), val.data(), size);
83}
84
85template <typename BufferEndian>
86template <typename T>
87inline impl::IfBasic<T, void> OutputStreamTemplate<BufferEndian>::writeBasic(T val)
88{
89 static_assert(std::is_trivially_copyable_v<T>);
90 constexpr auto size = sizeof(T);
91
92 ::sen::impl::swapBytesIfNeeded(val, BufferEndian {});
93 std::memcpy(writer_.advance(size), &val, size);
94}
95
96} // namespace sen
97
98#endif // SEN_CORE_IO_OUTPUT_STREAM_H
constexpr ValueType getNanoseconds() const noexcept
Number of nanoseconds.
Definition duration.h:55
Binary output stream. Serializes values. In general, I/O operations throw on failure.
Definition output_stream.h:28
void writeString(std::string_view val)
Definition output_stream.h:71
void writeUInt32(uint32_t val)
Definition output_stream.h:44
~OutputStreamTemplate() noexcept=default
OutputStreamTemplate(Writer &writer) noexcept
Definition output_stream.h:32
void writeUInt8(uint8_t val)
Definition output_stream.h:40
Writer & getWriter() noexcept
Definition output_stream.h:53
void writeUInt16(uint16_t val)
Definition output_stream.h:42
void writeTimestamp(TimeStamp val)
Definition output_stream.h:50
void writeFloat32(float32_t val)
Definition output_stream.h:47
void writeUChar(unsigned char val)
Definition output_stream.h:38
const Writer & getWriter() const noexcept
Definition output_stream.h:54
void writeInt32(int32_t val)
Definition output_stream.h:43
void writeInt64(int64_t val)
Definition output_stream.h:45
void writeBool(bool val)
Definition output_stream.h:36
void writeChar(char val)
Definition output_stream.h:37
void writeUInt64(uint64_t val)
Definition output_stream.h:46
void writeInt8(int8_t val)
Definition output_stream.h:39
void writeFloat64(float64_t val)
Definition output_stream.h:48
void writeInt16(int16_t val)
Definition output_stream.h:41
A point in time.
Definition timestamp.h:26
constexpr Duration sinceEpoch() const noexcept
Time passed since 1 January 1970 UTC.
Definition timestamp.h:46
Interface for writing to a device.
Definition buffer_writer.h:20
float float32_t
Definition numbers.h:16
unsigned char uchar_t
Definition numbers.h:18
double float64_t
Definition numbers.h:17
Definition assert.h:17
OutputStreamTemplate< LittleEndian > OutputStream
Definition output_stream.h:64