| /* |
| * Generic reference to the yet unknown type defined elsewhere. |
| */ |
| #ifndef ASN1_PARSER_REFERENCE_H |
| #define ASN1_PARSER_REFERENCE_H |
| |
| typedef struct asn1p_ref_s { |
| |
| /* |
| * A set of reference name components. |
| * A reference name consists of several components separated by dots: |
| * "OBJECT-CLASS.&Algorithm.&id" |
| */ |
| struct asn1p_ref_component_s { |
| enum asn1p_ref_lex_type_e { |
| RLT_UNKNOWN, /* Invalid? */ |
| /* |
| * Object class reference "OCLASS1", |
| * type reference "Type1", |
| * value reference "id", |
| * type field reference "&Type1", |
| * value field reference "&id", |
| * "OBJECT-CLASS" |
| */ |
| RLT_CAPITALS, |
| RLT_Uppercase, |
| RLT_lowercase, |
| RLT_AmpUppercase, |
| RLT_Amplowercase, |
| RLT_Atlowercase, |
| RLT_AtDotlowercase, |
| RLT_MAX |
| } lex_type; /* Inferred lexical type of the identifier */ |
| char *name; /* An identifier */ |
| } *components; |
| |
| int comp_count; /* Number of the components in the reference name. */ |
| int comp_size; /* Number of allocated structures */ |
| |
| int _lineno; /* Number of line in the file */ |
| } asn1p_ref_t; |
| |
| /* |
| * Constructor and destructor. |
| */ |
| asn1p_ref_t *asn1p_ref_new(int _lineno); |
| void asn1p_ref_free(asn1p_ref_t *); |
| |
| asn1p_ref_t *asn1p_ref_clone(asn1p_ref_t *ref); |
| |
| /* |
| * Add a new reference component to the existing reference structure. |
| * |
| * RETURN VALUES: |
| * 0: All clear. |
| * -1/EINVAL: Invalid arguments |
| * -1/ENOMEM: Memory allocation failed |
| */ |
| int asn1p_ref_add_component(asn1p_ref_t *, |
| char *name, enum asn1p_ref_lex_type_e); |
| |
| #endif /* ASN1_PARSER_REFERENCE_H */ |