|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r55274 - in sandbox/SOC/2009/unicode/boost: iterator unicode
From: loufoque_at_[hidden]
Date: 2009-07-30 14:45:04
Author: mgaunard
Date: 2009-07-29 20:17:12 EDT (Wed, 29 Jul 2009)
New Revision: 55274
URL: http://svn.boost.org/trac/boost/changeset/55274
Log:
Adding non-const range overloads
Text files modified:
sandbox/SOC/2009/unicode/boost/iterator/consumer_iterator.hpp | 11 +++++++++
sandbox/SOC/2009/unicode/boost/iterator/pipe_iterator.hpp | 11 +++++++++
sandbox/SOC/2009/unicode/boost/unicode/graphemes.hpp | 37 ++++++++++++++++++++++++++++++++
sandbox/SOC/2009/unicode/boost/unicode/search.hpp | 1
sandbox/SOC/2009/unicode/boost/unicode/utf.hpp | 46 ++++++++++++++++++++++++++++++++++++++++
5 files changed, 105 insertions(+), 1 deletions(-)
Modified: sandbox/SOC/2009/unicode/boost/iterator/consumer_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/unicode/boost/iterator/consumer_iterator.hpp (original)
+++ sandbox/SOC/2009/unicode/boost/iterator/consumer_iterator.hpp 2009-07-29 20:17:12 EDT (Wed, 29 Jul 2009)
@@ -231,6 +231,17 @@
make_consumer_iterator(boost::begin(range), boost::end(range), boost::end(range), c)
);
}
+
+template<typename Range, typename Consumer>
+boost::iterator_range<
+ consumer_iterator<typename boost::range_iterator<Range>::type, Consumer>
+> consumed(Range& range, Consumer c)
+{
+ return boost::make_iterator_range(
+ make_consumer_iterator(boost::begin(range), boost::end(range), boost::begin(range), c),
+ make_consumer_iterator(boost::begin(range), boost::end(range), boost::end(range), c)
+ );
+}
} // namespace boost
Modified: sandbox/SOC/2009/unicode/boost/iterator/pipe_iterator.hpp
==============================================================================
--- sandbox/SOC/2009/unicode/boost/iterator/pipe_iterator.hpp (original)
+++ sandbox/SOC/2009/unicode/boost/iterator/pipe_iterator.hpp 2009-07-29 20:17:12 EDT (Wed, 29 Jul 2009)
@@ -252,6 +252,17 @@
);
}
+template<typename Range, typename Pipe>
+boost::iterator_range<
+ pipe_iterator<typename boost::range_iterator<Range>::type, Pipe>
+> piped(Range& range, Pipe p)
+{
+ return boost::make_iterator_range(
+ make_pipe_iterator(boost::begin(range), boost::end(range), boost::begin(range), p),
+ make_pipe_iterator(boost::begin(range), boost::end(range), boost::end(range), p)
+ );
+}
+
template<typename Range, typename Pipe, typename OutputIterator>
OutputIterator pipe(const Range& range, Pipe pipe, OutputIterator out)
{
Modified: sandbox/SOC/2009/unicode/boost/unicode/graphemes.hpp
==============================================================================
--- sandbox/SOC/2009/unicode/boost/unicode/graphemes.hpp (original)
+++ sandbox/SOC/2009/unicode/boost/unicode/graphemes.hpp 2009-07-29 20:17:12 EDT (Wed, 29 Jul 2009)
@@ -49,6 +49,20 @@
return consumed(range, make_boundary_consumer(unicode::grapheme_boundary()));
}
+/** Adapts the range of code points \c range into a range of ranges of code points,
+ * each subrange being a grapheme cluster. */
+template<typename Range>
+iterator_range<typename boost::detail::unspecified<
+ consumer_iterator<
+ typename range_iterator<Range>::type,
+ boundary_consumer<unicode::grapheme_boundary>
+ >
+>::type>
+grapheme_bounded(Range& range)
+{
+ return consumed(range, make_boundary_consumer(unicode::grapheme_boundary()));
+}
+
/** INTERNAL ONLY */
#define BOOST_UNICODE_GRAPHEME_BOUNDED_DEF(Name) \
/** Adapts the range of Name units \c range into a range of ranges of
@@ -74,6 +88,29 @@
); \
} \
\
+/** Adapts the range of Name units \c range into a range of ranges of
+Name units, each subrange being a grapheme cluster. */ \
+template<typename Range> \
+iterator_range<typename boost::detail::unspecified< \
+ consumer_iterator< \
+ typename range_iterator<Range>::type, \
+ piped_consumer< \
+ unicode::Name##_decoder, \
+ boundary_consumer<unicode::grapheme_boundary> \
+ > \
+ > \
+>::type> \
+Name##_grapheme_bounded(Range& range) \
+{ \
+ return consumed( \
+ range, \
+ make_piped_consumer( \
+ unicode::Name##_decoder(), \
+ make_boundary_consumer(unicode::grapheme_boundary()) \
+ ) \
+ ); \
+} \
+ \
/** Model of \c BoundaryChecker that tells whether a position lies on a
grapheme cluster boundary within a range of Name units. */ \
typedef multi_boundary< \
Modified: sandbox/SOC/2009/unicode/boost/unicode/search.hpp
==============================================================================
--- sandbox/SOC/2009/unicode/boost/unicode/search.hpp (original)
+++ sandbox/SOC/2009/unicode/boost/unicode/search.hpp 2009-07-29 20:17:12 EDT (Wed, 29 Jul 2009)
@@ -4,7 +4,6 @@
#include <boost/range.hpp>
#include <boost/algorithm/string/compare.hpp>
-
namespace boost
{
Modified: sandbox/SOC/2009/unicode/boost/unicode/utf.hpp
==============================================================================
--- sandbox/SOC/2009/unicode/boost/unicode/utf.hpp (original)
+++ sandbox/SOC/2009/unicode/boost/unicode/utf.hpp 2009-07-29 20:17:12 EDT (Wed, 29 Jul 2009)
@@ -41,6 +41,21 @@
return piped(range, make_one_many_pipe(unicode::Name##_encoder()));\
} \
\
+/** Lazily evalutes unicode::Name##_encoder by returning a range adapter
+ that wraps the range \c range and converts it step-by-step as
+ the range is advanced */ \
+template<typename Range> \
+iterator_range<typename boost::detail::unspecified< \
+ pipe_iterator< \
+ typename range_iterator<Range>::type, \
+ one_many_pipe<unicode::Name##_encoder> \
+ > \
+>::type> \
+Name##_encoded(Range& range) \
+{ \
+ return piped(range, make_one_many_pipe(unicode::Name##_encoder()));\
+} \
+ \
/** Lazily evalutes unicode::Name##_encoder by returning an output
iterator that wraps \c out and converts every pushed element. */ \
template<typename OutputIterator> \
@@ -81,6 +96,21 @@
return piped(range, unicode::Name##_decoder()); \
} \
\
+/** Lazily evalutes unicode::Name##_decoder by returning a range adapter
+ that wraps the range \c range and converts it step-by-step as
+ the range is advanced */ \
+template<typename Range> \
+iterator_range<typename boost::detail::unspecified< \
+ pipe_iterator< \
+ typename range_iterator<Range>::type, \
+ unicode::Name##_decoder \
+ > \
+>::type> \
+Name##_decoded(Range& range) \
+{ \
+ return piped(range, unicode::Name##_decoder()); \
+} \
+ \
/** Adapts the range of Name units \c range into a range of ranges of
Name units, each subrange being a decoded unit. */ \
template<typename Range> \
@@ -96,6 +126,22 @@
make_pipe_consumer(unicode::Name##_decoder()) \
); \
} \
+ \
+/** Adapts the range of Name units \c range into a range of ranges of
+Name units, each subrange being a decoded unit. */ \
+template<typename Range> \
+iterator_range<typename boost::detail::unspecified< \
+ consumer_iterator< \
+ typename range_iterator<Range>::type, \
+ pipe_consumer<unicode::Name##_decoder> \
+ > \
+>::type> Name##_bounded(Range& range) \
+{ \
+ return consumed( \
+ range, \
+ make_pipe_consumer(unicode::Name##_decoder()) \
+ ); \
+} \
BOOST_UNICODE_ENCODER_DEF(u16)
BOOST_UNICODE_DECODER_DEF(u16)
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