Sen API
Sen Libraries
Toggle main menu visibility
Loading...
Searching...
No Matches
buffer_writer.h
Go to the documentation of this file.
1
// === buffer_writer.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_BUFFER_WRITER_H
9
#define SEN_CORE_IO_BUFFER_WRITER_H
10
11
#include "
sen/core/base/assert.h
"
12
#include "
sen/core/base/span.h
"
13
14
#include <vector>
15
16
namespace
sen
17
{
18
20
class
Writer
21
{
22
SEN_NOCOPY_NOMOVE(
Writer
)
23
24
public
:
25
Writer
() noexcept = default;
26
virtual ~
Writer
() noexcept = default;
27
28
public:
30
virtual uint8_t*
advance
(
size_t
size) = 0;
31
33
virtual
void
reverse
(
size_t
size) = 0;
34
};
35
37
class
BufferWriter
final: public
Writer
38
{
39
SEN_NOCOPY_NOMOVE(
BufferWriter
)
40
41
public
:
42
explicit
BufferWriter
(
Span<uint8_t>
buffer)
noexcept
: cursor_(buffer.data()) {}
43
~BufferWriter
()
override
=
default
;
44
45
public
:
// implements sen::Writer
46
[[nodiscard]] uint8_t*
advance
(
size_t
size)
override
;
47
void
reverse
(
size_t
size)
override
48
{
49
cursor_ -= size;
// NOLINT(cppcoreguidelines-pro-bounds-pointer-arithmetic)
50
}
51
52
private
:
53
uint8_t* cursor_;
54
};
55
57
template
<
typename
Container = std::vector<u
int
8_t>>
58
class
ResizableBufferWriter
final:
public
Writer
59
{
60
SEN_NOCOPY_NOMOVE(
ResizableBufferWriter
)
61
62
public
:
63
explicit
ResizableBufferWriter
(Container& buffer)
noexcept
: buffer_(buffer) {}
64
~ResizableBufferWriter
()
override
=
default
;
65
66
public
:
// implements sen::Writer
67
[[nodiscard]] uint8_t*
advance
(
size_t
size)
override
;
68
void
reverse
(
size_t
size)
override
69
{
70
SEN_ASSERT
(buffer_.size() >= size);
71
buffer_.resize(buffer_.size() - size);
72
}
73
74
private
:
75
Container& buffer_;
76
};
77
78
//----------------------------------------------------------------------------------------------------------------------
79
// Inline implementation
80
//----------------------------------------------------------------------------------------------------------------------
81
82
//--------------------------------------------------------------------------------------------------------------
83
// BufferWriter
84
//--------------------------------------------------------------------------------------------------------------
85
86
inline
uint8_t*
BufferWriter::advance
(
size_t
size)
87
{
88
auto
* oldCursor = cursor_;
89
cursor_ += size;
// NOLINT(cppcoreguidelines-pro-bounds-pointer-arithmetic)
90
return
oldCursor;
91
}
92
93
//--------------------------------------------------------------------------------------------------------------
94
// ResizableBufferWriter
95
//--------------------------------------------------------------------------------------------------------------
96
97
template
<
typename
Container>
98
inline
uint8_t*
ResizableBufferWriter<Container>::advance
(
size_t
size)
99
{
100
const
auto
cursor = buffer_.size();
101
buffer_.resize(buffer_.size() + size);
102
return
buffer_.data() + cursor;
// NOLINT(cppcoreguidelines-pro-bounds-pointer-arithmetic)
103
}
104
105
}
// namespace sen
106
107
#endif
// SEN_CORE_IO_BUFFER_WRITER_H
assert.h
The following macros implement a replacement of assert that is connected to the overall fault handlin...
sen::BufferWriter::~BufferWriter
~BufferWriter() override=default
sen::BufferWriter::BufferWriter
BufferWriter(Span< uint8_t > buffer) noexcept
Definition
buffer_writer.h:42
sen::BufferWriter::reverse
void reverse(size_t size) override
Moves the cursor 'size' bytes.
Definition
buffer_writer.h:47
sen::BufferWriter::advance
uint8_t * advance(size_t size) override
Returns a buffer of 'size' bytes, owned by the writer.
Definition
buffer_writer.h:86
sen::ResizableBufferWriter::~ResizableBufferWriter
~ResizableBufferWriter() override=default
sen::ResizableBufferWriter::ResizableBufferWriter
ResizableBufferWriter(Container &buffer) noexcept
Definition
buffer_writer.h:63
sen::ResizableBufferWriter::reverse
void reverse(size_t size) override
Moves the cursor 'size' bytes.
Definition
buffer_writer.h:68
sen::ResizableBufferWriter::advance
uint8_t * advance(size_t size) override
Returns a buffer of 'size' bytes, owned by the writer.
Definition
buffer_writer.h:98
sen::Span
Contiguous view of elements of type T. Inspired by http://www.open-std.org/jtc1/sc22/wg21/docs/papers...
Definition
span.h:34
sen::Writer::advance
virtual uint8_t * advance(size_t size)=0
Returns a buffer of 'size' bytes, owned by the writer.
sen::Writer::reverse
virtual void reverse(size_t size)=0
Moves the cursor 'size' bytes.
sen::Writer::Writer
Writer() noexcept=default
SEN_ASSERT
#define SEN_ASSERT(expr)
Checks an intermediate result produced by a procedure (not an input or output). NOLINTNEXTLINE.
Definition
assert.h:39
sen
Definition
assert.h:17
span.h
libs
core
include
sen
core
io
buffer_writer.h
Generated by
1.17.0