1 /* 2 * Generic reference to the yet unknown type defined elsewhere. 3 */ 4 #ifndef ASN1_PARSER_REFERENCE_H 5 #define ASN1_PARSER_REFERENCE_H 6 7 typedef struct asn1p_ref_s { 8 9 /* 10 * A set of reference name components. 11 * A reference name consists of several components separated by dots: 12 * "OBJECT-CLASS.&Algorithm.&id" 13 */ 14 struct asn1p_ref_component_s { 15 enum asn1p_ref_lex_type_e { 16 RLT_UNKNOWN, /* Invalid? */ 17 /* 18 * Object class reference "OCLASS1", 19 * type reference "Type1", 20 * value reference "id", 21 * type field reference "&Type1", 22 * value field reference "&id", 23 * "OBJECT-CLASS" 24 */ 25 RLT_CAPITALS, 26 RLT_Uppercase, 27 RLT_lowercase, 28 RLT_AmpUppercase, 29 RLT_Amplowercase, 30 RLT_Atlowercase, 31 RLT_AtDotlowercase, 32 RLT_MAX 33 } lex_type; /* Inferred lexical type of the identifier */ 34 char *name; /* An identifier */ 35 } *components; 36 37 int comp_count; /* Number of the components in the reference name. */ 38 int comp_size; /* Number of allocated structures */ 39 40 int _lineno; /* Number of line in the file */ 41 } asn1p_ref_t; 42 43 /* 44 * Constructor and destructor. 45 */ 46 asn1p_ref_t *asn1p_ref_new(int _lineno); 47 void asn1p_ref_free(asn1p_ref_t *); 48 49 asn1p_ref_t *asn1p_ref_clone(asn1p_ref_t *ref); 50 51 /* 52 * Add a new reference component to the existing reference structure. 53 * 54 * RETURN VALUES: 55 * 0: All clear. 56 * -1/EINVAL: Invalid arguments 57 * -1/ENOMEM: Memory allocation failed 58 */ 59 int asn1p_ref_add_component(asn1p_ref_t *, 60 char *name, enum asn1p_ref_lex_type_e); 61 62 #endif /* ASN1_PARSER_REFERENCE_H */ 63