LCOV - code coverage report
Current view: top level - capy/ex - frame_allocator.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 2 2
Test Date: 2026-02-12 22:58:59 Functions: 100.0 % 1 1

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2025 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/capy
       8              : //
       9              : 
      10              : #ifndef BOOST_CAPY_FRAME_ALLOCATOR_HPP
      11              : #define BOOST_CAPY_FRAME_ALLOCATOR_HPP
      12              : 
      13              : #include <boost/capy/detail/config.hpp>
      14              : #include <boost/capy/detail/frame_memory_resource.hpp>
      15              : 
      16              : #include <memory_resource>
      17              : 
      18              : /*  Design rationale (pdimov):
      19              :     This accessor is a thin wrapper over a thread-local pointer.
      20              :     It returns exactly what was stored, including nullptr. No
      21              :     dynamic initializer on the thread-local; a dynamic TLS
      22              :     initializer moves you into a costlier implementation bucket
      23              :     on some platforms - avoid it.
      24              : 
      25              :     Null handling is the caller's responsibility (e.g. in
      26              :     promise_type::operator new). The accessor must not substitute
      27              :     a default, because there are multiple valid choices
      28              :     (new_delete_resource, the default pmr resource, etc.). If
      29              :     the allocator is not set, it reports "not set" and the
      30              :     caller interprets that however it wants.                    */
      31              : 
      32              : namespace boost {
      33              : namespace capy {
      34              : 
      35              : /** Thread-local storage for the current frame allocator.
      36              : 
      37              :     This function returns a reference to the thread-local pointer
      38              :     that holds the current memory_resource for frame allocation.
      39              :     The pointer is set by run_async before creating any tasks.
      40              : 
      41              :     @return Reference to the thread-local memory_resource pointer.
      42              : */
      43              : inline std::pmr::memory_resource*&
      44        20615 : current_frame_allocator() noexcept
      45              : {
      46              :     static thread_local std::pmr::memory_resource* mr = nullptr;
      47        20615 :     return mr;
      48              : }
      49              : 
      50              : // For backward compatibility
      51              : using detail::frame_memory_resource;
      52              : 
      53              : } // namespace capy
      54              : } // namespace boost
      55              : 
      56              : #endif
        

Generated by: LCOV version 2.3