LCOV - code coverage report
Current view: top level - url/impl - scheme.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 75 75
Test Date: 2026-02-25 21:00:01 Functions: 100.0 % 3 3

           TLA  Line data    Source code
       1                 : //
       2                 : // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
       3                 : // Copyright (c) 2023 Alan de Freitas (alandefreitas@gmail.com)
       4                 : //
       5                 : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       6                 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       7                 : //
       8                 : // Official repository: https://github.com/boostorg/url
       9                 : //
      10                 : 
      11                 : #ifndef BOOST_URL_IMPL_SCHEME_HPP
      12                 : #define BOOST_URL_IMPL_SCHEME_HPP
      13                 : 
      14                 : #include <boost/url/detail/config.hpp>
      15                 : 
      16                 : #include <boost/url/grammar/ci_string.hpp>
      17                 : 
      18                 : namespace boost {
      19                 : namespace urls {
      20                 : 
      21                 : BOOST_URL_CXX20_CONSTEXPR_OR_INLINE
      22                 : scheme
      23 HIT        5321 : string_to_scheme(
      24                 :     core::string_view s) noexcept
      25                 : {
      26                 :     using grammar::to_lower;
      27            5321 :     switch(s.size())
      28                 :     {
      29               2 :     case 0: // none
      30               2 :         return scheme::none;
      31                 : 
      32             312 :     case 2: // ws
      33             453 :         if( to_lower(s[0]) == 'w' &&
      34             141 :             to_lower(s[1]) == 's')
      35             139 :             return scheme::ws;
      36             173 :         break;
      37                 : 
      38             180 :     case 3:
      39             180 :         switch(to_lower(s[0]))
      40                 :         {
      41              51 :         case 'w': // wss
      42              96 :             if( to_lower(s[1]) == 's' &&
      43              45 :                 to_lower(s[2]) == 's')
      44              43 :                 return scheme::wss;
      45               8 :             break;
      46                 : 
      47              78 :         case 'f': // ftp
      48             115 :             if( to_lower(s[1]) == 't' &&
      49              37 :                 to_lower(s[2]) == 'p')
      50              36 :                 return scheme::ftp;
      51              42 :             break;
      52                 : 
      53              51 :         default:
      54              51 :             break;
      55                 :         }
      56             101 :         break;
      57                 : 
      58            2365 :     case 4:
      59            2365 :         switch(to_lower(s[0]))
      60                 :         {
      61             361 :         case 'f': // file
      62             710 :             if( to_lower(s[1]) == 'i' &&
      63             710 :                 to_lower(s[2]) == 'l' &&
      64             348 :                 to_lower(s[3]) == 'e')
      65             347 :                 return scheme::file;
      66              14 :             break;
      67                 : 
      68            1854 :         case 'h': // http
      69            3706 :             if( to_lower(s[1]) == 't' &&
      70            3706 :                 to_lower(s[2]) == 't' &&
      71            1851 :                 to_lower(s[3]) == 'p')
      72            1851 :                 return scheme::http;
      73               3 :             break;
      74                 : 
      75             150 :         default:
      76             150 :             break;
      77                 :         }
      78             167 :         break;
      79                 : 
      80            1465 :     case 5: // https
      81            2023 :         if( to_lower(s[0]) == 'h' &&
      82            1115 :             to_lower(s[1]) == 't' &&
      83            1113 :             to_lower(s[2]) == 't' &&
      84            2579 :             to_lower(s[3]) == 'p' &&
      85             555 :             to_lower(s[4]) == 's')
      86             548 :             return scheme::https;
      87             917 :         break;
      88                 : 
      89             997 :     default:
      90             997 :         break;
      91                 :     }
      92            2355 :     return scheme::unknown;
      93                 : }
      94                 : 
      95                 : inline
      96                 : core::string_view
      97              53 : to_string(scheme s) noexcept
      98                 : {
      99              53 :     switch(s)
     100                 :     {
     101               4 :     case scheme::ftp:   return "ftp";
     102               3 :     case scheme::file:  return "file";
     103               3 :     case scheme::http:  return "http";
     104               5 :     case scheme::https: return "https";
     105              11 :     case scheme::ws:    return "ws";
     106               5 :     case scheme::wss:   return "wss";
     107               1 :     case scheme::none:  return {};
     108              21 :     default:
     109              21 :         break;
     110                 :     }
     111              21 :     return "<unknown>";
     112                 : }
     113                 : 
     114                 : inline
     115                 : std::uint16_t
     116               8 : default_port(scheme s) noexcept
     117                 : {
     118               8 :     switch(s)
     119                 :     {
     120               1 :     case scheme::ftp:
     121               1 :         return 21;
     122               2 :     case scheme::http:
     123                 :     case scheme::ws:
     124               2 :         return 80;
     125               2 :     case scheme::https:
     126                 :     case scheme::wss:
     127               2 :         return 443;
     128               3 :     default:
     129               3 :         break;
     130                 :     }
     131               3 :     return 0;
     132                 : }
     133                 : 
     134                 : } // urls
     135                 : } // boost
     136                 : 
     137                 : #endif
        

Generated by: LCOV version 2.3