#include #include namespace vanetza { namespace geonet { VariantPdu::VariantPdu(const Pdu& pdu) : m_basic(pdu.basic()), m_common(pdu.common()), m_extended(pdu.extended_variant()), m_secured(pdu.secured() ? boost::make_optional(*pdu.secured()) : boost::none) { } VariantPdu::VariantPdu(const VariantPdu& pdu) : VariantPdu(static_cast(pdu)) { } VariantPdu& VariantPdu::operator=(const VariantPdu& pdu) { return operator=(static_cast(pdu)); } VariantPdu& VariantPdu::operator=(const Pdu& pdu) { m_basic = pdu.basic(); m_common = pdu.common(); m_extended = pdu.extended_variant(); if (pdu.secured()) { m_secured = *pdu.secured(); } else { m_secured = boost::none; } return *this; } BasicHeader& VariantPdu::basic() { return m_basic; } const BasicHeader& VariantPdu::basic() const { return m_basic; } CommonHeader& VariantPdu::common() { return m_common; } const CommonHeader& VariantPdu::common() const { return m_common; } HeaderVariant& VariantPdu::extended_variant() { return m_extended; } HeaderConstRefVariant VariantPdu::extended_variant() const { return m_extended; } VariantPdu::SecuredMessage* VariantPdu::secured() { return m_secured.get_ptr(); } const VariantPdu::SecuredMessage* VariantPdu::secured() const { return m_secured.get_ptr(); } void VariantPdu::secured(const SecuredMessage& smsg) { m_secured = smsg; } void VariantPdu::secured(SecuredMessage&& smsg) { m_secured.emplace(std::move(smsg)); } std::unique_ptr VariantPdu::clone() const { return std::unique_ptr { new VariantPdu(*this) }; } } // namespace geonet } // namespace vanetza