blob: 1308bd4ace97609311d1eaf495f9f24aebd26be5 [file] [log] [blame]
vlmfa67ddc2004-06-03 03:38:44 +00001/*-
2 * Copyright (c) 2003, 2004 Lev Walkin <vlm@lionet.info>. All rights reserved.
3 * Redistribution and modifications are permitted subject to BSD license.
4 */
5#ifndef _CONSTR_CHOICE_H_
6#define _CONSTR_CHOICE_H_
7
8#include <constr_TYPE.h>
9
10/*
11 * A single element of the CHOICE type.
12 */
13typedef struct asn1_CHOICE_element_s {
14 int memb_offset; /* Offset of the element */
15 int optional; /* Whether the element is optional */
16 ber_tlv_tag_t tag; /* Outmost (most immediate) tag */
17 int tag_mode; /* IMPLICIT/no/EXPLICIT tag at current level */
vlm31473082004-06-06 07:20:02 +000018 asn1_TYPE_descriptor_t *type; /* Member type descriptor */
vlmfa67ddc2004-06-03 03:38:44 +000019 char *name; /* ASN.1 identifier of the element */
20} asn1_CHOICE_element_t;
21
vlmfa67ddc2004-06-03 03:38:44 +000022typedef struct asn1_CHOICE_specifics_s {
23 /*
24 * Target structure description.
25 */
26 int struct_size; /* Size of the target structure. */
27 int ctx_offset; /* Offset of the ber_dec_ctx_t member */
28 int pres_offset; /* Identifier of the present member */
29 int pres_size; /* Size of the identifier (enum) */
30
31 /*
32 * Members of the CHOICE structure.
33 */
34 asn1_CHOICE_element_t *elements;
35 int elements_count;
36
37 /*
38 * Tags to members mapping table.
39 */
vlm31473082004-06-06 07:20:02 +000040 asn1_TYPE_tag2member_t *tag2el;
vlmfa67ddc2004-06-03 03:38:44 +000041 int tag2el_count;
42
43 /*
44 * Extensions-related stuff.
45 */
46 int extensible; /* Whether CHOICE is extensible */
47} asn1_CHOICE_specifics_t;
48
49/*
50 * A set specialized functions dealing with the CHOICE type.
51 */
52asn_constr_check_f CHOICE_constraint;
53ber_type_decoder_f CHOICE_decode_ber;
54der_type_encoder_f CHOICE_encode_der;
55asn_outmost_tag_f CHOICE_outmost_tag;
56asn_struct_print_f CHOICE_print;
57asn_struct_free_f CHOICE_free;
58
59#endif /* _CONSTR_CHOICE_H_ */