| 100 | } |
| 101 | |
| 102 | LineColumn CharStream::translatePositionToLineColumn(int _position) const |
| 103 | { |
| 104 | using size_type = std::string::size_type; |
| 105 | using diff_type = std::string::difference_type; |
| 106 | size_type searchPosition = std::min<size_type>(m_source.size(), size_type(_position)); |
| 107 | int lineNumber = static_cast<int>(count(m_source.begin(), m_source.begin() + diff_type(searchPosition), '\n')); |
| 108 | size_type lineStart; |
| 109 | if (searchPosition == 0) |
| 110 | lineStart = 0; |
| 111 | else |
| 112 | { |
| 113 | lineStart = m_source.rfind('\n', searchPosition - 1); |
| 114 | lineStart = lineStart == std::string::npos ? 0 : lineStart + 1; |
| 115 | } |
| 116 | return LineColumn{lineNumber, static_cast<int>(searchPosition - lineStart)}; |
| 117 | } |
| 118 | |
| 119 | std::string_view CharStream::text(SourceLocation const& _location) const |
| 120 | { |