LCOV - code coverage report
Current view: top level - libs/url/src/detail - print.hpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 19 19 100.0 %
Date: 2024-03-05 20:06:56 Functions: 3 3 100.0 %

          Line data    Source code
       1             :  //
       2             : // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
       3             : //
       4             : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       5             : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       6             : //
       7             : // Official repository: https://github.com/boostorg/url
       8             : //
       9             : 
      10             : #ifndef BOOST_URL_DETAIL_PRINT_HPP
      11             : #define BOOST_URL_DETAIL_PRINT_HPP
      12             : 
      13             : #include <cstdint>
      14             : #include <type_traits>
      15             : 
      16             : namespace boost {
      17             : namespace urls {
      18             : namespace detail {
      19             : 
      20             : // std::uint64_t
      21             : // 18446744073709551615
      22             : //          1          2
      23             : template<class T>
      24             : struct printed
      25             :     : std::false_type
      26             : {
      27             : };
      28             : 
      29             : // 16-bit unsigned
      30             : template<>
      31             : class printed<std::uint16_t>
      32             :     : std::false_type
      33             : {
      34             :     char n_;
      35             :     char buf_[5];
      36             : 
      37             : public:
      38          23 :     printed(std::uint16_t n)
      39          23 :     {
      40          23 :         char* it =
      41          23 :             buf_ + sizeof(buf_);
      42          23 :         if(n == 0)
      43             :         {
      44          16 :             *--it = '0';
      45          16 :             n_ = 1;
      46             :         }
      47             :         else
      48             :         {
      49          35 :             while(n > 0)
      50             :             {
      51          28 :                 *--it = '0' + (n % 10);
      52          28 :                 n /= 10;
      53             :             }
      54           7 :             n_ = static_cast<char>(
      55           7 :                 sizeof(buf_) - (
      56           7 :                     it - buf_));
      57             :         }
      58          23 :     }
      59             : 
      60             :     core::string_view
      61          69 :     string() const noexcept
      62             :     {
      63         138 :         return core::string_view(buf_ +
      64          69 :             sizeof(buf_) - n_, n_);
      65             :     }
      66             : };
      67             : 
      68             : template<class T>
      69             : printed<T>
      70          23 : make_printed(T t)
      71             : {
      72          23 :     return printed<T>(t);
      73             : }
      74             : 
      75             : } // detail
      76             : } // urls
      77             : } // boost
      78             : 
      79             : #endif

Generated by: LCOV version 1.15