LCOV - code coverage report
Current view: top level - json/detail - default_resource.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 4 4
Test Date: 2025-12-23 17:20:51 Functions: 100.0 % 2 2

            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/json
       8              : //
       9              : 
      10              : #ifndef BOOST_JSON_DEFAULT_RESOURCE_HPP
      11              : #define BOOST_JSON_DEFAULT_RESOURCE_HPP
      12              : 
      13              : #include <boost/json/detail/config.hpp>
      14              : #include <boost/container/pmr/memory_resource.hpp>
      15              : 
      16              : namespace boost {
      17              : namespace json {
      18              : namespace detail {
      19              : 
      20              : #ifdef _MSC_VER
      21              : #pragma warning(push)
      22              : #pragma warning(disable: 4251) // class needs to have dll-interface to be used by clients of class
      23              : #pragma warning(disable: 4275) // non dll-interface class used as base for dll-interface class
      24              : #endif
      25              : 
      26              : // A simple memory resource that uses operator new and delete.
      27              : class
      28              :     BOOST_SYMBOL_VISIBLE
      29              :     BOOST_JSON_DECL
      30              : default_resource final
      31              :     : public container::pmr::memory_resource
      32              : {
      33              :     union holder;
      34              : 
      35              : #ifndef BOOST_JSON_WEAK_CONSTINIT
      36              : # ifndef BOOST_JSON_NO_DESTROY
      37              :     static holder instance_;
      38              : # else
      39              :     BOOST_JSON_NO_DESTROY
      40              :     static default_resource instance_;
      41              : # endif
      42              : #endif
      43              : 
      44              : public:
      45              :     static
      46              :     container::pmr::memory_resource*
      47       531052 :     get() noexcept
      48              :     {
      49              :     #ifdef BOOST_JSON_WEAK_CONSTINIT
      50              :         static default_resource instance_;
      51              :     #endif
      52              :         return reinterpret_cast<memory_resource*>(
      53              :             reinterpret_cast<std::uintptr_t*>(
      54       531052 :                 &instance_));
      55              :     }
      56              : 
      57              :     ~default_resource();
      58              : 
      59              :     void*
      60              :     do_allocate(
      61              :         std::size_t n,
      62              :         std::size_t) override;
      63              : 
      64              :     void
      65              :     do_deallocate(
      66              :         void* p,
      67              :         std::size_t,
      68              :         std::size_t) override;
      69              : 
      70              :     bool
      71              :     do_is_equal(
      72              :         memory_resource const& mr) const noexcept override;
      73              : };
      74              : 
      75              : #ifdef _MSC_VER
      76              : #pragma warning(pop)
      77              : #endif
      78              : 
      79              : union default_resource::
      80              :     holder
      81              : {
      82              : #ifndef BOOST_JSON_WEAK_CONSTINIT
      83              :     constexpr
      84              : #endif
      85              :     holder()
      86              :         : mr()
      87              :     {
      88              :     }
      89              : 
      90           39 :     ~holder()
      91              :     {
      92           39 :     }
      93              : 
      94              :     default_resource mr;
      95              : };
      96              : 
      97              : } // detail
      98              : } // namespace json
      99              : } // namespace boost
     100              : 
     101              : #endif
        

Generated by: LCOV version 2.1