1#ifndef BYTE_BUFFER_CONVERTIBLE_HPP_CFOQNR35
2#define BYTE_BUFFER_CONVERTIBLE_HPP_CFOQNR35
4#include <vanetza/common/byte_buffer.hpp>
17 virtual void convert(ByteBuffer&)
const = 0;
18 virtual std::size_t size()
const = 0;
19 virtual std::unique_ptr<byte_buffer> duplicate()
const;
20 virtual ~byte_buffer() {}
29 byte_buffer_impl(ByteBuffer&& buffer) : m_buffer(std::move(buffer)) {}
30 void convert(ByteBuffer& buf)
const override { buf = m_buffer; }
31 std::size_t size()
const override {
return m_buffer.size(); }
37struct byte_buffer_impl<std::unique_ptr<ByteBuffer>> :
public byte_buffer
39 byte_buffer_impl(std::unique_ptr<ByteBuffer> buf) :
40 m_buffer(std::move(buf)) {}
41 void convert(ByteBuffer& buf)
const override { buf = *m_buffer; }
42 std::size_t size()
const override {
return m_buffer->size(); }
44 std::unique_ptr<ByteBuffer> m_buffer;
48struct byte_buffer_impl<std::string> :
public byte_buffer
50 byte_buffer_impl(
const std::string& str);
51 byte_buffer_impl(std::string&& str);
52 void convert(ByteBuffer& buffer)
const override;
53 std::size_t size()
const override;
59struct byte_buffer_impl<std::nullptr_t> :
public byte_buffer
61 void convert(ByteBuffer& buffer)
const override { buffer.clear(); }
62 std::size_t size()
const override {
return 0; }
63 std::unique_ptr<byte_buffer> duplicate()
const override;
69
70
71
72
73
74
75
76
80 ByteBufferConvertible() :
81 m_wrapper(
new convertible::byte_buffer_impl<std::nullptr_t>()) {}
83 ByteBufferConvertible(std::unique_ptr<convertible::byte_buffer> ptr) :
84 m_wrapper(std::move(ptr)) {}
87 ByteBufferConvertible(T&& t) :
88 m_wrapper(
new convertible::byte_buffer_impl<
typename std::decay<T>::type>(std::forward<T>(t))) {}
96 void convert(ByteBuffer& destination)
const { m_wrapper->convert(destination); }
97 std::size_t size()
const {
return m_wrapper->size(); }
99 const convertible::
byte_buffer* ptr()
const {
return m_wrapper.get(); }
100 convertible::
byte_buffer* ptr() {
return m_wrapper.get(); }
103 std::unique_ptr<convertible::byte_buffer> m_wrapper;
ChunckPacket is a packet consisting of several memory chunks.
ByteBufferConvertible & operator[](OsiLayer ol)
ChunkPacket & merge(ChunkPacket &packet, OsiLayer from, OsiLayer to)
const ByteBufferConvertible & layer(OsiLayer ol) const
const ByteBufferConvertible & operator[](OsiLayer ol) const
ByteBufferConvertible & layer(OsiLayer ol)
std::size_t size(OsiLayer from, OsiLayer to) const
ChunkPacket extract(OsiLayer from, OsiLayer to)
std::size_t size(OsiLayer from, OsiLayer to) const
std::size_t size(OsiLayer single_layer) const
value_type operator[](size_type) const
byte_view_range(ByteBuffer &&)
byte_view_range(const ByteBuffer::const_iterator &, const ByteBuffer::const_iterator &)
ByteBuffer::const_pointer data() const