1 /* -*- c-basic-offset:2; tab-width:2; indent-tabs-mode:nil -*- */
2 
3 #ifndef __EF_PARSER_H__
4 #define __EF_PARSER_H__
5 
6 #include <pobl/bl_types.h> /* size_t */
7 
8 #include "ef_char.h"
9 
10 typedef struct ef_parser {
11   /* private */
12   u_char *str;
13   size_t marked_left;
14   size_t left;
15 
16   /* public */
17   int is_eos;
18 
19   /* public */
20   void (*init)(struct ef_parser *);
21   void (*set_str)(struct ef_parser *, u_char *str, size_t size);
22   void (*destroy)(struct ef_parser *);
23   int (*next_char)(struct ef_parser *, ef_char_t *);
24 
25 } ef_parser_t;
26 
27 #define ef_parser_increment(parser) __ef_parser_increment((ef_parser_t *)parser)
28 
29 #define ef_parser_n_increment(parser, n) __ef_parser_n_increment((ef_parser_t *)parser, n)
30 
31 #define ef_parser_reset(parser) __ef_parser_reset((ef_parser_t *)parser)
32 
33 #define ef_parser_full_reset(parser) __ef_parser_full_reset((ef_parser_t *)parser)
34 
35 #define ef_parser_mark(parser) __ef_parser_mark((ef_parser_t *)parser)
36 
37 void ef_parser_init(ef_parser_t *parser);
38 
39 size_t __ef_parser_increment(ef_parser_t *parser);
40 
41 size_t __ef_parser_n_increment(ef_parser_t *parser, size_t n);
42 
43 void __ef_parser_mark(ef_parser_t *parser);
44 
45 void __ef_parser_reset(ef_parser_t *parser);
46 
47 void __ef_parser_full_reset(ef_parser_t *parser);
48 
49 int ef_parser_next_char(ef_parser_t *parser, ef_char_t *ch);
50 
51 #endif
52