blob: 893dec3a80554194b4b33a0c08ab357f029f05d5 [file] [log] [blame]
Lev Walkinf15320b2004-06-03 03:38:44 +00001/*
2 * CLASS-related stuff.
3 */
4#ifndef ASN1_PARSER_CLASS_H
5#define ASN1_PARSER_CLASS_H
6
Lev Walkin8d35c462005-02-25 13:32:12 +00007#include "asn1p_ref.h"
Lev Walkinf15320b2004-06-03 03:38:44 +00008
Lev Walkind370e9f2006-03-16 10:03:35 +00009struct asn1p_expr_s; /* Forward declaration */
10
11typedef struct asn1p_ioc_row_s {
12 struct asn1p_ioc_cell_s {
13 struct asn1p_expr_s *field; /* may never be NULL */
14 struct asn1p_expr_s *value; /* may be left uninitialized */
Bi-Ruei, Chiu80fd3062017-05-07 21:00:51 +080015 int new_ref;
Lev Walkind370e9f2006-03-16 10:03:35 +000016 } *column;
17 int columns;
18 int max_identifier_length;
19} asn1p_ioc_row_t;
20
21asn1p_ioc_row_t *asn1p_ioc_row_new(struct asn1p_expr_s *oclass);
22void asn1p_ioc_row_delete(asn1p_ioc_row_t *);
23struct asn1p_ioc_cell_s *asn1p_ioc_row_cell_fetch(asn1p_ioc_row_t *,
24 const char *fieldname);
25
Lev Walkinf15320b2004-06-03 03:38:44 +000026/*
27 * WITH SYNTAX free-form chunks.
28 */
29typedef struct asn1p_wsyntx_chunk_s {
Lev Walkin9d542d22006-03-14 16:31:37 +000030 enum {
31 WC_LITERAL,
Lev Walkin57074f12006-03-16 05:11:14 +000032 WC_WHITESPACE,
Lev Walkind370e9f2006-03-16 10:03:35 +000033 WC_FIELD,
Lev Walkin9d542d22006-03-14 16:31:37 +000034 WC_OPTIONALGROUP
35 } type;
Lev Walkinf15320b2004-06-03 03:38:44 +000036 /*
Lev Walkin57074f12006-03-16 05:11:14 +000037 * WC_LITERAL -> {token}
38 * WC_WHITESPACE -> {token}
Lev Walkind370e9f2006-03-16 10:03:35 +000039 * WC_FIELD -> {token}
Lev Walkin9d542d22006-03-14 16:31:37 +000040 * WC_OPTIONALGROUP -> {syntax}
Lev Walkinf15320b2004-06-03 03:38:44 +000041 */
Lev Walkin9d542d22006-03-14 16:31:37 +000042 union {
Lev Walkind370e9f2006-03-16 10:03:35 +000043 char *token;
Lev Walkin9d542d22006-03-14 16:31:37 +000044 struct asn1p_wsyntx_s *syntax;
45 } content;
Lev Walkinf15320b2004-06-03 03:38:44 +000046
47 TQ_ENTRY(struct asn1p_wsyntx_chunk_s) next;
48} asn1p_wsyntx_chunk_t;
49
50typedef struct asn1p_wsyntx_s {
51
Bi-Ruei, Chiu80fd3062017-05-07 21:00:51 +080052 struct asn1p_wsyntx_chunk_s *parent;
53
Lev Walkinf15320b2004-06-03 03:38:44 +000054 TQ_HEAD(struct asn1p_wsyntx_chunk_s) chunks;
55
56} asn1p_wsyntx_t;
57
58
59/*
60 * Constructor, destructor and cloning function.
61 */
62asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_new(void);
63void asn1p_wsyntx_chunk_free(asn1p_wsyntx_chunk_t *);
64asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_clone(asn1p_wsyntx_chunk_t *);
65
66asn1p_wsyntx_t *asn1p_wsyntx_new(void);
67void asn1p_wsyntx_free(asn1p_wsyntx_t *);
68asn1p_wsyntx_t *asn1p_wsyntx_clone(asn1p_wsyntx_t *);
69
70/*
71 * RETURN VALUES:
72 * 0: Component has been added
73 * -1: Failure to add component (refer to errno)
74 */
Lev Walkinc46b7cb2006-08-18 02:27:55 +000075asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_fromstring(char *token, int _copy);
Lev Walkin9d542d22006-03-14 16:31:37 +000076asn1p_wsyntx_chunk_t *asn1p_wsyntx_chunk_fromsyntax(asn1p_wsyntx_t *syntax);
Lev Walkinf15320b2004-06-03 03:38:44 +000077
78
79#endif /* ASN1_PARSER_CLASS_H */