Lines Matching refs:reader
23 void StackLineReader_Initialize(StackLineReader* reader, int fd) { in StackLineReader_Initialize() argument
24 reader->view.ptr = reader->buffer; in StackLineReader_Initialize()
25 reader->view.size = 0; in StackLineReader_Initialize()
26 reader->skip_mode = false; in StackLineReader_Initialize()
27 reader->fd = fd; in StackLineReader_Initialize()
31 static int LoadFullBuffer(StackLineReader* reader) { in LoadFullBuffer() argument
32 const int read = CpuFeatures_ReadFile(reader->fd, reader->buffer, in LoadFullBuffer()
35 reader->view.ptr = reader->buffer; in LoadFullBuffer()
36 reader->view.size = read; in LoadFullBuffer()
41 static int LoadMore(StackLineReader* reader) { in LoadMore() argument
42 char* const ptr = reader->buffer + reader->view.size; in LoadMore()
43 const size_t size_to_read = STACK_LINE_READER_BUFFER_SIZE - reader->view.size; in LoadMore()
44 const int read = CpuFeatures_ReadFile(reader->fd, ptr, size_to_read); in LoadMore()
47 reader->view.size += read; in LoadMore()
51 static int IndexOfEol(StackLineReader* reader) { in IndexOfEol() argument
52 return CpuFeatures_StringView_IndexOfChar(reader->view, '\n'); in IndexOfEol()
57 static int BringToFrontAndLoadMore(StackLineReader* reader) { in BringToFrontAndLoadMore() argument
58 if (reader->view.size && reader->view.ptr != reader->buffer) { in BringToFrontAndLoadMore()
59 memmove(reader->buffer, reader->view.ptr, reader->view.size); in BringToFrontAndLoadMore()
61 reader->view.ptr = reader->buffer; in BringToFrontAndLoadMore()
62 return LoadMore(reader); in BringToFrontAndLoadMore()
67 static void SkipToNextLine(StackLineReader* reader) { in SkipToNextLine() argument
69 const int read = LoadFullBuffer(reader); in SkipToNextLine()
73 const int eol_index = IndexOfEol(reader); in SkipToNextLine()
75 reader->view = in SkipToNextLine()
76 CpuFeatures_StringView_PopFront(reader->view, eol_index + 1); in SkipToNextLine()
104 LineResult StackLineReader_NextLine(StackLineReader* reader) { in StackLineReader_NextLine() argument
105 if (reader->skip_mode) { in StackLineReader_NextLine()
106 SkipToNextLine(reader); in StackLineReader_NextLine()
107 reader->skip_mode = false; in StackLineReader_NextLine()
111 reader->view.size < STACK_LINE_READER_BUFFER_SIZE; in StackLineReader_NextLine()
112 int eol_index = IndexOfEol(reader); in StackLineReader_NextLine()
114 const int read = BringToFrontAndLoadMore(reader); in StackLineReader_NextLine()
116 return CreateEOFLineResult(reader->view); in StackLineReader_NextLine()
118 eol_index = IndexOfEol(reader); in StackLineReader_NextLine()
121 reader->skip_mode = true; in StackLineReader_NextLine()
122 return CreateTruncatedLineResult(reader->view); in StackLineReader_NextLine()
126 CpuFeatures_StringView_KeepFront(reader->view, eol_index); in StackLineReader_NextLine()
127 reader->view = in StackLineReader_NextLine()
128 CpuFeatures_StringView_PopFront(reader->view, eol_index + 1); in StackLineReader_NextLine()