124 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
//  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>
 | 
						|
 | 
						|
#include <boost/type_traits/make_unsigned.hpp>
 | 
						|
 | 
						|
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( static_cast<typename boost::make_unsigned <CharT>::type> ( 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( static_cast<typename boost::make_unsigned <CharT>::type> ( 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
 |