dissect formatter and tests added

[SVN r68124]
This commit is contained in:
Pavol Droba
2011-01-13 21:21:37 +00:00
parent 823b199df3
commit 9d25072f2f
3 changed files with 66 additions and 3 deletions

View File

@ -87,6 +87,31 @@ namespace boost {
} }
}; };
// 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 detail
} // namespace algorithm } // namespace algorithm
} // namespace boost } // namespace boost

View File

@ -36,7 +36,7 @@ namespace boost {
//! Constant formatter //! 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. the same value, regardless of the parameter.
\param Format A predefined value used as a result for formating \param Format A predefined value used as a result for formating
@ -55,7 +55,7 @@ namespace boost {
//! Identity formatter //! Identity formatter
/*! /*!
Construct the \c identity_formatter. Identity formatter always returns Constructs an \c identity_formatter. Identity formatter always returns
the parameter. the parameter.
\return An instance of the \c identity_formatter object. \return An instance of the \c identity_formatter object.
@ -73,7 +73,7 @@ namespace boost {
//! Empty formatter //! 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. sequence.
\param Input container used to select a correct value_type for the \param Input container used to select a correct value_type for the
@ -89,6 +89,22 @@ namespace boost {
BOOST_STRING_TYPENAME range_value<RangeT>::type>(); 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 } // namespace algorithm
@ -96,6 +112,7 @@ namespace boost {
using algorithm::const_formatter; using algorithm::const_formatter;
using algorithm::identity_formatter; using algorithm::identity_formatter;
using algorithm::empty_formatter; using algorithm::empty_formatter;
using algorithm::dissect_formatter;
} // namespace boost } // namespace boost

View File

@ -11,6 +11,9 @@
#include <boost/algorithm/string/erase.hpp> #include <boost/algorithm/string/erase.hpp>
#include <boost/algorithm/string/std/list_traits.hpp> #include <boost/algorithm/string/std/list_traits.hpp>
#include <boost/algorithm/string/std/string_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 unit test framework
#include <boost/test/included/test_exec_monitor.hpp> #include <boost/test/included/test_exec_monitor.hpp>
@ -285,6 +288,23 @@ void collection_comp_test()
} }
} }
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 // test main
int test_main( int, char*[] ) int test_main( int, char*[] )
{ {
@ -297,6 +317,7 @@ int test_main( int, char*[] )
replace_tail_test(); replace_tail_test();
replace_range_test(); replace_range_test();
collection_comp_test(); collection_comp_test();
dissect_format_test();
return 0; return 0;
} }