From 436933f73fd7587b91bd98d25df1cdfb49ebbb4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20L=C3=BChne?= Date: Sat, 24 Jun 2017 18:58:28 +0200 Subject: [PATCH] Added function to dermine stream location from arbitrary positions. --- lib/tokenize/include/tokenize/Stream.h | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/lib/tokenize/include/tokenize/Stream.h b/lib/tokenize/include/tokenize/Stream.h index 556eccc..c52ec2f 100644 --- a/lib/tokenize/include/tokenize/Stream.h +++ b/lib/tokenize/include/tokenize/Stream.h @@ -104,10 +104,10 @@ class Stream return m_position; } - Location location() const + Location location(StreamPosition position) const { // Find current section - auto section = std::upper_bound(m_sections.cbegin(), m_sections.cend(), m_position, + auto section = std::upper_bound(m_sections.cbegin(), m_sections.cend(), position, [&](const auto &lhs, const auto &rhs) { return lhs < rhs.position; @@ -118,20 +118,25 @@ class Stream section--; // Find line (row) in the file - auto line = std::lower_bound(section->newlines.cbegin(), section->newlines.cend(), m_position); + auto line = std::lower_bound(section->newlines.cbegin(), section->newlines.cend(), position); if (line == section->newlines.cbegin()) { const auto row = 1; - const auto column = static_cast(m_position - section->position + 1); + const auto column = static_cast(position - section->position + 1); - return {m_position, section->name, section->name, row, row, column, column}; + return {position, section->name, section->name, row, row, column, column}; } const auto row = static_cast(line - section->newlines.cbegin() + 1); - const auto column = static_cast(m_position - *(line - 1)); + const auto column = static_cast(position - *(line - 1)); - return {m_position, section->name, section->name, row, row, column, column}; + return {position, section->name, section->name, row, row, column, column}; + } + + Location location() const + { + return location(m_position); } const std::vector
§ions() const