/*
 * Object Identifier definition.
 */
#ifndef	ASN1_PARSER_OID_H
#define	ASN1_PARSER_OID_H

/********************************
 * Single Object Identifier Arc *
 ********************************/

/*
 * Object identifier arc (one number in the hierarchy).
 */
typedef struct asn1p_oid_arc_s {
	asn1_integer_t number;	/* -1 if not yet defined */
	char *name;	/* 0 if not defined */
} asn1p_oid_arc_t;


/*
 * Arc constructor.
 */
asn1p_oid_arc_t *asn1p_oid_arc_new(
	const char *optName, asn1_integer_t optNumber /* = -1 */);
/*
 * Arc destructor.
 */
void asn1p_oid_arc_free(asn1p_oid_arc_t *);


/**************************************************
 * Object Identifier itself, a collection of arcs *
 **************************************************/

/*
 * Object Identifier as a collection of arcs.
 */
typedef struct asn1p_oid_s {
	asn1p_oid_arc_t *arcs;
	int arcs_count;
} asn1p_oid_t;

/*
 * OID constructor.
 */
asn1p_oid_t *asn1p_oid_new(void);

/*
 * Add another arc using given one as a template
 */
int asn1p_oid_add_arc(asn1p_oid_t *, asn1p_oid_arc_t *template);

/*
 * OID destructor.
 */
void asn1p_oid_free(asn1p_oid_t *);

/*
 * RETURN VALUES:
 *	0: The specified OIDs are equal.
 *	-1 or 1 otherwise.
 */
int asn1p_oid_compare(asn1p_oid_t *a, asn1p_oid_t *b);


#endif	/* ASN1_PARSER_OID_H */
