46 const int32_t buffer_size = 1024*64;
47 char buff[buffer_size];
48 char* end = buff + buffer_size;
49 bool continue_reading =
true;
50 int32_t start_writting = 0;
51 uint32_t reserved_for_lookahead = 1024*2;
54 std::vector<token_pos> tokens(1024);
59 int32_t bytes_read = 0;
60 continue_reading = fn((uint8_t*)buff + start_writting, bytes_read, buffer_size - start_writting);
67 char* p_eol =
nullptr;
69 if (bytes_read < buffer_size - start_writting)
71 end = buff + start_writting + bytes_read;
74 if (!continue_reading || p >= end - reserved_for_lookahead)
76 reserved_for_lookahead = 0;
79 while (p < end - reserved_for_lookahead)
81 p_eol = (
char*)memchr(p,
'\n', end - p);
108 if (token_idx >= tokens.size())
111 if (end - p_eol > 1) {
112 const char* p_after_eol = p_eol + 1;
113 if (*p_after_eol ==
'\n') {
114 token_pos& token = tokens[tokens.size() - 1];
131 if (p < end && *p ==
'\n')
135 token_pos& token = tokens[token_idx - 1];
145 start_writting = end - p;
146 memcpy(buff, p, start_writting);
149 }
while (continue_reading);