LCOV - code coverage report
Current view: top level - boost/url/detail - normalize.hpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 13 13 100.0 %
Date: 2023-12-15 15:31:48 Functions: 4 4 100.0 %

          Line data    Source code
       1             : //
       2             : // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
       3             : // Copyright (c) 2022 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_DETAIL_NORMALIZED_HPP
      12             : #define BOOST_URL_DETAIL_NORMALIZED_HPP
      13             : 
      14             : #include <boost/core/detail/string_view.hpp>
      15             : #include <boost/url/segments_encoded_view.hpp>
      16             : #include <boost/url/detail/normalize.hpp>
      17             : 
      18             : namespace boost {
      19             : namespace urls {
      20             : namespace detail {
      21             : 
      22             : class fnv_1a
      23             : {
      24             : public:
      25             :     using digest_type = std::size_t;
      26             : 
      27             : #if BOOST_URL_ARCH == 64
      28             :     static constexpr std::size_t const prime =
      29             :         static_cast<std::size_t>(0x100000001B3ULL);
      30             :     static constexpr std::size_t init_hash  =
      31             :         static_cast<std::size_t>(0xcbf29ce484222325ULL);
      32             : #else
      33             :     static constexpr std::size_t const prime =
      34             :         static_cast<std::size_t>(0x01000193UL);
      35             :     static constexpr std::size_t init_hash  =
      36             :         static_cast<std::size_t>(0x811C9DC5UL);
      37             : #endif
      38             : 
      39             :     explicit
      40         276 :     fnv_1a(std::size_t salt) noexcept
      41         276 :     : h_(init_hash + salt)
      42             :     {
      43         276 :     }
      44             : 
      45             :     void
      46        3840 :     put(char c) noexcept
      47             :     {
      48        3840 :         h_ ^= c;
      49        3840 :         h_ *= prime;
      50        3840 :     }
      51             : 
      52             :     void
      53         276 :     put(core::string_view s) noexcept
      54             :     {
      55         294 :         for (char c: s)
      56             :         {
      57          18 :             put(c);
      58             :         }
      59         276 :     }
      60             : 
      61             :     digest_type
      62         276 :     digest() const noexcept
      63             :     {
      64         276 :         return h_;
      65             :     }
      66             : 
      67             : private:
      68             :     std::size_t h_;
      69             : };
      70             : 
      71             : void
      72             : pop_encoded_front(
      73             :     core::string_view& s,
      74             :     char& c,
      75             :     std::size_t& n) noexcept;
      76             : 
      77             : // compare two core::string_views as if they are both
      78             : // percent-decoded
      79             : int
      80             : compare_encoded(
      81             :     core::string_view lhs,
      82             :     core::string_view rhs) noexcept;
      83             : 
      84             : // digest a core::string_view as if it were
      85             : // percent-decoded
      86             : void
      87             : digest_encoded(
      88             :     core::string_view s,
      89             :     fnv_1a& hasher) noexcept;
      90             : 
      91             : void
      92             : digest(
      93             :     core::string_view s,
      94             :     fnv_1a& hasher) noexcept;
      95             : 
      96             : // check if core::string_view lhs starts with core::string_view
      97             : // rhs as if they are both percent-decoded. If
      98             : // lhs starts with rhs, return number of chars
      99             : // matched in the encoded core::string_view
     100             : std::size_t
     101             : path_starts_with(
     102             :     core::string_view lhs,
     103             :     core::string_view rhs) noexcept;
     104             : 
     105             : // check if core::string_view lhs ends with core::string_view
     106             : // rhs as if they are both percent-decoded. If
     107             : // lhs ends with rhs, return number of chars
     108             : // matched in the encoded core::string_view
     109             : std::size_t
     110             : path_ends_with(
     111             :     core::string_view lhs,
     112             :     core::string_view rhs) noexcept;
     113             : 
     114             : // compare two core::string_views as if they are both
     115             : // percent-decoded and lowercase
     116             : int
     117             : ci_compare_encoded(
     118             :     core::string_view lhs,
     119             :     core::string_view rhs) noexcept;
     120             : 
     121             : // digest a core::string_view as if it were decoded
     122             : // and lowercase
     123             : void
     124             : ci_digest_encoded(
     125             :     core::string_view s,
     126             :     fnv_1a& hasher) noexcept;
     127             : 
     128             : // compare two ascii core::string_views
     129             : int
     130             : compare(
     131             :     core::string_view lhs,
     132             :     core::string_view rhs) noexcept;
     133             : 
     134             : // compare two core::string_views as if they are both
     135             : // lowercase
     136             : int
     137             : ci_compare(
     138             :     core::string_view lhs,
     139             :     core::string_view rhs) noexcept;
     140             : 
     141             : // digest a core::string_view as if it were lowercase
     142             : void
     143             : ci_digest(
     144             :     core::string_view s,
     145             :     fnv_1a& hasher) noexcept;
     146             : 
     147             : BOOST_URL_DECL
     148             : std::size_t
     149             : remove_dot_segments(
     150             :     char* dest,
     151             :     char const* end,
     152             :     core::string_view s) noexcept;
     153             : 
     154             : void
     155             : pop_last_segment(
     156             :     core::string_view& s,
     157             :     core::string_view& c,
     158             :     std::size_t& level,
     159             :     bool r) noexcept;
     160             : 
     161             : char
     162             : path_pop_back( core::string_view& s );
     163             : 
     164             : void
     165             : normalized_path_digest(
     166             :     core::string_view s,
     167             :     bool remove_unmatched,
     168             :     fnv_1a& hasher) noexcept;
     169             : 
     170             : int
     171             : segments_compare(
     172             :     segments_encoded_view seg0,
     173             :     segments_encoded_view seg1) noexcept;
     174             : 
     175             : } // detail
     176             : } // urls
     177             : } // boost
     178             : 
     179             : #endif

Generated by: LCOV version 1.15