$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r68124 - in trunk: boost/algorithm/string boost/algorithm/string/detail libs/algorithm/string/test
From: droba_at_[hidden]
Date: 2011-01-13 16:21:39
Author: pavol_droba
Date: 2011-01-13 16:21:37 EST (Thu, 13 Jan 2011)
New Revision: 68124
URL: http://svn.boost.org/trac/boost/changeset/68124
Log:
dissect formatter and tests added
Text files modified: 
   trunk/boost/algorithm/string/detail/formatter.hpp |    25 +++++++++++++++++++++++++               
   trunk/boost/algorithm/string/formatter.hpp        |    23 ++++++++++++++++++++---                 
   trunk/libs/algorithm/string/test/replace_test.cpp |    21 +++++++++++++++++++++                   
   3 files changed, 66 insertions(+), 3 deletions(-)
Modified: trunk/boost/algorithm/string/detail/formatter.hpp
==============================================================================
--- trunk/boost/algorithm/string/detail/formatter.hpp	(original)
+++ trunk/boost/algorithm/string/detail/formatter.hpp	2011-01-13 16:21:37 EST (Thu, 13 Jan 2011)
@@ -87,6 +87,31 @@
                 }
             };
 
+//  dissect format functor ----------------------------------------------------//
+
+			// dissect format functor
+			template<typename FinderT>
+			struct dissect_formatF
+			{
+			public:
+				// Construction
+				dissect_formatF(FinderT Finder) :
+				  m_Finder(Finder) {}
+
+				  // Operation
+				  template<typename RangeT>
+				  inline iterator_range< 
+					  BOOST_STRING_TYPENAME range_const_iterator<RangeT>::type>
+				  operator()(const RangeT& Replace) const
+				  {
+					  return m_Finder(::boost::begin(Replace), ::boost::end(Replace));
+				  }
+
+			private:
+				FinderT m_Finder;
+			};
+
+
         } // namespace detail
     } // namespace algorithm
 } // namespace boost
Modified: trunk/boost/algorithm/string/formatter.hpp
==============================================================================
--- trunk/boost/algorithm/string/formatter.hpp	(original)
+++ trunk/boost/algorithm/string/formatter.hpp	2011-01-13 16:21:37 EST (Thu, 13 Jan 2011)
@@ -36,7 +36,7 @@
 
         //! Constant formatter
         /*!
-            Construct the \c const_formatter. Const formatter always returns
+            Constructs a \c const_formatter. Const formatter always returns
             the same value, regardless of the parameter.
 
             \param Format A predefined value used as a result for formating
@@ -55,7 +55,7 @@
 
         //! Identity formatter
         /*!
-            Construct the \c identity_formatter. Identity formatter always returns
+            Constructs an \c identity_formatter. Identity formatter always returns
             the parameter.
 
             \return An instance of the \c identity_formatter object.
@@ -73,7 +73,7 @@
 
         //! Empty formatter
         /*!
-            Construct the \c empty_formatter. Empty formatter always returns an empty
+            Constructs an \c empty_formatter. Empty formatter always returns an empty
             sequence. 
 
             \param Input container used to select a correct value_type for the
@@ -89,6 +89,22 @@
                 BOOST_STRING_TYPENAME range_value<RangeT>::type>();
         }
 
+		//! Empty formatter
+		/*!
+			Constructs a \c dissect_formatter. Dissect formatter uses a specified finder
+			to extract a portion of the formatted sequence. The first finder's match is returned 
+			as a result
+
+			\param Finder a finder used to select a portion of the formated sequence
+			\return An instance of the \c dissect_formatter object.
+		*/
+		template<typename FinderT>
+		inline detail::dissect_formatF< FinderT >
+		dissect_formatter(const FinderT& Finder)
+		{
+			return detail::dissect_formatF<FinderT>(Finder);
+		}
+
 
     } // namespace algorithm
 
@@ -96,6 +112,7 @@
     using algorithm::const_formatter;
     using algorithm::identity_formatter;
     using algorithm::empty_formatter;
+	using algorithm::dissect_formatter;
 
 } // namespace boost
 
Modified: trunk/libs/algorithm/string/test/replace_test.cpp
==============================================================================
--- trunk/libs/algorithm/string/test/replace_test.cpp	(original)
+++ trunk/libs/algorithm/string/test/replace_test.cpp	2011-01-13 16:21:37 EST (Thu, 13 Jan 2011)
@@ -11,6 +11,9 @@
 #include <boost/algorithm/string/erase.hpp>
 #include <boost/algorithm/string/std/list_traits.hpp>
 #include <boost/algorithm/string/std/string_traits.hpp>
+#include <boost/algorithm/string/finder.hpp>
+#include <boost/algorithm/string/formatter.hpp>
+#include <boost/algorithm/string/classification.hpp>
 
 // Include unit test framework
 #include <boost/test/included/test_exec_monitor.hpp>
@@ -285,6 +288,23 @@
     }   
 }
 
+void dissect_format_test()
+{
+	BOOST_CHECK(
+		find_format_all_copy(
+			string("aBc123Abc"), 
+			first_finder("abc", is_iequal()), 
+			dissect_formatter(token_finder(is_upper())))=="B123A");
+
+
+	BOOST_CHECK(
+		find_format_all_copy(
+			string("abc   123   abc"),
+			token_finder(is_space(), token_compress_on),
+			dissect_formatter(head_finder(1)))=="abc 123 abc");
+
+}
+
 // test main 
 int test_main( int, char*[] )
 {
@@ -297,6 +317,7 @@
     replace_tail_test();
     replace_range_test();
     collection_comp_test();
+	dissect_format_test();
 
     return 0;
 }