Coverage Report

Created: 2025-12-14 06:44

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/immer/immer/heap/split_heap.hpp
Line
Count
Source
1
//
2
// immer: immutable data structures for C++
3
// Copyright (C) 2016, 2017, 2018 Juan Pedro Bolivar Puente
4
//
5
// This software is distributed under the Boost Software License, Version 1.0.
6
// See accompanying file LICENSE or copy at http://boost.org/LICENSE_1_0.txt
7
//
8
9
#pragma once
10
11
#include <atomic>
12
#include <cassert>
13
#include <cstddef>
14
15
namespace immer {
16
17
/*!
18
 * Adaptor that uses `SmallHeap` for allocations that are smaller or
19
 * equal to `Size` and `BigHeap` otherwise.
20
 */
21
template <std::size_t Size, typename SmallHeap, typename BigHeap>
22
struct split_heap
23
{
24
    template <typename... Tags>
25
    static void* allocate(std::size_t size, Tags... tags)
26
26.8M
    {
27
26.8M
        return size <= Size ? SmallHeap::allocate(size, tags...)
28
26.8M
                            : BigHeap::allocate(size, tags...);
29
26.8M
    }
void* immer::split_heap<56ul, immer::thread_local_free_list_heap<56ul, 1024ul, immer::free_list_heap<56ul, 1024ul, immer::debug_size_heap<immer::cpp_heap> > >, immer::debug_size_heap<immer::cpp_heap> >::allocate<>(unsigned long)
Line
Count
Source
26
17.1M
    {
27
17.1M
        return size <= Size ? SmallHeap::allocate(size, tags...)
28
17.1M
                            : BigHeap::allocate(size, tags...);
29
17.1M
    }
void* immer::split_heap<56ul, immer::thread_local_free_list_heap<56ul, 1024ul, immer::free_list_heap<56ul, 1024ul, immer::debug_size_heap<immer::cpp_heap> > >, immer::debug_size_heap<immer::cpp_heap> >::allocate<immer::norefs_tag>(unsigned long, immer::norefs_tag)
Line
Count
Source
26
9.72M
    {
27
9.72M
        return size <= Size ? SmallHeap::allocate(size, tags...)
28
9.72M
                            : BigHeap::allocate(size, tags...);
29
9.72M
    }
30
31
    template <typename... Tags>
32
    static void deallocate(std::size_t size, void* data, Tags... tags)
33
26.8M
    {
34
26.8M
        if (size <= Size)
35
26.8M
            SmallHeap::deallocate(size, data, tags...);
36
0
        else
37
0
            BigHeap::deallocate(size, data, tags...);
38
26.8M
    }
39
};
40
41
} // namespace immer