Vanetza
 
Loading...
Searching...
No Matches
pdu_conversion.cpp
1#include "pdu_conversion.hpp"
2#include "serialization_buffer.hpp"
3#include <cassert>
4
5namespace vanetza
6{
7namespace convertible
8{
9
10typedef std::unique_ptr<vanetza::geonet::Pdu> PduPtr;
11
12void byte_buffer_impl<PduPtr>::convert(ByteBuffer& dest) const
13{
14 assert(m_pdu);
15 dest.clear();
16 geonet::serialize_into_buffer(*m_pdu, dest);
17}
18
19std::size_t byte_buffer_impl<PduPtr>::size() const
20{
21 assert(m_pdu);
22 return get_length(*m_pdu);
23}
24
25std::unique_ptr<byte_buffer> byte_buffer_impl<PduPtr>::duplicate() const
26{
27 assert(m_pdu);
28 PduPtr duplicate { m_pdu->clone() };
29 std::unique_ptr<byte_buffer> result {
30 new byte_buffer_impl<PduPtr>(std::move(duplicate))
31 };
32 return result;
33}
34
35} // namespace convertible
36
37namespace geonet
38{
39
40Pdu* pdu_cast(ByteBufferConvertible& convertible)
41{
42 using convertible_pdu_t = convertible::byte_buffer_impl<std::unique_ptr<Pdu>>;
43 auto convertible_pdu = dynamic_cast<convertible_pdu_t*>(convertible.ptr());
44 return convertible_pdu ? convertible_pdu->m_pdu.get() : nullptr;
45}
46
47} // namespace geonet
48} // namespace vanetza
49