#include "pdu_conversion.hpp" #include "serialization_buffer.hpp" #include namespace vanetza { namespace convertible { typedef std::unique_ptr PduPtr; void byte_buffer_impl::convert(ByteBuffer& dest) const { assert(m_pdu); dest.clear(); geonet::serialize_into_buffer(*m_pdu, dest); } std::size_t byte_buffer_impl::size() const { assert(m_pdu); return get_length(*m_pdu); } std::unique_ptr byte_buffer_impl::duplicate() const { assert(m_pdu); PduPtr duplicate { m_pdu->clone() }; std::unique_ptr result { new byte_buffer_impl(std::move(duplicate)) }; return result; } } // namespace convertible namespace geonet { Pdu* pdu_cast(ByteBufferConvertible& convertible) { using convertible_pdu_t = convertible::byte_buffer_impl>; auto convertible_pdu = dynamic_cast(convertible.ptr()); return convertible_pdu ? convertible_pdu->m_pdu.get() : nullptr; } } // namespace geonet } // namespace vanetza