LCOV - code coverage report
Current view: top level - capy/detail - run.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 4 4
Test Date: 2026-02-01 07:03:35 Functions: 100.0 % 2 2

            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/capy
       8              : //
       9              : 
      10              : #ifndef BOOST_CAPY_DETAIL_RUN_HPP
      11              : #define BOOST_CAPY_DETAIL_RUN_HPP
      12              : 
      13              : #include <boost/capy/detail/config.hpp>
      14              : #include <boost/capy/detail/frame_memory_resource.hpp>
      15              : 
      16              : #include <cstddef>
      17              : #include <memory_resource>
      18              : 
      19              : namespace boost {
      20              : namespace capy {
      21              : namespace detail {
      22              : 
      23              : /// Concept for standard Allocator types.
      24              : template<class A>
      25              : concept Allocator = requires(A a, std::size_t n) {
      26              :     typename A::value_type;
      27              :     { a.allocate(n) } -> std::same_as<typename A::value_type*>;
      28              : };
      29              : 
      30              : /// Specialization for memory_resource* - stores pointer directly.
      31              : template<>
      32              : class frame_memory_resource<std::pmr::memory_resource*>
      33              : {
      34              :     std::pmr::memory_resource* mr_;
      35              : 
      36              : public:
      37            5 :     explicit frame_memory_resource(std::pmr::memory_resource* mr) noexcept
      38            5 :         : mr_(mr)
      39              :     {
      40            5 :     }
      41              : 
      42            5 :     std::pmr::memory_resource* get() noexcept { return mr_; }
      43              : };
      44              : 
      45              : /// Specialization for void - no allocator (empty).
      46              : template<>
      47              : class frame_memory_resource<void>
      48              : {
      49              : public:
      50              :     frame_memory_resource() = default;
      51              : 
      52              :     std::pmr::memory_resource* get() noexcept { return nullptr; }
      53              : };
      54              : 
      55              : } // namespace detail
      56              : } // namespace capy
      57              : } // namespace boost
      58              : 
      59              : #endif
        

Generated by: LCOV version 2.3