/* * A generic value of different syntaxes. */ #ifndef ASN1_PARSER_VALUE_H #define ASN1_PARSER_VALUE_H /* * A wrapper around various kinds of values. */ typedef struct asn1p_value_s { /* * The value of the element. */ enum { ATV_NOVALUE, ATV_REFERENCED, ATV_REAL, ATV_INTEGER, ATV_MIN, ATV_MAX, ATV_FALSE, ATV_TRUE, ATV_STRING, ATV_UNPARSED, ATV_BITVECTOR, } type; /* Value type and location */ union { asn1p_ref_t *reference; asn1_integer_t v_integer; double v_double; /* * Binary bits vector. */ struct { uint8_t *buf; int size; } string; struct { uint8_t *bits; int size_in_bits; } binary_vector; } value; } asn1p_value_t; /* * Constructors and destructor for value. * If ref, bits or buffer are omitted, the corresponding function returns * (asn1p_value_t *)0 with errno = EINVAL. * Allocated value (where applicable) is guaranteed to be NUL-terminated. */ asn1p_value_t *asn1p_value_fromref(asn1p_ref_t *ref, int do_copy); asn1p_value_t *asn1p_value_frombits(uint8_t *bits, int size_in_bits, int dc); asn1p_value_t *asn1p_value_frombuf(char *buffer, int size, int do_copy); asn1p_value_t *asn1p_value_fromdouble(double); asn1p_value_t *asn1p_value_fromint(asn1_integer_t); asn1p_value_t *asn1p_value_clone(asn1p_value_t *); void asn1p_value_free(asn1p_value_t *); #endif /* ASN1_PARSER_VALUE_H */