From 349e569a9f6eda5eb9eca6acd7ada163684660b9 Mon Sep 17 00:00:00 2001 From: John Kerl Date: Mon, 7 Sep 2015 22:29:17 -0400 Subject: [PATCH] [read-performance iterate] ring-buffer complete --- c/input/peek_file_reader.h | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/c/input/peek_file_reader.h b/c/input/peek_file_reader.h index 305aa7f54a..54ef3ba206 100644 --- a/c/input/peek_file_reader.h +++ b/c/input/peek_file_reader.h @@ -7,6 +7,11 @@ #include "lib/mlr_globals.h" #include "input/byte_reader.h" +// This is a ring-buffered peekahead file/string reader. + +// Note: Throughout Miller as a general rule I treat struct attributes as if +// there were private attributes. However, for performance, parse_trie_match +// accesses this ring buffer directly. typedef struct _peek_file_reader_t { byte_reader_t* pbr; int peekbuflen; @@ -16,11 +21,6 @@ typedef struct _peek_file_reader_t { int npeeked; } peek_file_reader_t; -// xxx needing contextual comments here. - -// xxx to do: try using a ring buffer (power-of-two length >= buflen) instead -// of the current slipback buffer, for performance - // ---------------------------------------------------------------- static inline peek_file_reader_t* pfr_alloc(byte_reader_t* pbr, int maxnpeek) { peek_file_reader_t* pfr = mlr_malloc_or_die(sizeof(peek_file_reader_t)); @@ -67,7 +67,6 @@ static inline char pfr_read_char(peek_file_reader_t* pfr) { if (pfr->npeeked < 1) { return pfr->pbr->pread_func(pfr->pbr); } else { - // xxx to do: make this a ring buffer to avoid the shifts. char c = pfr->peekbuf[pfr->sob]; pfr->sob = (pfr->sob + 1) & pfr->peekbuflenmask; pfr->npeeked--;