LCOV - code coverage report
Current view: top level - usr/include/boost/range - as_literal.hpp (source / functions) Hit Total Coverage
Test: ROSE Lines: 13 15 86.7 %
Date: 2022-12-08 13:48:47 Functions: 0 0 -
Legend: Lines: hit not hit

          Line data    Source code
       1             : // Boost.Range library
       2             : //
       3             : //  Copyright Thorsten Ottosen 2006. Use, modification and
       4             : //  distribution is subject to the Boost Software License, Version
       5             : //  1.0. (See accompanying file LICENSE_1_0.txt or copy at
       6             : //  http://www.boost.org/LICENSE_1_0.txt)
       7             : //
       8             : // For more information, see http://www.boost.org/libs/range/
       9             : //
      10             : 
      11             : #ifndef BOOST_RANGE_AS_LITERAL_HPP
      12             : #define BOOST_RANGE_AS_LITERAL_HPP
      13             : 
      14             : #if defined(_MSC_VER)
      15             : # pragma once
      16             : #endif
      17             : 
      18             : #ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
      19             : #include <boost/range/detail/as_literal.hpp>
      20             : #else
      21             : 
      22             : #include <boost/range/iterator_range.hpp>
      23             : #include <boost/range/detail/str_types.hpp>
      24             : 
      25             : #include <boost/detail/workaround.hpp>
      26             : 
      27             : #include <cstring>
      28             : 
      29             : #if !defined(BOOST_NO_CXX11_CHAR16_T) || !defined(BOOST_NO_CXX11_CHAR32_T)
      30             : #include <string>  // for std::char_traits
      31             : #endif
      32             : 
      33             : #ifndef BOOST_NO_CWCHAR
      34             : #include <cwchar>
      35             : #endif
      36             : 
      37             : namespace boost
      38             : {
      39             :     namespace range_detail
      40             :     {
      41         917 :         inline std::size_t length( const char* s )
      42             :         {
      43         917 :             return strlen( s );
      44             :         }
      45             : 
      46             : #ifndef BOOST_NO_CXX11_CHAR16_T
      47             :         inline std::size_t length( const char16_t* s )
      48             :         {
      49             :             return std::char_traits<char16_t>::length( s );
      50             :         }
      51             : #endif
      52             : 
      53             : #ifndef BOOST_NO_CXX11_CHAR32_T
      54             :         inline std::size_t length( const char32_t* s )
      55             :         {
      56             :             return std::char_traits<char32_t>::length( s );
      57             :         }
      58             : #endif
      59             : 
      60             : #ifndef BOOST_NO_CWCHAR
      61             :         inline std::size_t length( const wchar_t* s )
      62             :         {
      63             :             return wcslen( s );
      64             :         }
      65             : #endif
      66             : 
      67             :         //
      68             :         // Remark: the compiler cannot choose between T* and T[sz]
      69             :         // overloads, so we must put the T* internal to the
      70             :         // unconstrained version.
      71             :         //
      72             : 
      73             :         inline bool is_char_ptr( char* )
      74             :         {
      75             :             return true;
      76             :         }
      77             : 
      78         917 :         inline bool is_char_ptr( const char* )
      79             :         {
      80         917 :             return true;
      81             :         }
      82             : 
      83             : #ifndef BOOST_NO_CXX11_CHAR16_T
      84             :         inline bool is_char_ptr( char16_t* )
      85             :         {
      86             :             return true;
      87             :         }
      88             : 
      89             :         inline bool is_char_ptr( const char16_t* )
      90             :         {
      91             :             return true;
      92             :         }
      93             : #endif
      94             : 
      95             : #ifndef BOOST_NO_CXX11_CHAR32_T
      96             :         inline bool is_char_ptr( char32_t* )
      97             :         {
      98             :             return true;
      99             :         }
     100             : 
     101             :         inline bool is_char_ptr( const char32_t* )
     102             :         {
     103             :             return true;
     104             :         }
     105             : #endif
     106             : 
     107             : #ifndef BOOST_NO_CWCHAR
     108             :         inline bool is_char_ptr( wchar_t* )
     109             :         {
     110             :             return true;
     111             :         }
     112             : 
     113             :         inline bool is_char_ptr( const wchar_t* )
     114             :         {
     115             :             return true;
     116             :         }
     117             : #endif
     118             : 
     119             :         template< class T >
     120      194639 :         inline long is_char_ptr( const T& /* r */ )
     121             :         {
     122             :             return 0L;
     123             :         }
     124             : 
     125             :         template< class T >
     126             :         inline iterator_range<T*>
     127         917 :         make_range( T* const r, bool )
     128             :         {
     129         917 :             return iterator_range<T*>( r, r + length(r) );
     130             :         }
     131             : 
     132             :         template< class T >
     133             :         inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<T>::type>
     134      194639 :         make_range( T& r, long )
     135             :         {
     136      194639 :             return boost::make_iterator_range( r );
     137             :         }
     138             : 
     139             :     }
     140             : 
     141             :     template< class Range >
     142             :     inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<Range>::type>
     143           0 :     as_literal( Range& r )
     144             :     {
     145           0 :         return range_detail::make_range( r, range_detail::is_char_ptr(r) );
     146             :     }
     147             : 
     148             :     template< class Range >
     149             :     inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type>
     150      194639 :     as_literal( const Range& r )
     151             :     {
     152      194639 :         return range_detail::make_range( r, range_detail::is_char_ptr(r) );
     153             :     }
     154             : 
     155             :     template< class Char, std::size_t sz >
     156             :     inline iterator_range<Char*> as_literal( Char (&arr)[sz] )
     157             :     {
     158             :         return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );
     159             :     }
     160             : 
     161             :     template< class Char, std::size_t sz >
     162         917 :     inline iterator_range<const Char*> as_literal( const Char (&arr)[sz] )
     163             :     {
     164         917 :         return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );
     165             :     }
     166             : }
     167             : 
     168             : #endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
     169             : 
     170             : #endif

Generated by: LCOV version 1.14