Coverage Report

Created: 2026-01-22 06:46

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
2.89M
    {
27
2.89M
        return size <= Size ? SmallHeap::allocate(size, tags...)
28
2.89M
                            : BigHeap::allocate(size, tags...);
29
2.89M
    }
30
31
    template <typename... Tags>
32
    static void deallocate(std::size_t size, void* data, Tags... tags)
33
2.89M
    {
34
2.89M
        if (size <= Size)
35
2.89M
            SmallHeap::deallocate(size, data, tags...);
36
0
        else
37
0
            BigHeap::deallocate(size, data, tags...);
38
2.89M
    }
39
};
40
41
} // namespace immer