/*- * Copyright (c) 2003, 2004 Lev Walkin . All rights reserved. * Redistribution and modifications are permitted subject to BSD license. */ #ifndef _CONSTR_CHOICE_H_ #define _CONSTR_CHOICE_H_ #include /* * A single element of the CHOICE type. */ typedef struct asn1_CHOICE_element_s { int memb_offset; /* Offset of the element */ int optional; /* Whether the element is optional */ ber_tlv_tag_t tag; /* Outmost (most immediate) tag */ int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */ asn1_TYPE_descriptor_t *type; /* Member type descriptor */ char *name; /* ASN.1 identifier of the element */ } asn1_CHOICE_element_t; typedef struct asn1_CHOICE_tag2member_s { ber_tlv_tag_t el_tag; /* Outmost tag of the member */ int el_no; /* Index of the associated member, base 0 */ } asn1_CHOICE_tag2member_t; typedef struct asn1_CHOICE_specifics_s { /* * Target structure description. */ int struct_size; /* Size of the target structure. */ int ctx_offset; /* Offset of the ber_dec_ctx_t member */ int pres_offset; /* Identifier of the present member */ int pres_size; /* Size of the identifier (enum) */ /* * Members of the CHOICE structure. */ asn1_CHOICE_element_t *elements; int elements_count; /* * Tags to members mapping table. */ asn1_CHOICE_tag2member_t *tag2el; int tag2el_count; /* * Extensions-related stuff. */ int extensible; /* Whether CHOICE is extensible */ } asn1_CHOICE_specifics_t; /* * A set specialized functions dealing with the CHOICE type. */ asn_constr_check_f CHOICE_constraint; ber_type_decoder_f CHOICE_decode_ber; der_type_encoder_f CHOICE_encode_der; asn_outmost_tag_f CHOICE_outmost_tag; asn_struct_print_f CHOICE_print; asn_struct_free_f CHOICE_free; #endif /* _CONSTR_CHOICE_H_ */