LCOV - code coverage report
Current view: top level - src/detail - number_string.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 25 25
Test Date: 2026-06-13 19:44:58 Functions: 100.0 % 6 6

           TLA  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/CPPAlliance/http
       8                 : //
       9                 : 
      10                 : #ifndef BOOST_HTTP_DETAIL_NUMBER_STRING_HPP
      11                 : #define BOOST_HTTP_DETAIL_NUMBER_STRING_HPP
      12                 : 
      13                 : #include <boost/http/detail/config.hpp>
      14                 : #include <boost/core/detail/string_view.hpp>
      15                 : #include <cstdint>
      16                 : 
      17                 : namespace boost {
      18                 : namespace http {
      19                 : namespace detail {
      20                 : 
      21                 : // Convert integer to decimal
      22                 : // string using in-place storage
      23                 : class number_string
      24                 : {
      25                 :     static constexpr unsigned buf_size = 18;
      26                 :     char buf_[buf_size + 1];
      27                 :     std::size_t size_ = 0;
      28                 : 
      29                 :     void
      30 HIT          37 :     construct_unsigned(
      31                 :         std::uint64_t n) noexcept
      32                 :     {
      33              37 :         buf_[buf_size] = '\0';
      34              37 :         auto const end =
      35                 :             &buf_[buf_size];
      36              37 :         auto p = end;
      37              37 :         if(n == 0)
      38                 :         {
      39               6 :             *--p = '0';
      40                 :         }
      41                 :         else
      42                 :         {
      43              74 :             while(n > 0)
      44                 :             {
      45              43 :                 *--p = '0' + (n%10);
      46              43 :                 n /= 10;
      47                 :             }
      48                 :         }
      49              37 :         size_ = end - p;
      50              37 :     }
      51                 : 
      52                 : public:
      53                 :     number_string() = default;
      54                 :     number_string(
      55                 :         number_string const&) = default;
      56                 :     number_string& operator=
      57                 :         (number_string const&) = default;
      58                 : 
      59                 :     explicit
      60              37 :     number_string(
      61                 :         std::uint64_t n) noexcept
      62              37 :     {
      63              37 :         construct_unsigned(n);
      64              37 :     }
      65                 : 
      66                 :     char const*
      67              37 :     data() const noexcept
      68                 :     {
      69              37 :         return &buf_[
      70              37 :             buf_size] - size_;
      71                 :     }
      72                 : 
      73                 :     std::size_t
      74              37 :     size() const noexcept
      75                 :     {
      76              37 :         return size_;
      77                 :     }
      78                 : 
      79                 :     core::string_view
      80              37 :     str() const noexcept
      81                 :     {
      82              37 :         return core::string_view(
      83              37 :             data(), size());
      84                 :     }
      85                 : 
      86              37 :     operator
      87                 :     core::string_view() const noexcept
      88                 :     {
      89              37 :         return str();
      90                 :     }
      91                 : };
      92                 : 
      93                 : } // detail
      94                 : } // http
      95                 : } // boost
      96                 : 
      97                 : #endif
        

Generated by: LCOV version 2.3