summaryrefslogtreecommitdiff
path: root/source/kit/input_buffer.h
blob: 51fccbb46edd1c89c030f38486ef56328f9b4b8e (plain)
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
#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_handle_t;

kit_ib_handle_t kit_ib_wrap(kit_is_handle_t  upstream,
                            kit_allocator_t *alloc);

kit_ib_handle_t kit_ib_read(kit_ib_handle_t buf, i64 size);

typedef int (*kit_ib_read_condition_fn)(kit_str_t data);

kit_ib_handle_t kit_ib_read_while(kit_ib_handle_t          buf,
                                  kit_ib_read_condition_fn condition);

void kit_ib_destroy(kit_ib_handle_t buf);

#define KIT_IB_WRAP(upstream) kit_ib_wrap(upstream, NULL)

#ifndef KIT_DISABLE_SHORT_NAMES
#  define ib_handle_t kit_ib_handle_t
#  define ib_read_condition_fn kit_ib_read_condition_fn
#  define ib_wrap kit_ib_wrap
#  define ib_read kit_ib_read
#  define ib_read_while kit_ib_read_while
#  define ib_destroy kit_ib_destroy

#  define IB_WRAP KIT_IB_WRAP
#endif

#ifdef __cplusplus
}
#endif

#endif