/*
 * 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 */

	struct asn1p_module_s *module;	/* Defined in module */
	int _lineno;	/* Number of line in the file */
} asn1p_ref_t;

/*
 * Constructor and destructor.
 */
asn1p_ref_t *asn1p_ref_new(int _lineno, asn1p_module_t *mod);
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 */
