From 81720992931b8d68788cc8a1b8722374c19cf627 Mon Sep 17 00:00:00 2001 From: Matthew Zipkin Date: Wed, 18 Mar 2026 16:23:15 -0400 Subject: [PATCH] util: get number of bytes consumed from buffer by LineReader --- src/test/util_string_tests.cpp | 6 ++++++ src/util/string.cpp | 5 +++++ src/util/string.h | 5 +++++ 3 files changed, 16 insertions(+) diff --git a/src/test/util_string_tests.cpp b/src/test/util_string_tests.cpp index 77576950854..ad54db45208 100644 --- a/src/test/util_string_tests.cpp +++ b/src/test/util_string_tests.cpp @@ -195,9 +195,13 @@ BOOST_AUTO_TEST_CASE(line_reader_test) // Check three lines terminated by \n and \r\n, trimming whitespace const std::vector input{StringToBuffer("once upon a time\n there was a dog \r\nwho liked food\n")}; LineReader reader(input, /*max_line_length=*/128); + BOOST_CHECK_EQUAL(reader.Consumed(), 0); + BOOST_CHECK_EQUAL(reader.Remaining(), 51); std::optional line1{reader.ReadLine()}; + BOOST_CHECK_EQUAL(reader.Consumed(), 17); BOOST_CHECK_EQUAL(reader.Remaining(), 34); std::optional line2{reader.ReadLine()}; + BOOST_CHECK_EQUAL(reader.Consumed(), 36); BOOST_CHECK_EQUAL(reader.Remaining(), 15); std::optional line3{reader.ReadLine()}; std::optional line4{reader.ReadLine()}; @@ -208,6 +212,8 @@ BOOST_AUTO_TEST_CASE(line_reader_test) BOOST_CHECK_EQUAL(line1.value(), "once upon a time"); BOOST_CHECK_EQUAL(line2.value(), "there was a dog"); BOOST_CHECK_EQUAL(line3.value(), "who liked food"); + BOOST_CHECK_EQUAL(reader.Consumed(), 51); + BOOST_CHECK_EQUAL(reader.Remaining(), 0); } { // Do not exceed max_line_length + 1 while searching for \n diff --git a/src/util/string.cpp b/src/util/string.cpp index 6e86095a15f..d1ef7a185f1 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -70,4 +70,9 @@ size_t LineReader::Remaining() const { return std::distance(it, end); } + +size_t LineReader::Consumed() const +{ + return std::distance(start, it); +} } // namespace util diff --git a/src/util/string.h b/src/util/string.h index 20c78583040..64b49bb04a0 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -295,6 +295,11 @@ struct LineReader { * Returns remaining size of bytes in buffer */ size_t Remaining() const; + + /** + * Returns number of bytes already read from buffer + */ + size_t Consumed() const; }; } // namespace util