LCOV - code coverage report
Current view: top level - libs/url/src/detail/normalize.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 13 13
Test Date: 2024-08-20 16:05:53 Functions: 100.0 % 4 4

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

Generated by: LCOV version 2.1