You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
121 lines
4.0 KiB
121 lines
4.0 KiB
// Boost string_algo library string_funct.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_CASE_CONV_DETAIL_HPP |
|
#define BOOST_STRING_CASE_CONV_DETAIL_HPP |
|
|
|
#include <boost/algorithm/string/config.hpp> |
|
#include <locale> |
|
#include <functional> |
|
|
|
namespace boost { |
|
namespace algorithm { |
|
namespace detail { |
|
|
|
// case conversion functors -----------------------------------------------// |
|
|
|
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) |
|
#pragma warning(push) |
|
#pragma warning(disable:4512) //assignment operator could not be generated |
|
#endif |
|
|
|
// a tolower functor |
|
template<typename CharT> |
|
struct to_lowerF : public std::unary_function<CharT, CharT> |
|
{ |
|
// Constructor |
|
to_lowerF( const std::locale& Loc ) : m_Loc( &Loc ) {} |
|
|
|
// Operation |
|
CharT operator ()( CharT Ch ) const |
|
{ |
|
#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL) |
|
return std::tolower( Ch); |
|
#else |
|
return std::tolower<CharT>( Ch, *m_Loc ); |
|
#endif |
|
} |
|
private: |
|
const std::locale* m_Loc; |
|
}; |
|
|
|
// a toupper functor |
|
template<typename CharT> |
|
struct to_upperF : public std::unary_function<CharT, CharT> |
|
{ |
|
// Constructor |
|
to_upperF( const std::locale& Loc ) : m_Loc( &Loc ) {} |
|
|
|
// Operation |
|
CharT operator ()( CharT Ch ) const |
|
{ |
|
#if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL) |
|
return std::toupper( Ch); |
|
#else |
|
return std::toupper<CharT>( Ch, *m_Loc ); |
|
#endif |
|
} |
|
private: |
|
const std::locale* m_Loc; |
|
}; |
|
|
|
#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) |
|
#pragma warning(pop) |
|
#endif |
|
|
|
// algorithm implementation ------------------------------------------------------------------------- |
|
|
|
// Transform a range |
|
template<typename OutputIteratorT, typename RangeT, typename FunctorT> |
|
OutputIteratorT transform_range_copy( |
|
OutputIteratorT Output, |
|
const RangeT& Input, |
|
FunctorT Functor) |
|
{ |
|
return std::transform( |
|
::boost::begin(Input), |
|
::boost::end(Input), |
|
Output, |
|
Functor); |
|
} |
|
|
|
// Transform a range (in-place) |
|
template<typename RangeT, typename FunctorT> |
|
void transform_range( |
|
const RangeT& Input, |
|
FunctorT Functor) |
|
{ |
|
std::transform( |
|
::boost::begin(Input), |
|
::boost::end(Input), |
|
::boost::begin(Input), |
|
Functor); |
|
} |
|
|
|
template<typename SequenceT, typename RangeT, typename FunctorT> |
|
inline SequenceT transform_range_copy( |
|
const RangeT& Input, |
|
FunctorT Functor) |
|
{ |
|
return SequenceT( |
|
::boost::make_transform_iterator( |
|
::boost::begin(Input), |
|
Functor), |
|
::boost::make_transform_iterator( |
|
::boost::end(Input), |
|
Functor)); |
|
} |
|
|
|
} // namespace detail |
|
} // namespace algorithm |
|
} // namespace boost |
|
|
|
|
|
#endif // BOOST_STRING_CASE_CONV_DETAIL_HPP
|
|
|