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