1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#ifndef KIT_INPUT_BUFFER_H
#define KIT_INPUT_BUFFER_H
#include "string_builder.h"
#include "input_stream.h"
#include "status.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
kit_status_t status;
i64 offset;
void *internal;
kit_str_builder_t data;
} kit_ib_t;
typedef i8 (*kit_ib_read_condition_fn)(kit_str_t data, void *context);
kit_ib_t kit_ib_wrap(kit_is_handle_t upstream,
kit_allocator_t *alloc);
kit_ib_t kit_ib_copy(kit_ib_t buf);
kit_ib_t kit_ib_read(kit_ib_t buf, i64 size);
kit_ib_t kit_ib_any(kit_ib_t buf, kit_str_t data);
kit_ib_t kit_ib_none(kit_ib_t buf, kit_str_t data);
kit_ib_t kit_ib_exact(kit_ib_t buf, kit_str_t data);
kit_ib_t kit_ib_until(kit_ib_t buf, kit_str_t data);
kit_ib_t kit_ib_while(kit_ib_t buf,
kit_ib_read_condition_fn condition,
void *context);
void kit_ib_destroy(kit_ib_t buf);
#define KIT_IB_WRAP(upstream) kit_ib_wrap(upstream, NULL)
#define KIT_IB_SKIP(buf_, proc_, ...) \
do { \
kit_ib_t temp_buf_ = (buf_); \
(buf_) = proc_((buf_), __VA_ARGS__); \
kit_ib_destroy((temp_buf_)); \
} while (0)
#ifdef __cplusplus
}
#endif
#ifndef KIT_DISABLE_SHORT_NAMES
# define ib_t kit_ib_t
# define ib_read_condition_fn kit_ib_read_condition_fn
# define ib_wrap kit_ib_wrap
# define ib_copy kit_ib_copy
# define ib_read kit_ib_read
# define ib_any kit_ib_any
# define ib_none kit_ib_none
# define ib_exact kit_ib_exact
# define ib_until kit_ib_until
# define ib_while kit_ib_while
# define ib_destroy kit_ib_destroy
# define IB_WRAP KIT_IB_WRAP
# define IB_SKIP KIT_IB_SKIP
#endif
#endif
|