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&);
21int compare(asn_TYPE_descriptor_t&,
const void*,
const void*);
22int print(FILE* stream, asn_TYPE_descriptor_t&,
const void*);
23std::size_t size_per(asn_TYPE_descriptor_t&,
const void*);
24std::size_t size_oer(asn_TYPE_descriptor_t&,
const void*);
25std::size_t size_xer(asn_TYPE_descriptor_t&,
const void*);
26ByteBuffer encode_per(asn_TYPE_descriptor_t&,
const void*);
27bool decode_per(asn_TYPE_descriptor_t&,
void**,
const ByteBuffer&);
28bool decode_per(asn_TYPE_descriptor_t&,
void**,
const void* buffer, std::size_t size);
29ByteBuffer encode_oer(asn_TYPE_descriptor_t&,
const void*);
30bool decode_oer(asn_TYPE_descriptor_t&,
void**,
const ByteBuffer&);
31bool decode_oer(asn_TYPE_descriptor_t&,
void**,
const void* buffer, std::size_t size);
32ByteBuffer encode_xer(asn_TYPE_descriptor_t&,
const void*);
33bool decode_xer(asn_TYPE_descriptor_t&,
void**,
const ByteBuffer&);
34bool decode_xer(asn_TYPE_descriptor_t&,
void**,
const void* buffer, std::size_t size);
39 return static_cast<T*>(allocate(
sizeof(T)));
49 asn1c_wrapper_common(asn_TYPE_descriptor_t& desc) :
50 m_struct(vanetza::asn1::allocate<asn1c_type>()), m_type(desc) {}
51 asn1c_wrapper_common(asn_TYPE_descriptor_t& desc,
const T* ptr) :
52 m_struct(
static_cast<T*>(copy(desc, ptr))), m_type(desc) {}
53 ~asn1c_wrapper_common() { vanetza::asn1::free(m_type, m_struct); }
57 m_struct(
static_cast<asn1c_type*>(copy(other.m_type, other.m_struct))), m_type(other.m_type) {}
67 m_struct(
nullptr), m_type(other.m_type) {
swap(other
); }
75 asn1c_type& operator*() {
return *m_struct; }
76 asn1c_type* operator->() {
return m_struct; }
77 const asn1c_type& operator*()
const {
return *m_struct; }
78 const asn1c_type* operator->()
const {
return m_struct; }
81 const asn1c_type* content()
const {
return m_struct; }
82 asn1c_type* content() {
return m_struct; }
87 return vanetza::asn1::compare(m_type, m_struct, rhs.m_struct) == 0;
91 return vanetza::asn1::compare(m_type, m_struct, rhs.m_struct) != 0;
95
96
97
98
101 return vanetza::asn1::validate(m_type, m_struct);
105
106
107
108
111 return vanetza::asn1::validate(m_type, m_struct, error);
115
116
117
118
121 return vanetza::asn1::compare(m_type, m_struct, other.m_struct);
125
126
127
130 return vanetza::asn1::print(stdout, m_type, m_struct);
134
135
136
137
140 return vanetza::asn1::print(stream, m_type, m_struct);
144
145
146
149 std::swap(m_struct, other.m_struct);
150 std::swap(m_type, other.m_type);
154 asn1c_type* m_struct;
155 asn_TYPE_descriptor_t& m_type;
173
174
175
178 return vanetza::asn1::encode_per(base::m_type, base::m_struct);
182
183
184
185
188 return vanetza::asn1::decode_per(base::m_type, (
void**)&(base::m_struct), buffer);
191 bool decode(ByteBuffer::const_iterator begin, ByteBuffer::const_iterator end)
193 return vanetza::asn1::decode_per(base::m_type, (
void**)&(base::m_struct), &(*begin), std::distance(begin, end));
196 bool decode(
const void* buffer, std::size_t len)
198 return vanetza::asn1::decode_per(base::m_type, (
void**)&(base::m_struct), buffer, len);
202
203
204
207 return vanetza::asn1::size_per(base::m_type, base::m_struct);
223
224
225
228 return vanetza::asn1::encode_oer(base::m_type, base::m_struct);
232
233
234
235
236
239 return vanetza::asn1::decode_oer(base::m_type, (
void**)&(base::m_struct), buffer);
242 bool decode(ByteBuffer::const_iterator begin, ByteBuffer::const_iterator end)
244 return vanetza::asn1::decode_oer(base::m_type, (
void**)&(base::m_struct), &(*begin), std::distance(begin, end));
247 bool decode(
const void* buffer, std::size_t len)
249 return vanetza::asn1::decode_oer(base::m_type, (
void**)&(base::m_struct), buffer, len);
253
254
255
258 return vanetza::asn1::size_oer(base::m_type, base::m_struct);
270
271
272
275 return vanetza::asn1::encode_xer(base::m_type, base::m_struct);
279
280
281
282
285 return vanetza::asn1::decode_xer(base::m_type, (
void**)&(base::m_struct), buffer);
288 bool decode(ByteBuffer::const_iterator begin, ByteBuffer::const_iterator end)
290 return vanetza::asn1::decode_xer(base::m_type, (
void**)&(base::m_struct), &(*begin), std::distance(begin, end));
293 bool decode(
const void* buffer, std::size_t len)
295 return vanetza::asn1::decode_xer(base::m_type, (
void**)&(base::m_struct), buffer, len);
299
300
301
304 return vanetza::asn1::size_xer(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
int compare(const asn1c_wrapper_common &other) const
bool validate(std::string &error) const
int print(FILE *stream) const
ByteBuffer encode() const
bool decode(const ByteBuffer &buffer)