LCOV - code coverage report
Current view: top level - usr/include/boost/algorithm/string/detail - case_conv.hpp (source / functions) Hit Total Coverage
Test: ROSE Lines: 5 8 62.5 %
Date: 2022-12-08 13:48:47 Functions: 1 2 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //  Boost string_algo library string_funct.hpp header file  ---------------------------//
       2             : 
       3             : //  Copyright Pavol Droba 2002-2003.
       4             : //
       5             : // Distributed under the Boost Software License, Version 1.0.
       6             : //    (See accompanying file LICENSE_1_0.txt or copy at
       7             : //          http://www.boost.org/LICENSE_1_0.txt)
       8             : 
       9             : //  See http://www.boost.org/ for updates, documentation, and revision history.
      10             : 
      11             : #ifndef BOOST_STRING_CASE_CONV_DETAIL_HPP
      12             : #define BOOST_STRING_CASE_CONV_DETAIL_HPP
      13             : 
      14             : #include <boost/algorithm/string/config.hpp>
      15             : #include <locale>
      16             : #include <functional>
      17             : 
      18             : #include <boost/type_traits/make_unsigned.hpp>
      19             : 
      20             : namespace boost {
      21             :     namespace algorithm {
      22             :         namespace detail {
      23             : 
      24             : //  case conversion functors -----------------------------------------------//
      25             : 
      26             : #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
      27             : #pragma warning(push)
      28             : #pragma warning(disable:4512) //assignment operator could not be generated
      29             : #endif
      30             : 
      31             :             // a tolower functor
      32             :             template<typename CharT>
      33             :             struct to_lowerF
      34             :             {
      35             :                 typedef CharT argument_type;
      36             :                 typedef CharT result_type;
      37             :                 // Constructor
      38        1070 :                 to_lowerF( const std::locale& Loc ) : m_Loc( &Loc ) {}
      39             : 
      40             :                 // Operation
      41       14240 :                 CharT operator ()( CharT Ch ) const
      42             :                 {
      43             :                     #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
      44             :                         return std::tolower( static_cast<typename boost::make_unsigned <CharT>::type> ( Ch ));
      45             :                     #else
      46       14240 :                         return std::tolower<CharT>( Ch, *m_Loc );
      47             :                     #endif
      48             :                 }
      49             :             private:
      50             :                 const std::locale* m_Loc;
      51             :             };
      52             : 
      53             :             // a toupper functor
      54             :             template<typename CharT>
      55             :             struct to_upperF
      56             :             {
      57             :                 typedef CharT argument_type;
      58             :                 typedef CharT result_type;
      59             :                 // Constructor
      60           0 :                 to_upperF( const std::locale& Loc ) : m_Loc( &Loc ) {}
      61             : 
      62             :                 // Operation
      63           0 :                 CharT operator ()( CharT Ch ) const
      64             :                 {
      65             :                     #if defined(__BORLANDC__) && (__BORLANDC__ >= 0x560) && (__BORLANDC__ <= 0x564) && !defined(_USE_OLD_RW_STL)
      66             :                         return std::toupper( static_cast<typename boost::make_unsigned <CharT>::type> ( Ch ));
      67             :                     #else
      68           0 :                         return std::toupper<CharT>( Ch, *m_Loc );
      69             :                     #endif
      70             :                 }
      71             :             private:
      72             :                 const std::locale* m_Loc;
      73             :             };
      74             : 
      75             : #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)
      76             : #pragma warning(pop)
      77             : #endif
      78             : 
      79             : // algorithm implementation -------------------------------------------------------------------------
      80             : 
      81             :             // Transform a range
      82             :             template<typename OutputIteratorT, typename RangeT, typename FunctorT>
      83             :             OutputIteratorT transform_range_copy(
      84             :                 OutputIteratorT Output,
      85             :                 const RangeT& Input,
      86             :                 FunctorT Functor)
      87             :             {
      88             :                 return std::transform( 
      89             :                     ::boost::begin(Input), 
      90             :                     ::boost::end(Input), 
      91             :                     Output,
      92             :                     Functor);
      93             :             }
      94             : 
      95             :             // Transform a range (in-place)
      96             :             template<typename RangeT, typename FunctorT>
      97             :             void transform_range(
      98             :                 const RangeT& Input,
      99             :                 FunctorT Functor)
     100             :             {
     101             :                 std::transform( 
     102             :                     ::boost::begin(Input), 
     103             :                     ::boost::end(Input), 
     104             :                     ::boost::begin(Input),
     105             :                     Functor);
     106             :             }
     107             : 
     108             :             template<typename SequenceT, typename RangeT, typename FunctorT>
     109        1070 :             inline SequenceT transform_range_copy( 
     110             :                 const RangeT& Input, 
     111             :                 FunctorT Functor)
     112             :             {
     113             :                 return SequenceT(
     114             :                     ::boost::make_transform_iterator(
     115             :                         ::boost::begin(Input),
     116             :                         Functor),
     117             :                     ::boost::make_transform_iterator(
     118             :                         ::boost::end(Input), 
     119        1070 :                         Functor));
     120             :             }
     121             : 
     122             :         } // namespace detail
     123             :     } // namespace algorithm
     124             : } // namespace boost
     125             : 
     126             : 
     127             : #endif  // BOOST_STRING_CASE_CONV_DETAIL_HPP

Generated by: LCOV version 1.14