1#ifndef ASN1C_WRAPPER_HPP_ZCNDO8E5
2#define ASN1C_WRAPPER_HPP_ZCNDO8E5
4#include <vanetza/asn1/support/asn_system.h>
5#include <vanetza/asn1/support/constr_TYPE.h>
6#include <vanetza/common/byte_buffer.hpp>
16void* allocate(std::size_t);
17void free(asn_TYPE_descriptor_t&,
void*);
18void* copy(asn_TYPE_descriptor_t&,
const void*);
19bool validate(asn_TYPE_descriptor_t&,
const void*);
20bool validate(asn_TYPE_descriptor_t&,
const void*, std::string&);
21std::size_t size_per(asn_TYPE_descriptor_t&,
const void*);
22std::size_t size_oer(asn_TYPE_descriptor_t&,
const void*);
23ByteBuffer encode_per(asn_TYPE_descriptor_t&,
const void*);
24bool decode_per(asn_TYPE_descriptor_t&,
void**,
const ByteBuffer&);
25bool decode_per(asn_TYPE_descriptor_t&,
void**,
const void* buffer, std::size_t size);
26ByteBuffer encode_oer(asn_TYPE_descriptor_t&,
const void*);
27bool decode_oer(asn_TYPE_descriptor_t&,
void**,
const ByteBuffer&);
28bool decode_oer(asn_TYPE_descriptor_t&,
void**,
const void* buffer, std::size_t size);
33 return static_cast<T*
>(allocate(
sizeof(T)));
44 m_struct(vanetza::asn1::allocate<asn1c_type>()), m_type(desc) {}
49 m_struct(
static_cast<asn1c_type*
>(copy(other.m_type, other.m_struct))), m_type(other.m_type) {}
59 m_struct(
nullptr), m_type(other.m_type) {
swap(other); }
67 asn1c_type& operator*() {
return *m_struct; }
68 asn1c_type* operator->() {
return m_struct; }
69 const asn1c_type& operator*()
const {
return *m_struct; }
70 const asn1c_type* operator->()
const {
return m_struct; }
73 const asn1c_type* content()
const {
return m_struct; }
74 asn1c_type* content() {
return m_struct; }
83 return vanetza::asn1::validate(m_type, m_struct);
93 return vanetza::asn1::validate(m_type, m_struct, error);
102 std::swap(m_struct, other.m_struct);
103 std::swap(m_type, other.m_type);
107 asn1c_type* m_struct;
108 asn_TYPE_descriptor_t& m_type;
112void swap(asn1c_wrapper_common<T>& lhs, asn1c_wrapper_common<T>& rhs)
131 return vanetza::asn1::encode_per(base::m_type, base::m_struct);
141 return vanetza::asn1::decode_per(base::m_type, (
void**)&(base::m_struct), buffer);
144 bool decode(ByteBuffer::const_iterator begin, ByteBuffer::const_iterator end)
146 return vanetza::asn1::decode_per(base::m_type, (
void**)&(base::m_struct), &(*begin), std::distance(begin, end));
149 bool decode(
const void* buffer, std::size_t len)
151 return vanetza::asn1::decode_per(base::m_type, (
void**)&(base::m_struct), buffer, len);
160 return vanetza::asn1::size_per(base::m_type, base::m_struct);
165using asn1c_wrapper = asn1c_per_wrapper<T>;
181 return vanetza::asn1::encode_oer(base::m_type, base::m_struct);
192 return vanetza::asn1::decode_oer(base::m_type, (
void**)&(base::m_struct), buffer);
195 bool decode(ByteBuffer::const_iterator begin, ByteBuffer::const_iterator end)
197 return vanetza::asn1::decode_oer(base::m_type, (
void**)&(base::m_struct), &(*begin), std::distance(begin, end));
200 bool decode(
const void* buffer, std::size_t len)
202 return vanetza::asn1::decode_oer(base::m_type, (
void**)&(base::m_struct), buffer, len);
211 return vanetza::asn1::size_oer(base::m_type, base::m_struct);
ByteBuffer encode() const
bool decode(const ByteBuffer &buffer)
ByteBuffer encode() const
bool decode(const ByteBuffer &buffer)
void swap(asn1c_wrapper_common &other) noexcept
bool validate(std::string &error) const