90 lines
3.2 KiB
Plaintext
90 lines
3.2 KiB
Plaintext
// Boost string_algo library find_format_store.hpp header file ---------------------------//
|
|
|
|
// Copyright Pavol Droba 2002-2003.
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0.
|
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
|
// http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
// See http://www.boost.org/ for updates, documentation, and revision history.
|
|
|
|
#ifndef BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
|
|
#define BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
|
|
|
|
#include <boost/algorithm/string/config.hpp>
|
|
#include <boost/range/iterator_range_core.hpp>
|
|
|
|
namespace boost {
|
|
namespace algorithm {
|
|
namespace detail {
|
|
|
|
// temporary format and find result storage --------------------------------//
|
|
|
|
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
|
|
#pragma warning(push)
|
|
#pragma warning(disable:4512) //assignment operator could not be generated
|
|
#endif
|
|
template<
|
|
typename ForwardIteratorT,
|
|
typename FormatterT,
|
|
typename FormatResultT >
|
|
class find_format_store :
|
|
public iterator_range<ForwardIteratorT>
|
|
{
|
|
public:
|
|
// typedefs
|
|
typedef iterator_range<ForwardIteratorT> base_type;
|
|
typedef FormatterT formatter_type;
|
|
typedef FormatResultT format_result_type;
|
|
|
|
public:
|
|
// Construction
|
|
find_format_store(
|
|
const base_type& FindResult,
|
|
const format_result_type& FormatResult,
|
|
const formatter_type& Formatter ) :
|
|
base_type(FindResult),
|
|
m_FormatResult(FormatResult),
|
|
m_Formatter(Formatter) {}
|
|
|
|
// Assignment
|
|
template< typename FindResultT >
|
|
find_format_store& operator=( FindResultT FindResult )
|
|
{
|
|
iterator_range<ForwardIteratorT>::operator=(FindResult);
|
|
if( !this->empty() ) {
|
|
m_FormatResult=m_Formatter(FindResult);
|
|
}
|
|
|
|
return *this;
|
|
}
|
|
|
|
// Retrieve format result
|
|
const format_result_type& format_result()
|
|
{
|
|
return m_FormatResult;
|
|
}
|
|
|
|
private:
|
|
format_result_type m_FormatResult;
|
|
const formatter_type& m_Formatter;
|
|
};
|
|
|
|
template<typename InputT, typename FindResultT>
|
|
bool check_find_result(InputT&, FindResultT& FindResult)
|
|
{
|
|
typedef BOOST_STRING_TYPENAME
|
|
range_const_iterator<InputT>::type input_iterator_type;
|
|
iterator_range<input_iterator_type> ResultRange(FindResult);
|
|
return !ResultRange.empty();
|
|
}
|
|
|
|
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
|
|
#pragma warning(pop)
|
|
#endif
|
|
} // namespace detail
|
|
} // namespace algorithm
|
|
} // namespace boost
|
|
|
|
#endif // BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP
|