| |
| /* |
| * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved. |
| * Redistribution and modifications are permitted subject to BSD license. |
| */ |
| #ifndef _CONSTR_CHOICE_H_ |
| #define _CONSTR_CHOICE_H_ |
| |
| #include <asn_application.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| typedef struct asn_CHOICE_specifics_s { |
| /* |
| * Target structure description. |
| */ |
| unsigned struct_size; /* Size of the target structure. */ |
| unsigned ctx_offset; /* Offset of the asn_codec_ctx_t member */ |
| unsigned pres_offset; /* Identifier of the present member */ |
| unsigned pres_size; /* Size of the identifier (enum) */ |
| |
| /* |
| * Tags to members mapping table. |
| */ |
| const asn_TYPE_tag2member_t *tag2el; |
| unsigned tag2el_count; |
| |
| /* Canonical ordering of CHOICE elements, for PER */ |
| const unsigned *to_canonical_order; |
| const unsigned *from_canonical_order; |
| |
| /* |
| * Extensions-related stuff. |
| */ |
| signed ext_start; /* First member of extensions, or -1 */ |
| } asn_CHOICE_specifics_t; |
| |
| /* |
| * A set specialized functions dealing with the CHOICE type. |
| */ |
| asn_struct_free_f CHOICE_free; |
| asn_struct_print_f CHOICE_print; |
| asn_struct_compare_f CHOICE_compare; |
| asn_constr_check_f CHOICE_constraint; |
| ber_type_decoder_f CHOICE_decode_ber; |
| der_type_encoder_f CHOICE_encode_der; |
| xer_type_decoder_f CHOICE_decode_xer; |
| xer_type_encoder_f CHOICE_encode_xer; |
| oer_type_decoder_f CHOICE_decode_oer; |
| oer_type_encoder_f CHOICE_encode_oer; |
| per_type_decoder_f CHOICE_decode_uper; |
| per_type_encoder_f CHOICE_encode_uper; |
| per_type_decoder_f CHOICE_decode_aper; |
| per_type_encoder_f CHOICE_encode_aper; |
| asn_outmost_tag_f CHOICE_outmost_tag; |
| asn_random_fill_f CHOICE_random_fill; |
| extern asn_TYPE_operation_t asn_OP_CHOICE; |
| |
| /* |
| * Return the 1-based choice variant presence index. |
| * Returns 0 in case of error. |
| */ |
| unsigned CHOICE_variant_get_presence(const asn_TYPE_descriptor_t *td, |
| const void *structure_ptr); |
| |
| /* |
| * Sets or resets the 1-based choice variant presence index. |
| * In case a previous index is not zero, the currently selected structure |
| * member is freed and zeroed-out first. |
| * Returns 0 on success and -1 on error. |
| */ |
| int CHOICE_variant_set_presence(const asn_TYPE_descriptor_t *td, |
| void *structure_ptr, unsigned present); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _CONSTR_CHOICE_H_ */ |