#ifndef ASN1C_CONVERSION_HPP_9E5QN6UC #define ASN1C_CONVERSION_HPP_9E5QN6UC #include #include #include #include namespace vanetza { namespace convertible { template struct byte_buffer_impl : public byte_buffer { public: using wrapper_type = T; static_assert( std::is_base_of, T>::value, "Only asn1c_wrapper derivates are supported"); byte_buffer_impl(wrapper_type&& t) : m_wrapper(new wrapper_type(std::move(t))) { } byte_buffer_impl(std::shared_ptr other) : m_wrapper(other) { } void convert(ByteBuffer& buffer) const override { buffer = m_wrapper->encode(); } std::unique_ptr duplicate() const override { return std::unique_ptr { new byte_buffer_impl { m_wrapper } }; } std::size_t size() const override { return m_wrapper->size(); } std::shared_ptr wrapper() const { return m_wrapper; } private: std::shared_ptr m_wrapper; }; } // namespace convertible } // namespace vanetza #endif /* ASN1C_CONVERSION_HPP_9E5QN6UC */