From 1b57e247b8d1a7a41a8ee45d6d524c71edd63a81 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 26 May 2017 17:20:30 +0200 Subject: Optimize char_scanner if used with ifdstream --- libbutl/char-scanner.ixx | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'libbutl/char-scanner.ixx') diff --git a/libbutl/char-scanner.ixx b/libbutl/char-scanner.ixx index 2d96207..0e00dfd 100644 --- a/libbutl/char-scanner.ixx +++ b/libbutl/char-scanner.ixx @@ -29,4 +29,35 @@ namespace butl unget_ = true; ungetc_ = c; } + + inline auto char_scanner:: + peek_ () -> int_type + { + if (gptr_ != egptr_) + return *gptr_; + + int_type r (is_.peek ()); + + // Update buffer pointers for the next chunk. + // + if (buf_ != nullptr) + { + gptr_ = buf_->gptr (); + egptr_ = buf_->egptr (); + } + + return r; + } + + inline void char_scanner:: + get_ () + { + if (gptr_ != egptr_) + { + buf_->gbump (1); + ++gptr_; + } + else + is_.get (); // About as fast as ignore() and way faster than tellg(). + } } -- cgit v1.1