2 * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
3 * Redistribution and modifications are permitted subject to BSD license.
5 #ifndef _CONSTR_CHOICE_H_
6 #define _CONSTR_CHOICE_H_
8 #include <asn_application.h>
14 typedef struct asn_CHOICE_specifics_s {
16 * Target structure description.
18 unsigned struct_size; /* Size of the target structure. */
19 unsigned ctx_offset; /* Offset of the asn_codec_ctx_t member */
20 unsigned pres_offset; /* Identifier of the present member */
21 unsigned pres_size; /* Size of the identifier (enum) */
24 * Tags to members mapping table.
26 const asn_TYPE_tag2member_t *tag2el;
27 unsigned tag2el_count;
29 /* Canonical ordering of CHOICE elements, for PER */
30 const unsigned *to_canonical_order;
31 const unsigned *from_canonical_order;
34 * Extensions-related stuff.
36 signed ext_start; /* First member of extensions, or -1 */
37 } asn_CHOICE_specifics_t;
40 * A set specialized functions dealing with the CHOICE type.
42 asn_struct_free_f CHOICE_free;
43 asn_struct_print_f CHOICE_print;
44 asn_struct_compare_f CHOICE_compare;
45 asn_constr_check_f CHOICE_constraint;
46 ber_type_decoder_f CHOICE_decode_ber;
47 der_type_encoder_f CHOICE_encode_der;
48 xer_type_decoder_f CHOICE_decode_xer;
49 xer_type_encoder_f CHOICE_encode_xer;
50 oer_type_decoder_f CHOICE_decode_oer;
51 oer_type_encoder_f CHOICE_encode_oer;
52 per_type_decoder_f CHOICE_decode_uper;
53 per_type_encoder_f CHOICE_encode_uper;
54 asn_outmost_tag_f CHOICE_outmost_tag;
55 asn_random_fill_f CHOICE_random_fill;
56 extern asn_TYPE_operation_t asn_OP_CHOICE;
59 * Return the 1-based choice variant presence index.
60 * Returns 0 in case of error.
62 unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td,
63 const void *structure_ptr);
66 * Sets or resets the 1-based choice variant presence index.
67 * In case a previous index is not zero, the currently selected structure
68 * member is freed and zeroed-out first.
69 * Returns 0 on success and -1 on error.
71 int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td,
72 void *structure_ptr, unsigned present);
78 #endif /* _CONSTR_CHOICE_H_ */