LCOV - code coverage report
Current view: top level - libs/http/src/server/detail - stable_string.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 25 25
Test Date: 2026-01-20 00:11:34 Functions: 100.0 % 7 7

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2025 Vinnie Falco (vinnie dot falco at gmail dot 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_SERVER_DETAIL_STABLE_STRING_HPP
      11              : #define BOOST_HTTP_SERVER_DETAIL_STABLE_STRING_HPP
      12              : 
      13              : #include <boost/http/detail/config.hpp>
      14              : #include <cstdint>
      15              : #include <cstdlib>
      16              : 
      17              : namespace boost {
      18              : namespace http {
      19              : namespace detail {
      20              : 
      21              : // avoids SBO
      22              : class stable_string
      23              : {
      24              :     char const* p_ = 0;
      25              :     std::size_t n_ = 0;
      26              : 
      27              : public:
      28          274 :     ~stable_string()
      29              :     {
      30          274 :         if(p_)
      31          116 :             delete[] p_;
      32          274 :     }
      33              : 
      34              :     stable_string() = default;
      35              : 
      36          158 :     stable_string(
      37              :         stable_string&& other) noexcept
      38          158 :         : p_(other.p_)
      39          158 :         , n_(other.n_)
      40              :     {
      41          158 :         other.p_ = nullptr;
      42          158 :         other.n_ = 0;
      43          158 :     }
      44              : 
      45              :     stable_string& operator=(
      46              :         stable_string&& other) noexcept
      47              :     {
      48              :         auto p = p_;
      49              :         auto n = n_;
      50              :         p_ = other.p_;
      51              :         n_ = other.n_;
      52              :         other.p_ = p;
      53              :         other.n_ = n;
      54              :         return *this;
      55              :     }
      56              : 
      57              :     explicit
      58          116 :     stable_string(
      59              :         std::string_view s)
      60          232 :         : p_(
      61          348 :             [&]
      62              :             {
      63          116 :                 auto p =new char[s.size()];
      64          116 :                 std::memcpy(p, s.data(), s.size());
      65          116 :                 return p;
      66          116 :             }())
      67          116 :         , n_(s.size())
      68              :     {
      69          116 :     }
      70              : 
      71              :     stable_string(
      72              :         char const* it, char const* end)
      73              :         : stable_string(std::string_view(it, end))
      74              :     {
      75              :     }
      76              : 
      77           74 :     char const* data() const noexcept
      78              :     {
      79           74 :         return p_;
      80              :     }
      81              : 
      82           74 :     std::size_t size() const noexcept
      83              :     {
      84           74 :         return n_;
      85              :     }
      86              : 
      87           74 :     operator core::string_view() const noexcept
      88              :     {
      89           74 :         return { data(), size() };
      90              :     }
      91              : 
      92              :     operator std::string_view() const noexcept
      93              :     {
      94              :         return { data(), size() };
      95              :     }
      96              : };
      97              : 
      98              : } // detail
      99              : } // http
     100              : } // boost
     101              : 
     102              : #endif
        

Generated by: LCOV version 2.3