Vanetza
Loading...
Searching...
No Matches
byte_view.cpp
1#include <vanetza/common/byte_view.hpp>
2#include <vanetza/common/byte_buffer_convertible.hpp>
3#include <cassert>
4#include <limits>
5
6namespace vanetza
7{
8
9namespace
10{
11
12boost::iterator_range<byte_view_iterator>
13make_safe_range(const ByteBuffer::const_iterator& begin, const ByteBuffer::const_iterator& end)
14{
15 if (begin < end) {
16 byte_view_iterator vbegin { begin };
17 byte_view_iterator vend { std::next(vbegin, std::distance(begin, end)) };
18 return boost::iterator_range<byte_view_iterator> { vbegin, vend };
19 } else {
21 return boost::iterator_range<byte_view_iterator> { empty, empty };
22 }
23}
24
25}
26
27byte_view_range::byte_view_range(const ByteBuffer::const_iterator& begin, const ByteBuffer::const_iterator& end) :
28 iterator_range(make_safe_range(begin, end))
29{
30}
31
33 iterator_range(begin, end)
34{
35}
36
37byte_view_range::byte_view_range(ByteBuffer&& _buffer) :
38 iterator_range(make_safe_range(_buffer.begin(), _buffer.end())), buffer(std::move(_buffer))
39{
40}
41
42ByteBuffer::const_pointer byte_view_range::data() const
43{
44 auto begin = this->begin();
45 return begin != this->end() ? begin.raw() : nullptr;
46}
47
48ByteBuffer::value_type byte_view_range::operator[](size_type pos) const
49{
50 assert(!std::numeric_limits<size_type>::is_signed || pos >= 0);
51 assert(pos < size());
52 return begin()[pos];
53}
54
55byte_view_range create_byte_view(ByteBuffer&& buffer)
56{
57 return byte_view_range { std::move(buffer) };
58}
59
60byte_view_range create_byte_view(const ByteBuffer& buffer)
61{
62 return byte_view_range { buffer.begin(), buffer.end() };
63}
64
65byte_view_range create_byte_view(const ByteBufferConvertible& convertible)
66{
67 ByteBuffer buffer;
68 convertible.convert(buffer);
69 return byte_view_range { std::move(buffer) };
70}
71
72} // namespace vanetza
value_type operator[](size_type) const
Definition byte_view.cpp:48
byte_view_range(const ByteBuffer::const_iterator &, const ByteBuffer::const_iterator &)
Definition byte_view.cpp:27
ByteBuffer::const_pointer data() const
Definition byte_view.cpp:42
STL namespace.