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

	size_t comp_count;	/* Number of the components in the reference name. */
	size_t 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);

void asn1p_ref_set_source(asn1p_ref_t *, asn1p_module_t *module, int lineno);


/*
 * Lexicographically compare references.
 */
int asn1p_ref_compare(const asn1p_ref_t *, const asn1p_ref_t *);

/*
 * Return a pointer to a statically allocated buffer representing the
 * complete reference.
 */
const char *asn1p_ref_string(const asn1p_ref_t *);

/*
 * 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 *,
	const char *name, enum asn1p_ref_lex_type_e);

#endif	/* ASN1_PARSER_REFERENCE_H */
