Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r61333 - trunk/libs/spirit/example/scheme/support
From: joel_at_[hidden]
Date: 2010-04-17 04:44:20


Author: djowel
Date: 2010-04-17 04:44:20 EDT (Sat, 17 Apr 2010)
New Revision: 61333
URL: http://svn.boost.org/trac/boost/changeset/61333

Log:
line_pos_iterator: a lighweight line position iterator.
Text files modified:
   trunk/libs/spirit/example/scheme/support/line_pos_iterator.hpp | 26 +++++++++++++++++++++++++-
   1 files changed, 25 insertions(+), 1 deletions(-)

Modified: trunk/libs/spirit/example/scheme/support/line_pos_iterator.hpp
==============================================================================
--- trunk/libs/spirit/example/scheme/support/line_pos_iterator.hpp (original)
+++ trunk/libs/spirit/example/scheme/support/line_pos_iterator.hpp 2010-04-17 04:44:20 EDT (Sat, 17 Apr 2010)
@@ -16,7 +16,9 @@
     // line_pos_iterator: a lighweight line position iterator. This iterator
     // adapter only stores the current line number, nothing else. Unlike
     // spirit classic's position_iterator, it does not store the column
- // number and does not need an end iterator.
+ // number and does not need an end iterator. The current column can be
+ // computed, if needed. Some utilities line oriented are provided
+ // including computation of the current column.
     ///////////////////////////////////////////////////////////////////////////
     template <typename Iterator>
     class line_pos_iterator
@@ -104,6 +106,28 @@
             last = upper_bound;
         return iterator_range<Iterator>(first, last);
     }
+
+ // Get the current column. Applicable to any iterator.
+ template <typename Iterator>
+ inline std::size_t
+ get_column(
+ Iterator lower_bound, Iterator current, int tabs = 4)
+ {
+ std::size_t column = 1;
+ Iterator first = get_line_start(lower_bound, current);
+ for (Iterator i = first; i != current; ++i)
+ {
+ switch (*i)
+ {
+ case '\t':
+ column += tabs - (column - 1) % tabs;
+ break;
+ default:
+ ++column;
+ }
+ }
+ return column;
+ }
 }
 
 #endif


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk