100.00% Lines (75/75) 100.00% Functions (3/3)
TLA Baseline Branch
Line Hits Code Line Hits Code
1   // 1   //
2   // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com) 2   // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
3   // Copyright (c) 2023 Alan de Freitas (alandefreitas@gmail.com) 3   // Copyright (c) 2023 Alan de Freitas (alandefreitas@gmail.com)
4   // 4   //
5   // Distributed under the Boost Software License, Version 1.0. (See accompanying 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) 6   // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7   // 7   //
8   // Official repository: https://github.com/boostorg/url 8   // Official repository: https://github.com/boostorg/url
9   // 9   //
10   10  
11   #ifndef BOOST_URL_IMPL_SCHEME_HPP 11   #ifndef BOOST_URL_IMPL_SCHEME_HPP
12   #define BOOST_URL_IMPL_SCHEME_HPP 12   #define BOOST_URL_IMPL_SCHEME_HPP
13   13  
14   #include <boost/url/detail/config.hpp> 14   #include <boost/url/detail/config.hpp>
15   15  
16   #include <boost/url/grammar/ci_string.hpp> 16   #include <boost/url/grammar/ci_string.hpp>
17   17  
18   namespace boost { 18   namespace boost {
19   namespace urls { 19   namespace urls {
20   20  
21   BOOST_URL_CXX20_CONSTEXPR_OR_INLINE 21   BOOST_URL_CXX20_CONSTEXPR_OR_INLINE
22   scheme 22   scheme
HITCBC 23   21773 string_to_scheme( 23   21773 string_to_scheme(
24   core::string_view s) noexcept 24   core::string_view s) noexcept
25   { 25   {
26   using grammar::to_lower; 26   using grammar::to_lower;
HITCBC 27   21773 switch(s.size()) 27   21773 switch(s.size())
28   { 28   {
HITCBC 29   3 case 0: // none 29   3 case 0: // none
HITCBC 30   3 return scheme::none; 30   3 return scheme::none;
31   31  
HITCBC 32   1803 case 2: // ws 32   1803 case 2: // ws
HITCBC 33   2049 if( to_lower(s[0]) == 'w' && 33   2049 if( to_lower(s[0]) == 'w' &&
HITCBC 34   246 to_lower(s[1]) == 's') 34   246 to_lower(s[1]) == 's')
HITCBC 35   168 return scheme::ws; 35   168 return scheme::ws;
HITCBC 36   1635 break; 36   1635 break;
37   37  
HITCBC 38   1288 case 3: 38   1288 case 3:
HITCBC 39   1288 switch(to_lower(s[0])) 39   1288 switch(to_lower(s[0]))
40   { 40   {
HITCBC 41   93 case 'w': // wss 41   93 case 'w': // wss
HITCBC 42   156 if( to_lower(s[1]) == 's' && 42   156 if( to_lower(s[1]) == 's' &&
HITCBC 43   63 to_lower(s[2]) == 's') 43   63 to_lower(s[2]) == 's')
HITCBC 44   61 return scheme::wss; 44   61 return scheme::wss;
HITCBC 45   32 break; 45   32 break;
46   46  
HITCBC 47   256 case 'f': // ftp 47   256 case 'f': // ftp
HITCBC 48   435 if( to_lower(s[1]) == 't' && 48   435 if( to_lower(s[1]) == 't' &&
HITCBC 49   179 to_lower(s[2]) == 'p') 49   179 to_lower(s[2]) == 'p')
HITCBC 50   178 return scheme::ftp; 50   178 return scheme::ftp;
HITCBC 51   78 break; 51   78 break;
52   52  
HITCBC 53   939 default: 53   939 default:
HITCBC 54   939 break; 54   939 break;
55   } 55   }
HITCBC 56   1049 break; 56   1049 break;
57   57  
HITCBC 58   5519 case 4: 58   5519 case 4:
HITCBC 59   5519 switch(to_lower(s[0])) 59   5519 switch(to_lower(s[0]))
60   { 60   {
HITCBC 61   415 case 'f': // file 61   415 case 'f': // file
HITCBC 62   788 if( to_lower(s[1]) == 'i' && 62   788 if( to_lower(s[1]) == 'i' &&
HITCBC 63   788 to_lower(s[2]) == 'l' && 63   788 to_lower(s[2]) == 'l' &&
HITCBC 64   372 to_lower(s[3]) == 'e') 64   372 to_lower(s[3]) == 'e')
HITCBC 65   371 return scheme::file; 65   371 return scheme::file;
HITCBC 66   44 break; 66   44 break;
67   67  
HITCBC 68   4338 case 'h': // http 68   4338 case 'h': // http
HITCBC 69   8643 if( to_lower(s[1]) == 't' && 69   8643 if( to_lower(s[1]) == 't' &&
HITCBC 70   8643 to_lower(s[2]) == 't' && 70   8643 to_lower(s[2]) == 't' &&
HITCBC 71   4300 to_lower(s[3]) == 'p') 71   4300 to_lower(s[3]) == 'p')
HITCBC 72   4300 return scheme::http; 72   4300 return scheme::http;
HITCBC 73   38 break; 73   38 break;
74   74  
HITCBC 75   766 default: 75   766 default:
HITCBC 76   766 break; 76   766 break;
77   } 77   }
HITCBC 78   848 break; 78   848 break;
79   79  
HITCBC 80   9108 case 5: // https 80   9108 case 5: // https
HITCBC 81   16899 if( to_lower(s[0]) == 'h' && 81   16899 if( to_lower(s[0]) == 'h' &&
HITCBC 82   15569 to_lower(s[1]) == 't' && 82   15569 to_lower(s[1]) == 't' &&
HITCBC 83   15554 to_lower(s[2]) == 't' && 83   15554 to_lower(s[2]) == 't' &&
HITCBC 84   24675 to_lower(s[3]) == 'p' && 84   24675 to_lower(s[3]) == 'p' &&
HITCBC 85   7775 to_lower(s[4]) == 's') 85   7775 to_lower(s[4]) == 's')
HITCBC 86   7768 return scheme::https; 86   7768 return scheme::https;
HITCBC 87   1340 break; 87   1340 break;
88   88  
HITCBC 89   4052 default: 89   4052 default:
HITCBC 90   4052 break; 90   4052 break;
91   } 91   }
HITCBC 92   8924 return scheme::unknown; 92   8924 return scheme::unknown;
93   } 93   }
94   94  
95   inline 95   inline
96   core::string_view 96   core::string_view
HITCBC 97   192 to_string(scheme s) noexcept 97   192 to_string(scheme s) noexcept
98   { 98   {
HITCBC 99   192 switch(s) 99   192 switch(s)
100   { 100   {
HITCBC 101   14 case scheme::ftp: return "ftp"; 101   14 case scheme::ftp: return "ftp";
HITCBC 102   23 case scheme::file: return "file"; 102   23 case scheme::file: return "file";
HITCBC 103   25 case scheme::http: return "http"; 103   25 case scheme::http: return "http";
HITCBC 104   21 case scheme::https: return "https"; 104   21 case scheme::https: return "https";
HITCBC 105   33 case scheme::ws: return "ws"; 105   33 case scheme::ws: return "ws";
HITCBC 106   23 case scheme::wss: return "wss"; 106   23 case scheme::wss: return "wss";
HITCBC 107   1 case scheme::none: return {}; 107   1 case scheme::none: return {};
HITCBC 108   52 default: 108   52 default:
HITCBC 109   52 break; 109   52 break;
110   } 110   }
HITCBC 111   52 return "<unknown>"; 111   52 return "<unknown>";
112   } 112   }
113   113  
114   inline 114   inline
115   std::uint16_t 115   std::uint16_t
HITCBC 116   8 default_port(scheme s) noexcept 116   8 default_port(scheme s) noexcept
117   { 117   {
HITCBC 118   8 switch(s) 118   8 switch(s)
119   { 119   {
HITCBC 120   1 case scheme::ftp: 120   1 case scheme::ftp:
HITCBC 121   1 return 21; 121   1 return 21;
HITCBC 122   2 case scheme::http: 122   2 case scheme::http:
123   case scheme::ws: 123   case scheme::ws:
HITCBC 124   2 return 80; 124   2 return 80;
HITCBC 125   2 case scheme::https: 125   2 case scheme::https:
126   case scheme::wss: 126   case scheme::wss:
HITCBC 127   2 return 443; 127   2 return 443;
HITCBC 128   3 default: 128   3 default:
HITCBC 129   3 break; 129   3 break;
130   } 130   }
HITCBC 131   3 return 0; 131   3 return 0;
132   } 132   }
133   133  
134   } // urls 134   } // urls
135   } // boost 135   } // boost
136   136  
137   #endif 137   #endif