SIM-115: update simulator to use latest E2SM KPM version 3
[sim/e2-interface.git] / e2sim / asn1c / aper_encoder.h
1 /*-
2  * Copyright (c) 2006-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
3  * Redistribution and modifications are permitted subject to BSD license.
4  */
5 #ifndef _APER_ENCODER_H_
6 #define _APER_ENCODER_H_
7
8 #include <asn_application.h>
9 #include <aper_support.h>
10
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14
15 struct asn_TYPE_descriptor_s;   /* Forward declaration */
16
17 /*
18  * Aligned PER encoder of any ASN.1 type. May be invoked by the application.
19  * WARNING: This function returns the number of encoded bits in the .encoded
20  * field of the return value. Use the following formula to convert to bytes:
21  *      bytes = ((.encoded + 7) / 8)
22  */
23 asn_enc_rval_t aper_encode(
24     const struct asn_TYPE_descriptor_s *type_descriptor,
25     const asn_per_constraints_t *constraints,
26     const void *struct_ptr,                     /* Structure to be encoded */
27     asn_app_consume_bytes_f *consume_bytes_cb,  /* Data collector */
28     void *app_key                               /* Arbitrary callback argument */
29 );
30
31 /*
32  * A variant of aper_encode() which encodes data into the existing buffer
33  * WARNING: This function returns the number of encoded bits in the .encoded
34  * field of the return value.
35  */
36 asn_enc_rval_t aper_encode_to_buffer(
37     const struct asn_TYPE_descriptor_s *type_descriptor,
38     const asn_per_constraints_t *constraints,
39     const void *struct_ptr,  /* Structure to be encoded */
40     void *buffer,            /* Pre-allocated buffer */
41     size_t buffer_size       /* Initial buffer size (max) */
42 );
43
44 /*
45  * A variant of aper_encode_to_buffer() which allocates buffer itself.
46  * Returns the number of bytes in the buffer or -1 in case of failure.
47  * WARNING: This function produces a "Production of the complete encoding",
48  * with length of at least one octet. Contrast this to precise bit-packing
49  * encoding of aper_encode() and aper_encode_to_buffer().
50  */
51 ssize_t
52 aper_encode_to_new_buffer(
53     const struct asn_TYPE_descriptor_s *td,
54     const asn_per_constraints_t *constraints,
55     const void *sptr,
56     void **buffer_r
57 );
58
59 #ifdef __cplusplus
60 }
61 #endif
62
63 #endif  /* _APER_ENCODER_H_ */