Coverage Report

Created: 2026-07-30 06:15

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/immer/immer/detail/rbts/operations.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 <algorithm>
12
#include <exception>
13
#include <memory>
14
#include <numeric>
15
#include <utility>
16
17
#include <immer/config.hpp>
18
#include <immer/detail/rbts/position.hpp>
19
#include <immer/detail/rbts/visitor.hpp>
20
#include <immer/detail/util.hpp>
21
#include <immer/heap/tags.hpp>
22
23
namespace immer {
24
namespace detail {
25
namespace rbts {
26
27
template <typename T>
28
struct array_for_visitor : visitor_base<array_for_visitor<T>>
29
{
30
    using this_t = array_for_visitor;
31
32
    template <typename PosT>
33
    static T* visit_inner(PosT&& pos, size_t idx)
34
    {
35
        return pos.descend(this_t{}, idx);
36
    }
37
38
    template <typename PosT>
39
    static T* visit_leaf(PosT&& pos, size_t)
40
    {
41
        return pos.node()->leaf();
42
    }
43
};
44
45
template <typename T>
46
struct region_for_visitor : visitor_base<region_for_visitor<T>>
47
{
48
    using this_t   = region_for_visitor;
49
    using result_t = std::tuple<T*, size_t, size_t>;
50
51
    template <typename PosT>
52
    static result_t visit_inner(PosT&& pos, size_t idx)
53
11.0M
    {
54
11.0M
        return pos.towards(this_t{}, idx);
55
11.0M
    }
std::__1::tuple<int*, unsigned long, unsigned long> immer::detail::rbts::region_for_visitor<int>::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
53
9.52M
    {
54
9.52M
        return pos.towards(this_t{}, idx);
55
9.52M
    }
std::__1::tuple<int*, unsigned long, unsigned long> immer::detail::rbts::region_for_visitor<int>::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
53
386k
    {
54
386k
        return pos.towards(this_t{}, idx);
55
386k
    }
std::__1::tuple<int*, unsigned long, unsigned long> immer::detail::rbts::region_for_visitor<int>::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
53
1.03M
    {
54
1.03M
        return pos.towards(this_t{}, idx);
55
1.03M
    }
std::__1::tuple<int*, unsigned long, unsigned long> immer::detail::rbts::region_for_visitor<int>::visit_inner<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
53
114k
    {
54
114k
        return pos.towards(this_t{}, idx);
55
114k
    }
56
57
    template <typename PosT>
58
    static result_t visit_leaf(PosT&& pos, size_t idx)
59
1.41M
    {
60
1.41M
        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
61
1.41M
    }
std::__1::tuple<int*, unsigned long, unsigned long> immer::detail::rbts::region_for_visitor<int>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
59
1.03M
    {
60
1.03M
        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
61
1.03M
    }
std::__1::tuple<int*, unsigned long, unsigned long> immer::detail::rbts::region_for_visitor<int>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
59
363k
    {
60
363k
        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
61
363k
    }
std::__1::tuple<int*, unsigned long, unsigned long> immer::detail::rbts::region_for_visitor<int>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
59
23.6k
    {
60
23.6k
        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
61
23.6k
    }
62
};
63
64
template <typename T>
65
struct get_visitor : visitor_base<get_visitor<T>>
66
{
67
    using this_t = get_visitor;
68
69
    template <typename PosT>
70
    static const T& visit_inner(PosT&& pos, size_t idx)
71
    {
72
        return pos.descend(this_t{}, idx);
73
    }
74
75
    template <typename PosT>
76
    static const T& visit_leaf(PosT&& pos, size_t idx)
77
    {
78
        return pos.node()->leaf()[pos.index(idx)];
79
    }
80
};
81
82
struct for_each_chunk_visitor : visitor_base<for_each_chunk_visitor>
83
{
84
    using this_t = for_each_chunk_visitor;
85
86
    template <typename Pos, typename Fn>
87
    static void visit_inner(Pos&& pos, Fn&& fn)
88
    {
89
        pos.each(this_t{}, fn);
90
    }
91
92
    template <typename Pos, typename Fn>
93
    static void visit_leaf(Pos&& pos, Fn&& fn)
94
    {
95
        auto data = pos.node()->leaf();
96
        fn(as_const(data), as_const(data) + pos.count());
97
    }
98
};
99
100
struct for_each_chunk_p_visitor : visitor_base<for_each_chunk_p_visitor>
101
{
102
    using this_t = for_each_chunk_p_visitor;
103
104
    template <typename Pos, typename Fn>
105
    static bool visit_inner(Pos&& pos, Fn&& fn)
106
724k
    {
107
724k
        return pos.each_pred(this_t{}, fn);
108
724k
    }
bool immer::detail::rbts::for_each_chunk_p_visitor::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
106
97.4k
    {
107
97.4k
        return pos.each_pred(this_t{}, fn);
108
97.4k
    }
bool immer::detail::rbts::for_each_chunk_p_visitor::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
106
20.2k
    {
107
20.2k
        return pos.each_pred(this_t{}, fn);
108
20.2k
    }
bool immer::detail::rbts::for_each_chunk_p_visitor::visit_inner<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
106
7.41k
    {
107
7.41k
        return pos.each_pred(this_t{}, fn);
108
7.41k
    }
bool immer::detail::rbts::for_each_chunk_p_visitor::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
106
599k
    {
107
599k
        return pos.each_pred(this_t{}, fn);
108
599k
    }
109
110
    template <typename Pos, typename Fn>
111
    static bool visit_leaf(Pos&& pos, Fn&& fn)
112
1.39M
    {
113
1.39M
        auto data = as_const(pos.node()->leaf());
114
1.39M
        return fn(data, data + pos.count());
115
1.39M
    }
bool immer::detail::rbts::for_each_chunk_p_visitor::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
112
360k
    {
113
360k
        auto data = as_const(pos.node()->leaf());
114
360k
        return fn(data, data + pos.count());
115
360k
    }
bool immer::detail::rbts::for_each_chunk_p_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
112
1.01M
    {
113
1.01M
        auto data = as_const(pos.node()->leaf());
114
1.01M
        return fn(data, data + pos.count());
115
1.01M
    }
bool immer::detail::rbts::for_each_chunk_p_visitor::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
112
18.8k
    {
113
18.8k
        auto data = as_const(pos.node()->leaf());
114
18.8k
        return fn(data, data + pos.count());
115
18.8k
    }
116
};
117
118
struct for_each_chunk_left_visitor : visitor_base<for_each_chunk_left_visitor>
119
{
120
    using this_t = for_each_chunk_left_visitor;
121
122
    template <typename Pos, typename Fn>
123
    static void visit_inner(Pos&& pos, size_t last, Fn&& fn)
124
    {
125
        auto l = pos.index(last);
126
        pos.each_left(for_each_chunk_visitor{}, l, fn);
127
        pos.towards_oh(this_t{}, last, l, fn);
128
    }
129
130
    template <typename Pos, typename Fn>
131
    static void visit_leaf(Pos&& pos, size_t last, Fn&& fn)
132
    {
133
        auto data = pos.node()->leaf();
134
        auto l    = pos.index(last);
135
        fn(data, data + l + 1);
136
    }
137
};
138
139
struct for_each_chunk_right_visitor : visitor_base<for_each_chunk_right_visitor>
140
{
141
    using this_t = for_each_chunk_right_visitor;
142
143
    template <typename Pos, typename Fn>
144
    static void visit_inner(Pos&& pos, size_t first, Fn&& fn)
145
    {
146
        auto f = pos.index(first);
147
        pos.towards_oh(this_t{}, first, f, fn);
148
        pos.each_right(for_each_chunk_visitor{}, f + 1, fn);
149
    }
150
151
    template <typename Pos, typename Fn>
152
    static void visit_leaf(Pos&& pos, size_t first, Fn&& fn)
153
    {
154
        auto data = pos.node()->leaf();
155
        auto f    = pos.index(first);
156
        fn(data + f, data + pos.count());
157
    }
158
};
159
160
struct for_each_chunk_i_visitor : visitor_base<for_each_chunk_i_visitor>
161
{
162
    using this_t = for_each_chunk_i_visitor;
163
164
    template <typename Pos, typename Fn>
165
    static void visit_relaxed(Pos&& pos, size_t first, size_t last, Fn&& fn)
166
    {
167
        // we are going towards *two* indices, so we need to do the
168
        // relaxed as a special case to correct the second index
169
        if (first < last) {
170
            auto f = pos.index(first);
171
            auto l = pos.index(last - 1);
172
            if (f == l) {
173
                auto sbh = pos.size_before(f);
174
                pos.towards_oh_sbh(this_t{}, first, f, sbh, last - sbh, fn);
175
            } else {
176
                assert(f < l);
177
                pos.towards_oh(for_each_chunk_right_visitor{}, first, f, fn);
178
                pos.each_i(for_each_chunk_visitor{}, f + 1, l, fn);
179
                pos.towards_oh(for_each_chunk_left_visitor{}, last - 1, l, fn);
180
            }
181
        }
182
    }
183
184
    template <typename Pos, typename Fn>
185
    static void visit_regular(Pos&& pos, size_t first, size_t last, Fn&& fn)
186
    {
187
        if (first < last) {
188
            auto f = pos.index(first);
189
            auto l = pos.index(last - 1);
190
            if (f == l)
191
                pos.towards_oh(this_t{}, first, f, last, fn);
192
            else {
193
                assert(f < l);
194
                pos.towards_oh(for_each_chunk_right_visitor{}, first, f, fn);
195
                pos.each_i(for_each_chunk_visitor{}, f + 1, l, fn);
196
                pos.towards_oh(for_each_chunk_left_visitor{}, last - 1, l, fn);
197
            }
198
        }
199
    }
200
201
    template <typename Pos, typename Fn>
202
    static void visit_leaf(Pos&& pos, size_t first, size_t last, Fn&& fn)
203
    {
204
        auto data = pos.node()->leaf();
205
        if (first < last) {
206
            auto f = pos.index(first);
207
            auto l = pos.index(last - 1);
208
            fn(data + f, data + l + 1);
209
        }
210
    }
211
};
212
213
struct for_each_chunk_p_left_visitor
214
    : visitor_base<for_each_chunk_p_left_visitor>
215
{
216
    using this_t = for_each_chunk_p_left_visitor;
217
218
    template <typename Pos, typename Fn>
219
    static bool visit_inner(Pos&& pos, size_t last, Fn&& fn)
220
    {
221
        auto l = pos.index(last);
222
        return pos.each_pred_left(for_each_chunk_p_visitor{}, l, fn) &&
223
               pos.towards_oh(this_t{}, last, l, fn);
224
    }
225
226
    template <typename Pos, typename Fn>
227
    static bool visit_leaf(Pos&& pos, size_t last, Fn&& fn)
228
    {
229
        auto data = pos.node()->leaf();
230
        auto l    = pos.index(last);
231
        return fn(data, data + l + 1);
232
    }
233
};
234
235
struct for_each_chunk_p_right_visitor
236
    : visitor_base<for_each_chunk_p_right_visitor>
237
{
238
    using this_t = for_each_chunk_p_right_visitor;
239
240
    template <typename Pos, typename Fn>
241
    static bool visit_inner(Pos&& pos, size_t first, Fn&& fn)
242
    {
243
        auto f = pos.index(first);
244
        return pos.towards_oh(this_t{}, first, f, fn) &&
245
               pos.each_pred_right(for_each_chunk_p_visitor{}, f + 1, fn);
246
    }
247
248
    template <typename Pos, typename Fn>
249
    static bool visit_leaf(Pos&& pos, size_t first, Fn&& fn)
250
    {
251
        auto data = pos.node()->leaf();
252
        auto f    = pos.index(first);
253
        return fn(data + f, data + pos.count());
254
    }
255
};
256
257
struct for_each_chunk_p_i_visitor : visitor_base<for_each_chunk_p_i_visitor>
258
{
259
    using this_t = for_each_chunk_p_i_visitor;
260
261
    template <typename Pos, typename Fn>
262
    static bool visit_relaxed(Pos&& pos, size_t first, size_t last, Fn&& fn)
263
    {
264
        // we are going towards *two* indices, so we need to do the
265
        // relaxed as a special case to correct the second index
266
        if (first < last) {
267
            auto f = pos.index(first);
268
            auto l = pos.index(last - 1);
269
            if (f == l) {
270
                auto sbh = pos.size_before(f);
271
                return pos.towards_oh_sbh(
272
                    this_t{}, first, f, sbh, last - sbh, fn);
273
            } else {
274
                assert(f < l);
275
                return pos.towards_oh(
276
                           for_each_chunk_p_right_visitor{}, first, f, fn) &&
277
                       pos.each_pred_i(
278
                           for_each_chunk_p_visitor{}, f + 1, l, fn) &&
279
                       pos.towards_oh(
280
                           for_each_chunk_p_left_visitor{}, last - 1, l, fn);
281
            }
282
        }
283
        return true;
284
    }
285
286
    template <typename Pos, typename Fn>
287
    static bool visit_regular(Pos&& pos, size_t first, size_t last, Fn&& fn)
288
    {
289
        if (first < last) {
290
            auto f = pos.index(first);
291
            auto l = pos.index(last - 1);
292
            if (f == l)
293
                return pos.towards_oh(this_t{}, first, f, last, fn);
294
            else {
295
                assert(f < l);
296
                return pos.towards_oh(
297
                           for_each_chunk_p_right_visitor{}, first, f, fn) &&
298
                       pos.each_pred_i(
299
                           for_each_chunk_p_visitor{}, f + 1, l, fn) &&
300
                       pos.towards_oh(
301
                           for_each_chunk_p_left_visitor{}, last - 1, l, fn);
302
            }
303
        }
304
        return true;
305
    }
306
307
    template <typename Pos, typename Fn>
308
    static bool visit_leaf(Pos&& pos, size_t first, size_t last, Fn&& fn)
309
    {
310
        auto data = pos.node()->leaf();
311
        if (first < last) {
312
            auto f = pos.index(first);
313
            auto l = pos.index(last - 1);
314
            return fn(data + f, data + l + 1);
315
        }
316
        return true;
317
    }
318
};
319
320
struct equals_visitor : visitor_base<equals_visitor>
321
{
322
    using this_t = equals_visitor;
323
324
    struct this_aux_t : visitor_base<this_aux_t>
325
    {
326
        template <typename PosR, typename PosL, typename Iter>
327
        static bool visit_inner(
328
            PosR&& posr, count_t i, PosL&& posl, Iter&& first, size_t idx)
329
31.2k
        {
330
31.2k
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
31.2k
        }
bool immer::detail::rbts::equals_visitor::this_aux_t::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
329
21.0k
        {
330
21.0k
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
21.0k
        }
bool immer::detail::rbts::equals_visitor::this_aux_t::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
329
2.22k
        {
330
2.22k
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
2.22k
        }
bool immer::detail::rbts::equals_visitor::this_aux_t::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
329
883
        {
330
883
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
883
        }
bool immer::detail::rbts::equals_visitor::this_aux_t::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
329
1.11k
        {
330
1.11k
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
1.11k
        }
bool immer::detail::rbts::equals_visitor::this_aux_t::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
329
744
        {
330
744
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
744
        }
bool immer::detail::rbts::equals_visitor::this_aux_t::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
329
2.53k
        {
330
2.53k
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
2.53k
        }
bool immer::detail::rbts::equals_visitor::this_aux_t::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
329
2.68k
        {
330
2.68k
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
2.68k
        }
332
333
        template <typename PosR, typename PosL, typename Iter>
334
        static bool visit_leaf(
335
            PosR&& posr, count_t i, PosL&& posl, Iter&& first, size_t idx)
336
21.4k
        {
337
21.4k
            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
338
21.4k
        }
bool immer::detail::rbts::equals_visitor::this_aux_t::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
336
9.20k
        {
337
9.20k
            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
338
9.20k
        }
bool immer::detail::rbts::equals_visitor::this_aux_t::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
336
3.79k
        {
337
3.79k
            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
338
3.79k
        }
bool immer::detail::rbts::equals_visitor::this_aux_t::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
336
3.72k
        {
337
3.72k
            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
338
3.72k
        }
bool immer::detail::rbts::equals_visitor::this_aux_t::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
336
4.68k
        {
337
4.68k
            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
338
4.68k
        }
339
    };
340
341
    struct rrb : visitor_base<rrb>
342
    {
343
        template <typename PosR, typename Iter, typename Node>
344
        static bool visit_node(PosR&& posr,
345
                               Iter&& first,
346
                               Node* rootl,
347
                               shift_t shiftl,
348
                               size_t sizel)
349
20.4k
        {
350
20.4k
            assert(shiftl <= posr.shift());
351
20.4k
            return shiftl == posr.shift()
352
20.4k
                       ? visit_maybe_relaxed_sub(rootl,
353
19.0k
                                                 shiftl,
354
19.0k
                                                 sizel,
355
19.0k
                                                 this_t{},
356
19.0k
                                                 posr,
357
19.0k
                                                 first,
358
19.0k
                                                 size_t{})
359
20.4k
                       : posr.first_sub_inner(
360
1.41k
                             rrb{}, first, rootl, shiftl, sizel);
361
20.4k
        }
bool immer::detail::rbts::equals_visitor::rrb::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, unsigned long)
Line
Count
Source
349
12.3k
        {
350
12.3k
            assert(shiftl <= posr.shift());
351
12.3k
            return shiftl == posr.shift()
352
12.3k
                       ? visit_maybe_relaxed_sub(rootl,
353
11.2k
                                                 shiftl,
354
11.2k
                                                 sizel,
355
11.2k
                                                 this_t{},
356
11.2k
                                                 posr,
357
11.2k
                                                 first,
358
11.2k
                                                 size_t{})
359
12.3k
                       : posr.first_sub_inner(
360
1.08k
                             rrb{}, first, rootl, shiftl, sizel);
361
12.3k
        }
bool immer::detail::rbts::equals_visitor::rrb::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, unsigned long)
Line
Count
Source
349
1.41k
        {
350
1.41k
            assert(shiftl <= posr.shift());
351
1.41k
            return shiftl == posr.shift()
352
1.41k
                       ? visit_maybe_relaxed_sub(rootl,
353
1.08k
                                                 shiftl,
354
1.08k
                                                 sizel,
355
1.08k
                                                 this_t{},
356
1.08k
                                                 posr,
357
1.08k
                                                 first,
358
1.08k
                                                 size_t{})
359
1.41k
                       : posr.first_sub_inner(
360
330
                             rrb{}, first, rootl, shiftl, sizel);
361
1.41k
        }
Unexecuted instantiation: bool immer::detail::rbts::equals_visitor::rrb::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, unsigned long)
Unexecuted instantiation: bool immer::detail::rbts::equals_visitor::rrb::visit_node<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, unsigned long)
bool immer::detail::rbts::equals_visitor::rrb::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, unsigned long)
Line
Count
Source
349
6.71k
        {
350
6.71k
            assert(shiftl <= posr.shift());
351
6.71k
            return shiftl == posr.shift()
352
6.71k
                       ? visit_maybe_relaxed_sub(rootl,
353
6.71k
                                                 shiftl,
354
6.71k
                                                 sizel,
355
6.71k
                                                 this_t{},
356
6.71k
                                                 posr,
357
6.71k
                                                 first,
358
6.71k
                                                 size_t{})
359
6.71k
                       : posr.first_sub_inner(
360
0
                             rrb{}, first, rootl, shiftl, sizel);
361
6.71k
        }
362
    };
363
364
    template <typename Iter>
365
    static auto equal_chunk_p(Iter&& iter)
366
31.9k
    {
367
1.39M
        return [iter](auto f, auto e) mutable {
368
1.39M
            if (f == &*iter) {
369
195k
                iter += e - f;
370
195k
                return true;
371
195k
            }
372
5.50M
            for (; f != e; ++f, ++iter)
373
4.30M
                if (*f != *iter)
374
3.59k
                    return false;
375
1.19M
            return true;
376
1.19M
        };
377
31.9k
    }
378
379
    template <typename PosL, typename PosR, typename Iter>
380
    static bool
381
    visit_relaxed(PosL&& posl, PosR&& posr, Iter&& first, size_t idx)
382
40.5k
    {
383
40.5k
        auto nl = posl.node();
384
40.5k
        auto nr = posr.node();
385
40.5k
        if (nl == nr)
386
8.84k
            return true;
387
31.7k
        auto cl = posl.count();
388
31.7k
        auto cr = posr.count();
389
31.7k
        assert(cr > 0);
390
31.7k
        auto sbr = size_t{};
391
31.7k
        auto i   = count_t{};
392
31.7k
        auto j   = count_t{};
393
102k
        for (; i < cl; ++i) {
394
84.5k
            auto sbl = posl.size_before(i);
395
134k
            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
396
50.2k
                ;
397
84.5k
            auto res =
398
84.5k
                sbl == sbr
399
84.5k
                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
400
84.5k
                    : posl.nth_sub(i,
401
31.9k
                                   for_each_chunk_p_visitor{},
402
31.9k
                                   this_t::equal_chunk_p(first + (idx + sbl)));
403
84.5k
            if (!res)
404
13.7k
                return false;
405
84.5k
        }
406
17.9k
        return true;
407
31.7k
    }
bool immer::detail::rbts::equals_visitor::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
382
29.1k
    {
383
29.1k
        auto nl = posl.node();
384
29.1k
        auto nr = posr.node();
385
29.1k
        if (nl == nr)
386
8.84k
            return true;
387
20.3k
        auto cl = posl.count();
388
20.3k
        auto cr = posr.count();
389
20.3k
        assert(cr > 0);
390
20.3k
        auto sbr = size_t{};
391
20.3k
        auto i   = count_t{};
392
20.3k
        auto j   = count_t{};
393
61.6k
        for (; i < cl; ++i) {
394
51.0k
            auto sbl = posl.size_before(i);
395
80.2k
            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
396
29.2k
                ;
397
51.0k
            auto res =
398
51.0k
                sbl == sbr
399
51.0k
                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
400
51.0k
                    : posl.nth_sub(i,
401
18.5k
                                   for_each_chunk_p_visitor{},
402
18.5k
                                   this_t::equal_chunk_p(first + (idx + sbl)));
403
51.0k
            if (!res)
404
9.73k
                return false;
405
51.0k
        }
406
10.5k
        return true;
407
20.3k
    }
bool immer::detail::rbts::equals_visitor::visit_relaxed<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
382
4.67k
    {
383
4.67k
        auto nl = posl.node();
384
4.67k
        auto nr = posr.node();
385
4.67k
        if (nl == nr)
386
0
            return true;
387
4.67k
        auto cl = posl.count();
388
4.67k
        auto cr = posr.count();
389
4.67k
        assert(cr > 0);
390
4.67k
        auto sbr = size_t{};
391
4.67k
        auto i   = count_t{};
392
4.67k
        auto j   = count_t{};
393
13.1k
        for (; i < cl; ++i) {
394
10.9k
            auto sbl = posl.size_before(i);
395
17.0k
            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
396
6.02k
                ;
397
10.9k
            auto res =
398
10.9k
                sbl == sbr
399
10.9k
                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
400
10.9k
                    : posl.nth_sub(i,
401
4.22k
                                   for_each_chunk_p_visitor{},
402
4.22k
                                   this_t::equal_chunk_p(first + (idx + sbl)));
403
10.9k
            if (!res)
404
2.50k
                return false;
405
10.9k
        }
406
2.17k
        return true;
407
4.67k
    }
bool immer::detail::rbts::equals_visitor::visit_relaxed<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
382
2.71k
    {
383
2.71k
        auto nl = posl.node();
384
2.71k
        auto nr = posr.node();
385
2.71k
        if (nl == nr)
386
0
            return true;
387
2.71k
        auto cl = posl.count();
388
2.71k
        auto cr = posr.count();
389
2.71k
        assert(cr > 0);
390
2.71k
        auto sbr = size_t{};
391
2.71k
        auto i   = count_t{};
392
2.71k
        auto j   = count_t{};
393
12.7k
        for (; i < cl; ++i) {
394
10.3k
            auto sbl = posl.size_before(i);
395
17.6k
            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
396
7.31k
                ;
397
10.3k
            auto res =
398
10.3k
                sbl == sbr
399
10.3k
                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
400
10.3k
                    : posl.nth_sub(i,
401
4.60k
                                   for_each_chunk_p_visitor{},
402
4.60k
                                   this_t::equal_chunk_p(first + (idx + sbl)));
403
10.3k
            if (!res)
404
333
                return false;
405
10.3k
        }
406
2.38k
        return true;
407
2.71k
    }
bool immer::detail::rbts::equals_visitor::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
382
2.42k
    {
383
2.42k
        auto nl = posl.node();
384
2.42k
        auto nr = posr.node();
385
2.42k
        if (nl == nr)
386
0
            return true;
387
2.42k
        auto cl = posl.count();
388
2.42k
        auto cr = posr.count();
389
2.42k
        assert(cr > 0);
390
2.42k
        auto sbr = size_t{};
391
2.42k
        auto i   = count_t{};
392
2.42k
        auto j   = count_t{};
393
8.07k
        for (; i < cl; ++i) {
394
6.43k
            auto sbl = posl.size_before(i);
395
9.94k
            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
396
3.51k
                ;
397
6.43k
            auto res =
398
6.43k
                sbl == sbr
399
6.43k
                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
400
6.43k
                    : posl.nth_sub(i,
401
2.33k
                                   for_each_chunk_p_visitor{},
402
2.33k
                                   this_t::equal_chunk_p(first + (idx + sbl)));
403
6.43k
            if (!res)
404
776
                return false;
405
6.43k
        }
406
1.64k
        return true;
407
2.42k
    }
bool immer::detail::rbts::equals_visitor::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
382
1.59k
    {
383
1.59k
        auto nl = posl.node();
384
1.59k
        auto nr = posr.node();
385
1.59k
        if (nl == nr)
386
0
            return true;
387
1.59k
        auto cl = posl.count();
388
1.59k
        auto cr = posr.count();
389
1.59k
        assert(cr > 0);
390
1.59k
        auto sbr = size_t{};
391
1.59k
        auto i   = count_t{};
392
1.59k
        auto j   = count_t{};
393
7.01k
        for (; i < cl; ++i) {
394
5.80k
            auto sbl = posl.size_before(i);
395
9.96k
            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
396
4.15k
                ;
397
5.80k
            auto res =
398
5.80k
                sbl == sbr
399
5.80k
                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
400
5.80k
                    : posl.nth_sub(i,
401
2.17k
                                   for_each_chunk_p_visitor{},
402
2.17k
                                   this_t::equal_chunk_p(first + (idx + sbl)));
403
5.80k
            if (!res)
404
396
                return false;
405
5.80k
        }
406
1.20k
        return true;
407
1.59k
    }
408
409
    template <typename PosL, typename PosR, typename Iter>
410
    static std::enable_if_t<is_relaxed_v<PosR>, bool>
411
    visit_regular(PosL&& posl, PosR&& posr, Iter&& first, size_t idx)
412
7.39k
    {
413
7.39k
        return this_t::visit_relaxed(posl, posr, first, idx);
414
7.39k
    }
std::__1::enable_if<is_relaxed_v<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>, bool>::type immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
412
4.67k
    {
413
4.67k
        return this_t::visit_relaxed(posl, posr, first, idx);
414
4.67k
    }
std::__1::enable_if<is_relaxed_v<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>, bool>::type immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
412
2.71k
    {
413
2.71k
        return this_t::visit_relaxed(posl, posr, first, idx);
414
2.71k
    }
415
416
    template <typename PosL, typename PosR, typename Iter>
417
    static std::enable_if_t<!is_relaxed_v<PosR>, bool>
418
    visit_regular(PosL&& posl, PosR&& posr, Iter&& first, size_t idx)
419
9.76k
    {
420
9.76k
        return posl.count() >= posr.count()
421
9.76k
                   ? this_t::visit_regular(posl, posr.node())
422
9.76k
                   : this_t::visit_regular(posr, posl.node());
423
9.76k
    }
std::__1::enable_if<!(is_relaxed_v<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>), bool>::type immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
419
1.85k
    {
420
1.85k
        return posl.count() >= posr.count()
421
1.85k
                   ? this_t::visit_regular(posl, posr.node())
422
1.85k
                   : this_t::visit_regular(posr, posl.node());
423
1.85k
    }
std::__1::enable_if<!(is_relaxed_v<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>), bool>::type immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
419
6.82k
    {
420
6.82k
        return posl.count() >= posr.count()
421
6.82k
                   ? this_t::visit_regular(posl, posr.node())
422
6.82k
                   : this_t::visit_regular(posr, posl.node());
423
6.82k
    }
std::__1::enable_if<!(is_relaxed_v<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>), bool>::type immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
419
1.08k
    {
420
1.08k
        return posl.count() >= posr.count()
421
1.08k
                   ? this_t::visit_regular(posl, posr.node())
422
1.08k
                   : this_t::visit_regular(posr, posl.node());
423
1.08k
    }
424
425
    template <typename PosL, typename PosR, typename Iter>
426
    static bool visit_leaf(PosL&& posl, PosR&& posr, Iter&& first, size_t idx)
427
21.4k
    {
428
21.4k
        if (posl.node() == posr.node())
429
11.4k
            return true;
430
9.94k
        auto cl = posl.count();
431
9.94k
        auto cr = posr.count();
432
9.94k
        auto mp = std::min(cl, cr);
433
9.94k
        return std::equal(posl.node()->leaf(),
434
9.94k
                          posl.node()->leaf() + mp,
435
9.94k
                          posr.node()->leaf()) &&
436
7.60k
               std::equal(posl.node()->leaf() + mp,
437
7.60k
                          posl.node()->leaf() + posl.count(),
438
7.60k
                          first + (idx + mp));
439
21.4k
    }
bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
427
9.93k
    {
428
9.93k
        if (posl.node() == posr.node())
429
4.75k
            return true;
430
5.17k
        auto cl = posl.count();
431
5.17k
        auto cr = posr.count();
432
5.17k
        auto mp = std::min(cl, cr);
433
5.17k
        return std::equal(posl.node()->leaf(),
434
5.17k
                          posl.node()->leaf() + mp,
435
5.17k
                          posr.node()->leaf()) &&
436
3.49k
               std::equal(posl.node()->leaf() + mp,
437
3.49k
                          posl.node()->leaf() + posl.count(),
438
3.49k
                          first + (idx + mp));
439
9.93k
    }
Unexecuted instantiation: bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
427
6.79k
    {
428
6.79k
        if (posl.node() == posr.node())
429
3.93k
            return true;
430
2.85k
        auto cl = posl.count();
431
2.85k
        auto cr = posr.count();
432
2.85k
        auto mp = std::min(cl, cr);
433
2.85k
        return std::equal(posl.node()->leaf(),
434
2.85k
                          posl.node()->leaf() + mp,
435
2.85k
                          posr.node()->leaf()) &&
436
2.61k
               std::equal(posl.node()->leaf() + mp,
437
2.61k
                          posl.node()->leaf() + posl.count(),
438
2.61k
                          first + (idx + mp));
439
6.79k
    }
Unexecuted instantiation: bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Unexecuted instantiation: bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Unexecuted instantiation: bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
Line
Count
Source
427
4.68k
    {
428
4.68k
        if (posl.node() == posr.node())
429
2.77k
            return true;
430
1.90k
        auto cl = posl.count();
431
1.90k
        auto cr = posr.count();
432
1.90k
        auto mp = std::min(cl, cr);
433
1.90k
        return std::equal(posl.node()->leaf(),
434
1.90k
                          posl.node()->leaf() + mp,
435
1.90k
                          posr.node()->leaf()) &&
436
1.49k
               std::equal(posl.node()->leaf() + mp,
437
1.49k
                          posl.node()->leaf() + posl.count(),
438
1.49k
                          first + (idx + mp));
439
4.68k
    }
Unexecuted instantiation: bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>&, unsigned long)
440
441
    template <typename Pos, typename NodeT>
442
    static bool visit_regular(Pos&& pos, NodeT* other)
443
22.4k
    {
444
22.4k
        auto node = pos.node();
445
22.4k
        return node == other || pos.each_pred_zip(this_t{}, other);
446
22.4k
    }
bool immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Line
Count
Source
443
10.4k
    {
444
10.4k
        auto node = pos.node();
445
10.4k
        return node == other || pos.each_pred_zip(this_t{}, other);
446
10.4k
    }
bool immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Line
Count
Source
443
7.90k
    {
444
7.90k
        auto node = pos.node();
445
7.90k
        return node == other || pos.each_pred_zip(this_t{}, other);
446
7.90k
    }
bool immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Line
Count
Source
443
4.11k
    {
444
4.11k
        auto node = pos.node();
445
4.11k
        return node == other || pos.each_pred_zip(this_t{}, other);
446
4.11k
    }
447
448
    template <typename Pos, typename NodeT>
449
    static bool visit_leaf(Pos&& pos, NodeT* other)
450
23.8k
    {
451
23.8k
        auto node = pos.node();
452
23.8k
        return node == other || std::equal(node->leaf(),
453
9.55k
                                           node->leaf() + pos.count(),
454
9.55k
                                           other->leaf());
455
23.8k
    }
bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Line
Count
Source
450
13.7k
    {
451
13.7k
        auto node = pos.node();
452
13.7k
        return node == other || std::equal(node->leaf(),
453
4.87k
                                           node->leaf() + pos.count(),
454
4.87k
                                           other->leaf());
455
13.7k
    }
bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Line
Count
Source
450
3.05k
    {
451
3.05k
        auto node = pos.node();
452
3.05k
        return node == other || std::equal(node->leaf(),
453
1.54k
                                           node->leaf() + pos.count(),
454
1.54k
                                           other->leaf());
455
3.05k
    }
bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Line
Count
Source
450
7.07k
    {
451
7.07k
        auto node = pos.node();
452
7.07k
        return node == other || std::equal(node->leaf(),
453
3.13k
                                           node->leaf() + pos.count(),
454
3.13k
                                           other->leaf());
455
7.07k
    }
456
};
457
458
template <typename NodeT>
459
struct update_visitor : visitor_base<update_visitor<NodeT>>
460
{
461
    using node_t = NodeT;
462
    using this_t = update_visitor;
463
464
    template <typename Pos, typename Fn>
465
    static node_t* visit_relaxed(Pos&& pos, size_t idx, Fn&& fn)
466
299k
    {
467
299k
        auto offset = pos.index(idx);
468
299k
        auto count  = pos.count();
469
299k
        auto node   = node_t::make_inner_sr_n(count, pos.relaxed());
470
299k
        IMMER_TRY {
471
299k
            auto child = pos.towards_oh(this_t{}, idx, offset, fn);
472
299k
            node_t::do_copy_inner_replace_sr(
473
299k
                node, pos.node(), count, offset, child);
474
299k
            return node;
475
299k
        }
476
299k
        IMMER_CATCH (...) {
477
0
            node_t::delete_inner_r(node, count);
478
0
            IMMER_RETHROW;
479
0
        }
480
299k
    }
481
482
    template <typename Pos, typename Fn>
483
    static node_t* visit_regular(Pos&& pos, size_t idx, Fn&& fn)
484
47.2k
    {
485
47.2k
        auto offset = pos.index(idx);
486
47.2k
        auto count  = pos.count();
487
47.2k
        auto node   = node_t::make_inner_n(count);
488
47.2k
        IMMER_TRY {
489
47.2k
            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
490
47.2k
            node_t::do_copy_inner_replace(
491
47.2k
                node, pos.node(), count, offset, child);
492
47.2k
            return node;
493
47.2k
        }
494
47.2k
        IMMER_CATCH (...) {
495
0
            node_t::delete_inner(node, count);
496
0
            IMMER_RETHROW;
497
0
        }
498
47.2k
    }
flex-vector.cpp:immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::update_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, LLVMFuzzerTestOneInput::$_6::operator()<fuzzer_input>(fuzzer_input&) const::{lambda(auto:1)#1}&>(fuzzer_input&&, unsigned long, LLVMFuzzerTestOneInput::$_6::operator()<fuzzer_input>(fuzzer_input&) const::{lambda(auto:1)#1}&)
Line
Count
Source
484
24.5k
    {
485
24.5k
        auto offset = pos.index(idx);
486
24.5k
        auto count  = pos.count();
487
24.5k
        auto node   = node_t::make_inner_n(count);
488
24.5k
        IMMER_TRY {
489
24.5k
            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
490
24.5k
            node_t::do_copy_inner_replace(
491
24.5k
                node, pos.node(), count, offset, child);
492
24.5k
            return node;
493
24.5k
        }
494
24.5k
        IMMER_CATCH (...) {
495
0
            node_t::delete_inner(node, count);
496
0
            IMMER_RETHROW;
497
0
        }
498
24.5k
    }
flex-vector.cpp:immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::update_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, LLVMFuzzerTestOneInput::$_6::operator()<fuzzer_input>(fuzzer_input&) const::{lambda(auto:1)#1}&>(fuzzer_input&&, unsigned long, LLVMFuzzerTestOneInput::$_6::operator()<fuzzer_input>(fuzzer_input&) const::{lambda(auto:1)#1}&)
Line
Count
Source
484
17.8k
    {
485
17.8k
        auto offset = pos.index(idx);
486
17.8k
        auto count  = pos.count();
487
17.8k
        auto node   = node_t::make_inner_n(count);
488
17.8k
        IMMER_TRY {
489
17.8k
            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
490
17.8k
            node_t::do_copy_inner_replace(
491
17.8k
                node, pos.node(), count, offset, child);
492
17.8k
            return node;
493
17.8k
        }
494
17.8k
        IMMER_CATCH (...) {
495
0
            node_t::delete_inner(node, count);
496
0
            IMMER_RETHROW;
497
0
        }
498
17.8k
    }
flex-vector.cpp:immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::update_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, LLVMFuzzerTestOneInput::$_6::operator()<fuzzer_input>(fuzzer_input&) const::{lambda(auto:1)#1}&>(fuzzer_input&&, unsigned long, LLVMFuzzerTestOneInput::$_6::operator()<fuzzer_input>(fuzzer_input&) const::{lambda(auto:1)#1}&)
Line
Count
Source
484
4.81k
    {
485
4.81k
        auto offset = pos.index(idx);
486
4.81k
        auto count  = pos.count();
487
4.81k
        auto node   = node_t::make_inner_n(count);
488
4.81k
        IMMER_TRY {
489
4.81k
            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
490
4.81k
            node_t::do_copy_inner_replace(
491
4.81k
                node, pos.node(), count, offset, child);
492
4.81k
            return node;
493
4.81k
        }
494
4.81k
        IMMER_CATCH (...) {
495
0
            node_t::delete_inner(node, count);
496
0
            IMMER_RETHROW;
497
0
        }
498
4.81k
    }
499
500
    template <typename Pos, typename Fn>
501
    static node_t* visit_leaf(Pos&& pos, size_t idx, Fn&& fn)
502
112k
    {
503
112k
        auto offset = pos.index(idx);
504
112k
        auto node   = node_t::copy_leaf(pos.node(), pos.count());
505
112k
        IMMER_TRY {
506
112k
            node->leaf()[offset] =
507
112k
                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
508
112k
            return node;
509
112k
        }
510
112k
        IMMER_CATCH (...) {
511
0
            node_t::delete_leaf(node, pos.count());
512
0
            IMMER_RETHROW;
513
0
        }
514
112k
    }
flex-vector.cpp:immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::update_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, LLVMFuzzerTestOneInput::$_6::operator()<fuzzer_input>(fuzzer_input&) const::{lambda(auto:1)#1}&>(fuzzer_input&&, unsigned long, LLVMFuzzerTestOneInput::$_6::operator()<fuzzer_input>(fuzzer_input&) const::{lambda(auto:1)#1}&)
Line
Count
Source
502
87.5k
    {
503
87.5k
        auto offset = pos.index(idx);
504
87.5k
        auto node   = node_t::copy_leaf(pos.node(), pos.count());
505
87.5k
        IMMER_TRY {
506
87.5k
            node->leaf()[offset] =
507
87.5k
                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
508
87.5k
            return node;
509
87.5k
        }
510
87.5k
        IMMER_CATCH (...) {
511
0
            node_t::delete_leaf(node, pos.count());
512
0
            IMMER_RETHROW;
513
0
        }
514
87.5k
    }
flex-vector.cpp:immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::update_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, LLVMFuzzerTestOneInput::$_6::operator()<fuzzer_input>(fuzzer_input&) const::{lambda(auto:1)#1}&>(fuzzer_input&&, unsigned long, LLVMFuzzerTestOneInput::$_6::operator()<fuzzer_input>(fuzzer_input&) const::{lambda(auto:1)#1}&)
Line
Count
Source
502
21.5k
    {
503
21.5k
        auto offset = pos.index(idx);
504
21.5k
        auto node   = node_t::copy_leaf(pos.node(), pos.count());
505
21.5k
        IMMER_TRY {
506
21.5k
            node->leaf()[offset] =
507
21.5k
                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
508
21.5k
            return node;
509
21.5k
        }
510
21.5k
        IMMER_CATCH (...) {
511
0
            node_t::delete_leaf(node, pos.count());
512
0
            IMMER_RETHROW;
513
0
        }
514
21.5k
    }
flex-vector.cpp:immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::update_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, LLVMFuzzerTestOneInput::$_6::operator()<fuzzer_input>(fuzzer_input&) const::{lambda(auto:1)#1}&>(fuzzer_input&&, unsigned long, LLVMFuzzerTestOneInput::$_6::operator()<fuzzer_input>(fuzzer_input&) const::{lambda(auto:1)#1}&)
Line
Count
Source
502
3.01k
    {
503
3.01k
        auto offset = pos.index(idx);
504
3.01k
        auto node   = node_t::copy_leaf(pos.node(), pos.count());
505
3.01k
        IMMER_TRY {
506
3.01k
            node->leaf()[offset] =
507
3.01k
                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
508
3.01k
            return node;
509
3.01k
        }
510
3.01k
        IMMER_CATCH (...) {
511
0
            node_t::delete_leaf(node, pos.count());
512
0
            IMMER_RETHROW;
513
0
        }
514
3.01k
    }
515
};
516
517
struct dec_visitor : visitor_base<dec_visitor>
518
{
519
    using this_t = dec_visitor;
520
521
    template <typename Pos>
522
    static void visit_relaxed(Pos&& p)
523
37.1M
    {
524
37.1M
        using node_t = node_type<Pos>;
525
37.1M
        auto node    = p.node();
526
37.1M
        if (node->dec()) {
527
12.1M
            p.each(this_t{});
528
12.1M
            node_t::delete_inner_r(node, p.count());
529
12.1M
        }
530
37.1M
    }
531
532
    template <typename Pos>
533
    static void visit_regular(Pos&& p)
534
10.5M
    {
535
10.5M
        using node_t = node_type<Pos>;
536
10.5M
        auto node    = p.node();
537
10.5M
        if (node->dec()) {
538
3.23M
            p.each(this_t{});
539
3.23M
            node_t::delete_inner(node, p.count());
540
3.23M
        }
541
10.5M
    }
void immer::detail::rbts::dec_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
534
2.73M
    {
535
2.73M
        using node_t = node_type<Pos>;
536
2.73M
        auto node    = p.node();
537
2.73M
        if (node->dec()) {
538
620k
            p.each(this_t{});
539
620k
            node_t::delete_inner(node, p.count());
540
620k
        }
541
2.73M
    }
void immer::detail::rbts::dec_visitor::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
534
3.61M
    {
535
3.61M
        using node_t = node_type<Pos>;
536
3.61M
        auto node    = p.node();
537
3.61M
        if (node->dec()) {
538
247k
            p.each(this_t{});
539
247k
            node_t::delete_inner(node, p.count());
540
247k
        }
541
3.61M
    }
void immer::detail::rbts::dec_visitor::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
534
2.50M
    {
535
2.50M
        using node_t = node_type<Pos>;
536
2.50M
        auto node    = p.node();
537
2.50M
        if (node->dec()) {
538
2.36M
            p.each(this_t{});
539
2.36M
            node_t::delete_inner(node, p.count());
540
2.36M
        }
541
2.50M
    }
void immer::detail::rbts::dec_visitor::visit_regular<immer::detail::rbts::empty_regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::empty_regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
534
1.73M
    {
535
1.73M
        using node_t = node_type<Pos>;
536
1.73M
        auto node    = p.node();
537
1.73M
        if (node->dec()) {
538
0
            p.each(this_t{});
539
0
            node_t::delete_inner(node, p.count());
540
0
        }
541
1.73M
    }
542
543
    template <typename Pos>
544
    static void visit_leaf(Pos&& p)
545
14.2M
    {
546
14.2M
        using node_t = node_type<Pos>;
547
14.2M
        auto node    = p.node();
548
14.2M
        if (node->dec()) {
549
1.51M
            node_t::delete_leaf(node, p.count());
550
1.51M
        }
551
14.2M
    }
void immer::detail::rbts::dec_visitor::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
545
1.27M
    {
546
1.27M
        using node_t = node_type<Pos>;
547
1.27M
        auto node    = p.node();
548
1.27M
        if (node->dec()) {
549
572k
            node_t::delete_leaf(node, p.count());
550
572k
        }
551
1.27M
    }
void immer::detail::rbts::dec_visitor::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
545
493k
    {
546
493k
        using node_t = node_type<Pos>;
547
493k
        auto node    = p.node();
548
493k
        if (node->dec()) {
549
20.4k
            node_t::delete_leaf(node, p.count());
550
20.4k
        }
551
493k
    }
void immer::detail::rbts::dec_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
545
10.7M
    {
546
10.7M
        using node_t = node_type<Pos>;
547
10.7M
        auto node    = p.node();
548
10.7M
        if (node->dec()) {
549
922k
            node_t::delete_leaf(node, p.count());
550
922k
        }
551
10.7M
    }
void immer::detail::rbts::dec_visitor::visit_leaf<immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
545
1.64M
    {
546
1.64M
        using node_t = node_type<Pos>;
547
1.64M
        auto node    = p.node();
548
1.64M
        if (node->dec()) {
549
0
            node_t::delete_leaf(node, p.count());
550
0
        }
551
1.64M
    }
552
};
553
554
template <typename NodeT>
555
void dec_leaf(NodeT* node, count_t n)
556
40.8k
{
557
40.8k
    make_leaf_sub_pos(node, n).visit(dec_visitor{});
558
40.8k
}
559
560
template <typename NodeT>
561
void dec_inner(NodeT* node, shift_t shift, size_t size)
562
521
{
563
521
    visit_maybe_relaxed_sub(node, shift, size, dec_visitor());
564
521
}
565
566
template <typename NodeT>
567
void dec_relaxed(NodeT* node, shift_t shift)
568
0
{
569
0
    make_relaxed_pos(node, shift, node->relaxed()).visit(dec_visitor());
570
0
}
571
572
template <typename NodeT>
573
void dec_regular(NodeT* node, shift_t shift, size_t size)
574
0
{
575
0
    make_regular_pos(node, shift, size).visit(dec_visitor());
576
0
}
577
578
template <typename NodeT>
579
void dec_empty_regular(NodeT* node)
580
2.33k
{
581
2.33k
    make_empty_regular_pos(node).visit(dec_visitor());
582
2.33k
}
583
584
template <typename NodeT>
585
struct get_mut_visitor : visitor_base<get_mut_visitor<NodeT>>
586
{
587
    using node_t  = NodeT;
588
    using this_t  = get_mut_visitor;
589
    using value_t = typename NodeT::value_t;
590
    using edit_t  = typename NodeT::edit_t;
591
592
    template <typename Pos>
593
    static value_t&
594
    visit_relaxed(Pos&& pos, size_t idx, edit_t e, node_t** location)
595
96.9k
    {
596
96.9k
        auto offset = pos.index(idx);
597
96.9k
        auto count  = pos.count();
598
96.9k
        auto node   = pos.node();
599
96.9k
        if (node->can_mutate(e)) {
600
84.9k
            return pos.towards_oh(
601
84.9k
                this_t{}, idx, offset, e, &node->inner()[offset]);
602
84.9k
        } else {
603
12.0k
            auto new_node = node_t::copy_inner_sr_e(e, node, count);
604
12.0k
            IMMER_TRY {
605
12.0k
                auto& res = pos.towards_oh(
606
12.0k
                    this_t{}, idx, offset, e, &new_node->inner()[offset]);
607
12.0k
                pos.visit(dec_visitor{});
608
12.0k
                *location = new_node;
609
12.0k
                return res;
610
12.0k
            }
611
12.0k
            IMMER_CATCH (...) {
612
0
                dec_relaxed(new_node, pos.shift());
613
0
                IMMER_RETHROW;
614
0
            }
615
12.0k
        }
616
96.9k
    }
617
618
    template <typename Pos>
619
    static value_t&
620
    visit_regular(Pos&& pos, size_t idx, edit_t e, node_t** location)
621
15.1k
    {
622
15.1k
        assert(pos.node() == *location);
623
15.1k
        auto offset = pos.index(idx);
624
15.1k
        auto count  = pos.count();
625
15.1k
        auto node   = pos.node();
626
15.1k
        if (node->can_mutate(e)) {
627
11.2k
            return pos.towards_oh_ch(
628
11.2k
                this_t{}, idx, offset, count, e, &node->inner()[offset]);
629
11.2k
        } else {
630
3.92k
            auto new_node = node_t::copy_inner_e(e, node, count);
631
3.92k
            IMMER_TRY {
632
3.92k
                auto& res = pos.towards_oh_ch(this_t{},
633
3.92k
                                              idx,
634
3.92k
                                              offset,
635
3.92k
                                              count,
636
3.92k
                                              e,
637
3.92k
                                              &new_node->inner()[offset]);
638
3.92k
                pos.visit(dec_visitor{});
639
3.92k
                *location = new_node;
640
3.92k
                return res;
641
3.92k
            }
642
3.92k
            IMMER_CATCH (...) {
643
0
                dec_regular(new_node, pos.shift(), pos.size());
644
0
                IMMER_RETHROW;
645
0
            }
646
3.92k
        }
647
15.1k
    }
int& immer::detail::rbts::get_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>**)
Line
Count
Source
621
7.77k
    {
622
7.77k
        assert(pos.node() == *location);
623
7.77k
        auto offset = pos.index(idx);
624
7.77k
        auto count  = pos.count();
625
7.77k
        auto node   = pos.node();
626
7.77k
        if (node->can_mutate(e)) {
627
5.90k
            return pos.towards_oh_ch(
628
5.90k
                this_t{}, idx, offset, count, e, &node->inner()[offset]);
629
5.90k
        } else {
630
1.87k
            auto new_node = node_t::copy_inner_e(e, node, count);
631
1.87k
            IMMER_TRY {
632
1.87k
                auto& res = pos.towards_oh_ch(this_t{},
633
1.87k
                                              idx,
634
1.87k
                                              offset,
635
1.87k
                                              count,
636
1.87k
                                              e,
637
1.87k
                                              &new_node->inner()[offset]);
638
1.87k
                pos.visit(dec_visitor{});
639
1.87k
                *location = new_node;
640
1.87k
                return res;
641
1.87k
            }
642
1.87k
            IMMER_CATCH (...) {
643
0
                dec_regular(new_node, pos.shift(), pos.size());
644
0
                IMMER_RETHROW;
645
0
            }
646
1.87k
        }
647
7.77k
    }
int& immer::detail::rbts::get_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>**)
Line
Count
Source
621
5.48k
    {
622
5.48k
        assert(pos.node() == *location);
623
5.48k
        auto offset = pos.index(idx);
624
5.48k
        auto count  = pos.count();
625
5.48k
        auto node   = pos.node();
626
5.48k
        if (node->can_mutate(e)) {
627
3.72k
            return pos.towards_oh_ch(
628
3.72k
                this_t{}, idx, offset, count, e, &node->inner()[offset]);
629
3.72k
        } else {
630
1.76k
            auto new_node = node_t::copy_inner_e(e, node, count);
631
1.76k
            IMMER_TRY {
632
1.76k
                auto& res = pos.towards_oh_ch(this_t{},
633
1.76k
                                              idx,
634
1.76k
                                              offset,
635
1.76k
                                              count,
636
1.76k
                                              e,
637
1.76k
                                              &new_node->inner()[offset]);
638
1.76k
                pos.visit(dec_visitor{});
639
1.76k
                *location = new_node;
640
1.76k
                return res;
641
1.76k
            }
642
1.76k
            IMMER_CATCH (...) {
643
0
                dec_regular(new_node, pos.shift(), pos.size());
644
0
                IMMER_RETHROW;
645
0
            }
646
1.76k
        }
647
5.48k
    }
int& immer::detail::rbts::get_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>**)
Line
Count
Source
621
1.89k
    {
622
1.89k
        assert(pos.node() == *location);
623
1.89k
        auto offset = pos.index(idx);
624
1.89k
        auto count  = pos.count();
625
1.89k
        auto node   = pos.node();
626
1.89k
        if (node->can_mutate(e)) {
627
1.60k
            return pos.towards_oh_ch(
628
1.60k
                this_t{}, idx, offset, count, e, &node->inner()[offset]);
629
1.60k
        } else {
630
291
            auto new_node = node_t::copy_inner_e(e, node, count);
631
291
            IMMER_TRY {
632
291
                auto& res = pos.towards_oh_ch(this_t{},
633
291
                                              idx,
634
291
                                              offset,
635
291
                                              count,
636
291
                                              e,
637
291
                                              &new_node->inner()[offset]);
638
291
                pos.visit(dec_visitor{});
639
291
                *location = new_node;
640
291
                return res;
641
291
            }
642
291
            IMMER_CATCH (...) {
643
0
                dec_regular(new_node, pos.shift(), pos.size());
644
0
                IMMER_RETHROW;
645
0
            }
646
291
        }
647
1.89k
    }
648
649
    template <typename Pos>
650
    static value_t&
651
    visit_leaf(Pos&& pos, size_t idx, edit_t e, node_t** location)
652
44.3k
    {
653
44.3k
        assert(pos.node() == *location);
654
44.3k
        auto node = pos.node();
655
44.3k
        if (node->can_mutate(e)) {
656
39.4k
            return node->leaf()[pos.index(idx)];
657
39.4k
        } else {
658
4.98k
            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
659
4.98k
            pos.visit(dec_visitor{});
660
4.98k
            *location = new_node;
661
4.98k
            return new_node->leaf()[pos.index(idx)];
662
4.98k
        }
663
44.3k
    }
int& immer::detail::rbts::get_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>**)
Line
Count
Source
652
36.6k
    {
653
36.6k
        assert(pos.node() == *location);
654
36.6k
        auto node = pos.node();
655
36.6k
        if (node->can_mutate(e)) {
656
34.1k
            return node->leaf()[pos.index(idx)];
657
34.1k
        } else {
658
2.45k
            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
659
2.45k
            pos.visit(dec_visitor{});
660
2.45k
            *location = new_node;
661
2.45k
            return new_node->leaf()[pos.index(idx)];
662
2.45k
        }
663
36.6k
    }
int& immer::detail::rbts::get_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>**)
Line
Count
Source
652
6.60k
    {
653
6.60k
        assert(pos.node() == *location);
654
6.60k
        auto node = pos.node();
655
6.60k
        if (node->can_mutate(e)) {
656
4.54k
            return node->leaf()[pos.index(idx)];
657
4.54k
        } else {
658
2.06k
            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
659
2.06k
            pos.visit(dec_visitor{});
660
2.06k
            *location = new_node;
661
2.06k
            return new_node->leaf()[pos.index(idx)];
662
2.06k
        }
663
6.60k
    }
int& immer::detail::rbts::get_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>**)
Line
Count
Source
652
1.17k
    {
653
1.17k
        assert(pos.node() == *location);
654
1.17k
        auto node = pos.node();
655
1.17k
        if (node->can_mutate(e)) {
656
703
            return node->leaf()[pos.index(idx)];
657
703
        } else {
658
467
            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
659
467
            pos.visit(dec_visitor{});
660
467
            *location = new_node;
661
467
            return new_node->leaf()[pos.index(idx)];
662
467
        }
663
1.17k
    }
664
};
665
666
template <typename NodeT, bool Mutating = true>
667
struct push_tail_mut_visitor
668
    : visitor_base<push_tail_mut_visitor<NodeT, Mutating>>
669
{
670
    static constexpr auto B  = NodeT::bits;
671
    static constexpr auto BL = NodeT::bits_leaf;
672
673
    using this_t        = push_tail_mut_visitor;
674
    using this_no_mut_t = push_tail_mut_visitor<NodeT, false>;
675
    using node_t        = NodeT;
676
    using edit_t        = typename NodeT::edit_t;
677
678
    template <typename Pos>
679
    static node_t* visit_relaxed(Pos&& pos, edit_t e, node_t* tail, count_t ts)
680
70.3k
    {
681
70.3k
        auto node     = pos.node();
682
70.3k
        auto level    = pos.shift();
683
70.3k
        auto idx      = pos.count() - 1;
684
70.3k
        auto children = pos.size(idx);
685
70.3k
        auto new_idx =
686
70.3k
            children == size_t{1} << level || level == BL ? idx + 1 : idx;
687
70.3k
        auto new_child = static_cast<node_t*>(nullptr);
688
70.3k
        auto mutate    = Mutating && node->can_mutate(e);
689
690
70.3k
        if (new_idx >= branches<B>)
691
1.92k
            return nullptr;
692
68.3k
        else if (idx == new_idx) {
693
66.0k
            new_child =
694
66.0k
                mutate ? pos.last_oh_csh(this_t{}, idx, children, e, tail, ts)
695
66.0k
                       : pos.last_oh_csh(
696
8.40k
                             this_no_mut_t{}, idx, children, e, tail, ts);
697
66.0k
            if (!new_child) {
698
1.36k
                if (++new_idx < branches<B>)
699
671
                    new_child = node_t::make_path_e(e, level - B, tail);
700
694
                else
701
694
                    return nullptr;
702
1.36k
            }
703
66.0k
        } else
704
2.36k
            new_child = node_t::make_path_e(e, level - B, tail);
705
706
67.6k
        if (mutate) {
707
58.9k
            auto count             = new_idx + 1;
708
58.9k
            auto relaxed           = node->ensure_mutable_relaxed_n(e, new_idx);
709
58.9k
            node->inner()[new_idx] = new_child;
710
58.9k
            relaxed->d.sizes[new_idx] = pos.size() + ts;
711
58.9k
            relaxed->d.count          = count;
712
58.9k
            assert(relaxed->d.sizes[new_idx]);
713
58.9k
            return node;
714
58.9k
        } else {
715
8.77k
            IMMER_TRY {
716
8.77k
                auto count    = new_idx + 1;
717
8.77k
                auto new_node = node_t::copy_inner_r_e(e, pos.node(), new_idx);
718
8.77k
                auto relaxed  = new_node->relaxed();
719
8.77k
                new_node->inner()[new_idx] = new_child;
720
8.77k
                relaxed->d.sizes[new_idx]  = pos.size() + ts;
721
8.77k
                relaxed->d.count           = count;
722
8.77k
                assert(relaxed->d.sizes[new_idx]);
723
8.77k
                if (Mutating)
724
2.38k
                    pos.visit(dec_visitor{});
725
8.77k
                return new_node;
726
8.77k
            }
727
8.77k
            IMMER_CATCH (...) {
728
0
                auto shift = pos.shift();
729
0
                auto size  = new_idx == idx ? children + ts : ts;
730
0
                if (shift > BL) {
731
0
                    tail->inc();
732
0
                    dec_inner(new_child, shift - B, size);
733
0
                }
734
0
                IMMER_RETHROW;
735
0
            }
736
8.77k
        }
737
67.6k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int)
Line
Count
Source
680
63.0k
    {
681
63.0k
        auto node     = pos.node();
682
63.0k
        auto level    = pos.shift();
683
63.0k
        auto idx      = pos.count() - 1;
684
63.0k
        auto children = pos.size(idx);
685
63.0k
        auto new_idx =
686
63.0k
            children == size_t{1} << level || level == BL ? idx + 1 : idx;
687
63.0k
        auto new_child = static_cast<node_t*>(nullptr);
688
63.0k
        auto mutate    = Mutating && node->can_mutate(e);
689
690
63.0k
        if (new_idx >= branches<B>)
691
1.36k
            return nullptr;
692
61.6k
        else if (idx == new_idx) {
693
60.1k
            new_child =
694
60.1k
                mutate ? pos.last_oh_csh(this_t{}, idx, children, e, tail, ts)
695
60.1k
                       : pos.last_oh_csh(
696
2.50k
                             this_no_mut_t{}, idx, children, e, tail, ts);
697
60.1k
            if (!new_child) {
698
774
                if (++new_idx < branches<B>)
699
425
                    new_child = node_t::make_path_e(e, level - B, tail);
700
349
                else
701
349
                    return nullptr;
702
774
            }
703
60.1k
        } else
704
1.53k
            new_child = node_t::make_path_e(e, level - B, tail);
705
706
61.2k
        if (mutate) {
707
58.9k
            auto count             = new_idx + 1;
708
58.9k
            auto relaxed           = node->ensure_mutable_relaxed_n(e, new_idx);
709
58.9k
            node->inner()[new_idx] = new_child;
710
58.9k
            relaxed->d.sizes[new_idx] = pos.size() + ts;
711
58.9k
            relaxed->d.count          = count;
712
58.9k
            assert(relaxed->d.sizes[new_idx]);
713
58.9k
            return node;
714
58.9k
        } else {
715
2.38k
            IMMER_TRY {
716
2.38k
                auto count    = new_idx + 1;
717
2.38k
                auto new_node = node_t::copy_inner_r_e(e, pos.node(), new_idx);
718
2.38k
                auto relaxed  = new_node->relaxed();
719
2.38k
                new_node->inner()[new_idx] = new_child;
720
2.38k
                relaxed->d.sizes[new_idx]  = pos.size() + ts;
721
2.38k
                relaxed->d.count           = count;
722
2.38k
                assert(relaxed->d.sizes[new_idx]);
723
2.38k
                if (Mutating)
724
2.38k
                    pos.visit(dec_visitor{});
725
2.38k
                return new_node;
726
2.38k
            }
727
2.38k
            IMMER_CATCH (...) {
728
0
                auto shift = pos.shift();
729
0
                auto size  = new_idx == idx ? children + ts : ts;
730
0
                if (shift > BL) {
731
0
                    tail->inc();
732
0
                    dec_inner(new_child, shift - B, size);
733
0
                }
734
0
                IMMER_RETHROW;
735
0
            }
736
2.38k
        }
737
61.2k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int)
Line
Count
Source
680
7.29k
    {
681
7.29k
        auto node     = pos.node();
682
7.29k
        auto level    = pos.shift();
683
7.29k
        auto idx      = pos.count() - 1;
684
7.29k
        auto children = pos.size(idx);
685
7.29k
        auto new_idx =
686
7.29k
            children == size_t{1} << level || level == BL ? idx + 1 : idx;
687
7.29k
        auto new_child = static_cast<node_t*>(nullptr);
688
7.29k
        auto mutate    = Mutating && node->can_mutate(e);
689
690
7.29k
        if (new_idx >= branches<B>)
691
559
            return nullptr;
692
6.73k
        else if (idx == new_idx) {
693
5.90k
            new_child =
694
5.90k
                mutate ? pos.last_oh_csh(this_t{}, idx, children, e, tail, ts)
695
5.90k
                       : pos.last_oh_csh(
696
5.90k
                             this_no_mut_t{}, idx, children, e, tail, ts);
697
5.90k
            if (!new_child) {
698
591
                if (++new_idx < branches<B>)
699
246
                    new_child = node_t::make_path_e(e, level - B, tail);
700
345
                else
701
345
                    return nullptr;
702
591
            }
703
5.90k
        } else
704
829
            new_child = node_t::make_path_e(e, level - B, tail);
705
706
6.39k
        if (mutate) {
707
0
            auto count             = new_idx + 1;
708
0
            auto relaxed           = node->ensure_mutable_relaxed_n(e, new_idx);
709
0
            node->inner()[new_idx] = new_child;
710
0
            relaxed->d.sizes[new_idx] = pos.size() + ts;
711
0
            relaxed->d.count          = count;
712
0
            assert(relaxed->d.sizes[new_idx]);
713
0
            return node;
714
6.39k
        } else {
715
6.39k
            IMMER_TRY {
716
6.39k
                auto count    = new_idx + 1;
717
6.39k
                auto new_node = node_t::copy_inner_r_e(e, pos.node(), new_idx);
718
6.39k
                auto relaxed  = new_node->relaxed();
719
6.39k
                new_node->inner()[new_idx] = new_child;
720
6.39k
                relaxed->d.sizes[new_idx]  = pos.size() + ts;
721
6.39k
                relaxed->d.count           = count;
722
6.39k
                assert(relaxed->d.sizes[new_idx]);
723
6.39k
                if (Mutating)
724
0
                    pos.visit(dec_visitor{});
725
6.39k
                return new_node;
726
6.39k
            }
727
6.39k
            IMMER_CATCH (...) {
728
0
                auto shift = pos.shift();
729
0
                auto size  = new_idx == idx ? children + ts : ts;
730
0
                if (shift > BL) {
731
0
                    tail->inc();
732
0
                    dec_inner(new_child, shift - B, size);
733
0
                }
734
0
                IMMER_RETHROW;
735
0
            }
736
6.39k
        }
737
6.39k
    }
738
739
    template <typename Pos, typename... Args>
740
    static node_t* visit_regular(Pos&& pos, edit_t e, node_t* tail, Args&&...)
741
1.18M
    {
742
1.18M
        assert((pos.size() & mask<BL>) == 0);
743
1.18M
        auto node    = pos.node();
744
1.18M
        auto idx     = pos.index(pos.size() - 1);
745
1.18M
        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
746
1.18M
        auto mutate  = Mutating && node->can_mutate(e);
747
1.18M
        if (mutate) {
748
1.18M
            node->inner()[new_idx] =
749
1.18M
                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
750
                               /* otherwise */
751
1.18M
                               : node_t::make_path_e(e, pos.shift() - B, tail);
752
1.18M
            return node;
753
1.18M
        } else {
754
6.30k
            auto new_parent = node_t::make_inner_e(e);
755
6.30k
            IMMER_TRY {
756
6.30k
                new_parent->inner()[new_idx] =
757
6.30k
                    idx == new_idx
758
6.30k
                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
759
                        /* otherwise */
760
6.30k
                        : node_t::make_path_e(e, pos.shift() - B, tail);
761
6.30k
                node_t::do_copy_inner(new_parent, node, new_idx);
762
6.30k
                if (Mutating)
763
2.09k
                    pos.visit(dec_visitor{});
764
6.30k
                return new_parent;
765
6.30k
            }
766
6.30k
            IMMER_CATCH (...) {
767
0
                node_t::delete_inner_e(new_parent);
768
0
                IMMER_RETHROW;
769
0
            }
770
6.30k
        }
771
1.18M
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int&)
Line
Count
Source
741
48.1k
    {
742
48.1k
        assert((pos.size() & mask<BL>) == 0);
743
48.1k
        auto node    = pos.node();
744
48.1k
        auto idx     = pos.index(pos.size() - 1);
745
48.1k
        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
746
48.1k
        auto mutate  = Mutating && node->can_mutate(e);
747
48.1k
        if (mutate) {
748
47.4k
            node->inner()[new_idx] =
749
47.4k
                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
750
                               /* otherwise */
751
47.4k
                               : node_t::make_path_e(e, pos.shift() - B, tail);
752
47.4k
            return node;
753
47.4k
        } else {
754
717
            auto new_parent = node_t::make_inner_e(e);
755
717
            IMMER_TRY {
756
717
                new_parent->inner()[new_idx] =
757
717
                    idx == new_idx
758
717
                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
759
                        /* otherwise */
760
717
                        : node_t::make_path_e(e, pos.shift() - B, tail);
761
717
                node_t::do_copy_inner(new_parent, node, new_idx);
762
717
                if (Mutating)
763
717
                    pos.visit(dec_visitor{});
764
717
                return new_parent;
765
717
            }
766
717
            IMMER_CATCH (...) {
767
0
                node_t::delete_inner_e(new_parent);
768
0
                IMMER_RETHROW;
769
0
            }
770
717
        }
771
48.1k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Line
Count
Source
741
970k
    {
742
970k
        assert((pos.size() & mask<BL>) == 0);
743
970k
        auto node    = pos.node();
744
970k
        auto idx     = pos.index(pos.size() - 1);
745
970k
        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
746
970k
        auto mutate  = Mutating && node->can_mutate(e);
747
970k
        if (mutate) {
748
970k
            node->inner()[new_idx] =
749
970k
                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
750
                               /* otherwise */
751
970k
                               : node_t::make_path_e(e, pos.shift() - B, tail);
752
970k
            return node;
753
970k
        } else {
754
707
            auto new_parent = node_t::make_inner_e(e);
755
707
            IMMER_TRY {
756
707
                new_parent->inner()[new_idx] =
757
707
                    idx == new_idx
758
707
                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
759
                        /* otherwise */
760
707
                        : node_t::make_path_e(e, pos.shift() - B, tail);
761
707
                node_t::do_copy_inner(new_parent, node, new_idx);
762
707
                if (Mutating)
763
707
                    pos.visit(dec_visitor{});
764
707
                return new_parent;
765
707
            }
766
707
            IMMER_CATCH (...) {
767
0
                node_t::delete_inner_e(new_parent);
768
0
                IMMER_RETHROW;
769
0
            }
770
707
        }
771
970k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Line
Count
Source
741
3.10k
    {
742
3.10k
        assert((pos.size() & mask<BL>) == 0);
743
3.10k
        auto node    = pos.node();
744
3.10k
        auto idx     = pos.index(pos.size() - 1);
745
3.10k
        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
746
3.10k
        auto mutate  = Mutating && node->can_mutate(e);
747
3.10k
        if (mutate) {
748
0
            node->inner()[new_idx] =
749
0
                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
750
                               /* otherwise */
751
0
                               : node_t::make_path_e(e, pos.shift() - B, tail);
752
0
            return node;
753
3.10k
        } else {
754
3.10k
            auto new_parent = node_t::make_inner_e(e);
755
3.10k
            IMMER_TRY {
756
3.10k
                new_parent->inner()[new_idx] =
757
3.10k
                    idx == new_idx
758
3.10k
                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
759
                        /* otherwise */
760
3.10k
                        : node_t::make_path_e(e, pos.shift() - B, tail);
761
3.10k
                node_t::do_copy_inner(new_parent, node, new_idx);
762
3.10k
                if (Mutating)
763
0
                    pos.visit(dec_visitor{});
764
3.10k
                return new_parent;
765
3.10k
            }
766
3.10k
            IMMER_CATCH (...) {
767
0
                node_t::delete_inner_e(new_parent);
768
0
                IMMER_RETHROW;
769
0
            }
770
3.10k
        }
771
3.10k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int&)
Line
Count
Source
741
1.11k
    {
742
1.11k
        assert((pos.size() & mask<BL>) == 0);
743
1.11k
        auto node    = pos.node();
744
1.11k
        auto idx     = pos.index(pos.size() - 1);
745
1.11k
        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
746
1.11k
        auto mutate  = Mutating && node->can_mutate(e);
747
1.11k
        if (mutate) {
748
0
            node->inner()[new_idx] =
749
0
                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
750
                               /* otherwise */
751
0
                               : node_t::make_path_e(e, pos.shift() - B, tail);
752
0
            return node;
753
1.11k
        } else {
754
1.11k
            auto new_parent = node_t::make_inner_e(e);
755
1.11k
            IMMER_TRY {
756
1.11k
                new_parent->inner()[new_idx] =
757
1.11k
                    idx == new_idx
758
1.11k
                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
759
                        /* otherwise */
760
1.11k
                        : node_t::make_path_e(e, pos.shift() - B, tail);
761
1.11k
                node_t::do_copy_inner(new_parent, node, new_idx);
762
1.11k
                if (Mutating)
763
0
                    pos.visit(dec_visitor{});
764
1.11k
                return new_parent;
765
1.11k
            }
766
1.11k
            IMMER_CATCH (...) {
767
0
                node_t::delete_inner_e(new_parent);
768
0
                IMMER_RETHROW;
769
0
            }
770
1.11k
        }
771
1.11k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Line
Count
Source
741
166k
    {
742
166k
        assert((pos.size() & mask<BL>) == 0);
743
166k
        auto node    = pos.node();
744
166k
        auto idx     = pos.index(pos.size() - 1);
745
166k
        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
746
166k
        auto mutate  = Mutating && node->can_mutate(e);
747
166k
        if (mutate) {
748
166k
            node->inner()[new_idx] =
749
166k
                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
750
                               /* otherwise */
751
166k
                               : node_t::make_path_e(e, pos.shift() - B, tail);
752
166k
            return node;
753
166k
        } else {
754
668
            auto new_parent = node_t::make_inner_e(e);
755
668
            IMMER_TRY {
756
668
                new_parent->inner()[new_idx] =
757
668
                    idx == new_idx
758
668
                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
759
                        /* otherwise */
760
668
                        : node_t::make_path_e(e, pos.shift() - B, tail);
761
668
                node_t::do_copy_inner(new_parent, node, new_idx);
762
668
                if (Mutating)
763
668
                    pos.visit(dec_visitor{});
764
668
                return new_parent;
765
668
            }
766
668
            IMMER_CATCH (...) {
767
0
                node_t::delete_inner_e(new_parent);
768
0
                IMMER_RETHROW;
769
0
            }
770
668
        }
771
166k
    }
772
773
    template <typename Pos, typename... Args>
774
    static node_t* visit_leaf(Pos&& pos, edit_t e, node_t* tail, Args&&...)
775
0
    {
776
0
        IMMER_UNREACHABLE;
777
0
    }
Unexecuted instantiation: immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int&)
Unexecuted instantiation: immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Unexecuted instantiation: immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Unexecuted instantiation: immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int&)
778
};
779
780
template <typename NodeT>
781
struct push_tail_visitor : visitor_base<push_tail_visitor<NodeT>>
782
{
783
    static constexpr auto B  = NodeT::bits;
784
    static constexpr auto BL = NodeT::bits_leaf;
785
786
    using this_t = push_tail_visitor;
787
    using node_t = NodeT;
788
789
    template <typename Pos>
790
    static node_t* visit_relaxed(Pos&& pos, node_t* tail, count_t ts)
791
573k
    {
792
573k
        auto level    = pos.shift();
793
573k
        auto idx      = pos.count() - 1;
794
573k
        auto children = pos.size(idx);
795
573k
        auto new_idx =
796
573k
            children == size_t{1} << level || level == BL ? idx + 1 : idx;
797
573k
        auto new_child = static_cast<node_t*>(nullptr);
798
573k
        if (new_idx >= branches<B>)
799
4.82k
            return nullptr;
800
568k
        else if (idx == new_idx) {
801
558k
            new_child = pos.last_oh_csh(this_t{}, idx, children, tail, ts);
802
558k
            if (!new_child) {
803
3.93k
                if (++new_idx < branches<B>)
804
2.78k
                    new_child = node_t::make_path(level - B, tail);
805
1.14k
                else
806
1.14k
                    return nullptr;
807
3.93k
            }
808
558k
        } else
809
9.34k
            new_child = node_t::make_path(level - B, tail);
810
567k
        IMMER_TRY {
811
567k
            auto count = new_idx + 1;
812
567k
            auto new_parent =
813
567k
                node_t::copy_inner_r_n(count, pos.node(), new_idx);
814
567k
            auto new_relaxed              = new_parent->relaxed();
815
567k
            new_parent->inner()[new_idx]  = new_child;
816
567k
            new_relaxed->d.sizes[new_idx] = pos.size() + ts;
817
567k
            new_relaxed->d.count          = count;
818
567k
            assert(new_relaxed->d.sizes[new_idx]);
819
567k
            return new_parent;
820
567k
        }
821
567k
        IMMER_CATCH (...) {
822
0
            auto shift = pos.shift();
823
0
            auto size  = new_idx == idx ? children + ts : ts;
824
0
            if (shift > BL) {
825
0
                tail->inc();
826
0
                dec_inner(new_child, shift - B, size);
827
0
            }
828
0
            IMMER_RETHROW;
829
0
        }
830
567k
    }
831
832
    template <typename Pos, typename... Args>
833
    static node_t* visit_regular(Pos&& pos, node_t* tail, Args&&...)
834
2.88M
    {
835
2.88M
        assert((pos.size() & mask<BL>) == 0);
836
2.88M
        auto idx        = pos.index(pos.size() - 1);
837
2.88M
        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
838
2.88M
        auto count      = new_idx + 1;
839
2.88M
        auto new_parent = node_t::make_inner_n(count);
840
2.88M
        IMMER_TRY {
841
2.88M
            new_parent->inner()[new_idx] =
842
2.88M
                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
843
                               /* otherwise */
844
2.88M
                               : node_t::make_path(pos.shift() - B, tail);
845
2.88M
        }
846
2.88M
        IMMER_CATCH (...) {
847
0
            node_t::delete_inner(new_parent, count);
848
0
            IMMER_RETHROW;
849
0
        }
850
2.88M
        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
851
2.88M
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int&)
Line
Count
Source
834
236k
    {
835
236k
        assert((pos.size() & mask<BL>) == 0);
836
236k
        auto idx        = pos.index(pos.size() - 1);
837
236k
        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
838
236k
        auto count      = new_idx + 1;
839
236k
        auto new_parent = node_t::make_inner_n(count);
840
236k
        IMMER_TRY {
841
236k
            new_parent->inner()[new_idx] =
842
236k
                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
843
                               /* otherwise */
844
236k
                               : node_t::make_path(pos.shift() - B, tail);
845
236k
        }
846
236k
        IMMER_CATCH (...) {
847
0
            node_t::delete_inner(new_parent, count);
848
0
            IMMER_RETHROW;
849
0
        }
850
236k
        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
851
236k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Line
Count
Source
834
2.32M
    {
835
2.32M
        assert((pos.size() & mask<BL>) == 0);
836
2.32M
        auto idx        = pos.index(pos.size() - 1);
837
2.32M
        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
838
2.32M
        auto count      = new_idx + 1;
839
2.32M
        auto new_parent = node_t::make_inner_n(count);
840
2.32M
        IMMER_TRY {
841
2.32M
            new_parent->inner()[new_idx] =
842
2.32M
                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
843
                               /* otherwise */
844
2.32M
                               : node_t::make_path(pos.shift() - B, tail);
845
2.32M
        }
846
2.32M
        IMMER_CATCH (...) {
847
0
            node_t::delete_inner(new_parent, count);
848
0
            IMMER_RETHROW;
849
0
        }
850
2.32M
        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
851
2.32M
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
Line
Count
Source
834
323k
    {
835
323k
        assert((pos.size() & mask<BL>) == 0);
836
323k
        auto idx        = pos.index(pos.size() - 1);
837
323k
        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
838
323k
        auto count      = new_idx + 1;
839
323k
        auto new_parent = node_t::make_inner_n(count);
840
323k
        IMMER_TRY {
841
323k
            new_parent->inner()[new_idx] =
842
323k
                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
843
                               /* otherwise */
844
323k
                               : node_t::make_path(pos.shift() - B, tail);
845
323k
        }
846
323k
        IMMER_CATCH (...) {
847
0
            node_t::delete_inner(new_parent, count);
848
0
            IMMER_RETHROW;
849
0
        }
850
323k
        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
851
323k
    }
852
853
    template <typename Pos, typename... Args>
854
    static node_t* visit_leaf(Pos&& pos, node_t* tail, Args&&...)
855
0
    {
856
0
        IMMER_UNREACHABLE;
857
0
    }
Unexecuted instantiation: immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int&)
Unexecuted instantiation: immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>* immer::detail::rbts::push_tail_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*)
858
};
859
860
struct dec_right_visitor : visitor_base<dec_right_visitor>
861
{
862
    using this_t = dec_right_visitor;
863
    using dec_t  = dec_visitor;
864
865
    template <typename Pos>
866
    static void visit_relaxed(Pos&& p, count_t idx)
867
36.8k
    {
868
36.8k
        using node_t = node_type<Pos>;
869
36.8k
        auto node    = p.node();
870
36.8k
        if (node->dec()) {
871
31.1k
            p.each_right(dec_t{}, idx);
872
31.1k
            node_t::delete_inner_r(node, p.count());
873
31.1k
        }
874
36.8k
    }
875
876
    template <typename Pos>
877
    static void visit_regular(Pos&& p, count_t idx)
878
18.4k
    {
879
18.4k
        using node_t = node_type<Pos>;
880
18.4k
        auto node    = p.node();
881
18.4k
        if (node->dec()) {
882
13.1k
            p.each_right(dec_t{}, idx);
883
13.1k
            node_t::delete_inner(node, p.count());
884
13.1k
        }
885
18.4k
    }
void immer::detail::rbts::dec_right_visitor::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int)
Line
Count
Source
878
3.40k
    {
879
3.40k
        using node_t = node_type<Pos>;
880
3.40k
        auto node    = p.node();
881
3.40k
        if (node->dec()) {
882
1.61k
            p.each_right(dec_t{}, idx);
883
1.61k
            node_t::delete_inner(node, p.count());
884
1.61k
        }
885
3.40k
    }
void immer::detail::rbts::dec_right_visitor::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int)
Line
Count
Source
878
4.04k
    {
879
4.04k
        using node_t = node_type<Pos>;
880
4.04k
        auto node    = p.node();
881
4.04k
        if (node->dec()) {
882
3.83k
            p.each_right(dec_t{}, idx);
883
3.83k
            node_t::delete_inner(node, p.count());
884
3.83k
        }
885
4.04k
    }
void immer::detail::rbts::dec_right_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int)
Line
Count
Source
878
10.9k
    {
879
10.9k
        using node_t = node_type<Pos>;
880
10.9k
        auto node    = p.node();
881
10.9k
        if (node->dec()) {
882
7.70k
            p.each_right(dec_t{}, idx);
883
7.70k
            node_t::delete_inner(node, p.count());
884
7.70k
        }
885
10.9k
    }
886
887
    template <typename Pos>
888
    static void visit_leaf(Pos&& p, count_t idx)
889
    {
890
        IMMER_UNREACHABLE;
891
    }
892
};
893
894
template <typename NodeT, bool Collapse = true, bool Mutating = true>
895
struct slice_right_mut_visitor
896
    : visitor_base<slice_right_mut_visitor<NodeT, Collapse, Mutating>>
897
{
898
    using node_t = NodeT;
899
    using this_t = slice_right_mut_visitor;
900
    using edit_t = typename NodeT::edit_t;
901
902
    // returns a new shift, new root, the new tail size and the new tail
903
    using result_t             = std::tuple<shift_t, NodeT*, count_t, NodeT*>;
904
    using no_collapse_t        = slice_right_mut_visitor<NodeT, false, true>;
905
    using no_collapse_no_mut_t = slice_right_mut_visitor<NodeT, false, false>;
906
    using no_mut_t = slice_right_mut_visitor<NodeT, Collapse, false>;
907
908
    static constexpr auto B  = NodeT::bits;
909
    static constexpr auto BL = NodeT::bits_leaf;
910
911
    template <typename PosT>
912
    static result_t visit_relaxed(PosT&& pos, size_t last, edit_t e)
913
84.6k
    {
914
84.6k
        auto idx    = pos.index(last);
915
84.6k
        auto node   = pos.node();
916
84.6k
        auto mutate = Mutating && node->can_mutate(e);
917
84.6k
        if (Collapse && idx == 0) {
918
45.9k
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
919
45.9k
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
920
45.9k
            if (Mutating)
921
31.4k
                pos.visit(dec_right_visitor{}, count_t{1});
922
45.9k
            return res;
923
45.9k
        } else {
924
38.6k
            using std::get;
925
38.6k
            auto subs =
926
38.6k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
927
38.6k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
928
38.6k
            auto next = get<1>(subs);
929
38.6k
            auto ts   = get<2>(subs);
930
38.6k
            auto tail = get<3>(subs);
931
38.6k
            IMMER_TRY {
932
38.6k
                if (next) {
933
21.2k
                    if (mutate) {
934
15.8k
                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
935
15.8k
                        pos.each_right(dec_visitor{}, idx + 1);
936
15.8k
                        node->inner()[idx] = next;
937
15.8k
                        nodr->d.sizes[idx] = last + 1 - ts;
938
15.8k
                        nodr->d.count      = idx + 1;
939
15.8k
                        assert(nodr->d.sizes[idx]);
940
15.8k
                        return std::make_tuple(pos.shift(), node, ts, tail);
941
15.8k
                    } else {
942
5.42k
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
943
5.42k
                        auto newr = newn->relaxed();
944
5.42k
                        newn->inner()[idx] = next;
945
5.42k
                        newr->d.sizes[idx] = last + 1 - ts;
946
5.42k
                        newr->d.count      = idx + 1;
947
5.42k
                        assert(newr->d.sizes[idx]);
948
5.42k
                        if (Mutating)
949
3.83k
                            pos.visit(dec_visitor{});
950
5.42k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
951
5.42k
                    }
952
21.2k
                } else if (idx == 0) {
953
6.65k
                    if (Mutating)
954
2.45k
                        pos.visit(dec_right_visitor{}, count_t{1});
955
6.65k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
956
10.7k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
957
3.34k
                    auto newn = pos.node()->inner()[0];
958
3.34k
                    if (!mutate)
959
1.21k
                        newn->inc();
960
3.34k
                    if (Mutating)
961
2.93k
                        pos.visit(dec_right_visitor{}, count_t{2});
962
3.34k
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
963
7.38k
                } else {
964
7.38k
                    if (mutate) {
965
3.59k
                        pos.each_right(dec_visitor{}, idx + 1);
966
3.59k
                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
967
3.59k
                        return std::make_tuple(pos.shift(), node, ts, tail);
968
3.79k
                    } else {
969
3.79k
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
970
3.79k
                        if (Mutating)
971
1.06k
                            pos.visit(dec_visitor{});
972
3.79k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
973
3.79k
                    }
974
7.38k
                }
975
38.6k
            }
976
38.6k
            IMMER_CATCH (...) {
977
0
                assert(!mutate);
978
0
                assert(!next || pos.shift() > BL);
979
0
                if (next)
980
0
                    dec_inner(next,
981
0
                              pos.shift() - B,
982
0
                              last + 1 - ts - pos.size_before(idx));
983
0
                dec_leaf(tail, ts);
984
0
                IMMER_RETHROW;
985
0
            }
986
38.6k
        }
987
84.6k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, true>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
913
49.5k
    {
914
49.5k
        auto idx    = pos.index(last);
915
49.5k
        auto node   = pos.node();
916
49.5k
        auto mutate = Mutating && node->can_mutate(e);
917
49.5k
        if (Collapse && idx == 0) {
918
31.4k
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
919
31.4k
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
920
31.4k
            if (Mutating)
921
31.4k
                pos.visit(dec_right_visitor{}, count_t{1});
922
31.4k
            return res;
923
31.4k
        } else {
924
18.1k
            using std::get;
925
18.1k
            auto subs =
926
18.1k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
927
18.1k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
928
18.1k
            auto next = get<1>(subs);
929
18.1k
            auto ts   = get<2>(subs);
930
18.1k
            auto tail = get<3>(subs);
931
18.1k
            IMMER_TRY {
932
18.1k
                if (next) {
933
13.4k
                    if (mutate) {
934
11.2k
                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
935
11.2k
                        pos.each_right(dec_visitor{}, idx + 1);
936
11.2k
                        node->inner()[idx] = next;
937
11.2k
                        nodr->d.sizes[idx] = last + 1 - ts;
938
11.2k
                        nodr->d.count      = idx + 1;
939
11.2k
                        assert(nodr->d.sizes[idx]);
940
11.2k
                        return std::make_tuple(pos.shift(), node, ts, tail);
941
11.2k
                    } else {
942
2.27k
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
943
2.27k
                        auto newr = newn->relaxed();
944
2.27k
                        newn->inner()[idx] = next;
945
2.27k
                        newr->d.sizes[idx] = last + 1 - ts;
946
2.27k
                        newr->d.count      = idx + 1;
947
2.27k
                        assert(newr->d.sizes[idx]);
948
2.27k
                        if (Mutating)
949
2.27k
                            pos.visit(dec_visitor{});
950
2.27k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
951
2.27k
                    }
952
13.4k
                } else if (idx == 0) {
953
0
                    if (Mutating)
954
0
                        pos.visit(dec_right_visitor{}, count_t{1});
955
0
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
956
4.61k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
957
2.93k
                    auto newn = pos.node()->inner()[0];
958
2.93k
                    if (!mutate)
959
805
                        newn->inc();
960
2.93k
                    if (Mutating)
961
2.93k
                        pos.visit(dec_right_visitor{}, count_t{2});
962
2.93k
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
963
2.93k
                } else {
964
1.68k
                    if (mutate) {
965
1.16k
                        pos.each_right(dec_visitor{}, idx + 1);
966
1.16k
                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
967
1.16k
                        return std::make_tuple(pos.shift(), node, ts, tail);
968
1.16k
                    } else {
969
513
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
970
513
                        if (Mutating)
971
513
                            pos.visit(dec_visitor{});
972
513
                        return std::make_tuple(pos.shift(), newn, ts, tail);
973
513
                    }
974
1.68k
                }
975
18.1k
            }
976
18.1k
            IMMER_CATCH (...) {
977
0
                assert(!mutate);
978
0
                assert(!next || pos.shift() > BL);
979
0
                if (next)
980
0
                    dec_inner(next,
981
0
                              pos.shift() - B,
982
0
                              last + 1 - ts - pos.size_before(idx));
983
0
                dec_leaf(tail, ts);
984
0
                IMMER_RETHROW;
985
0
            }
986
18.1k
        }
987
49.5k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, false>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
913
16.4k
    {
914
16.4k
        auto idx    = pos.index(last);
915
16.4k
        auto node   = pos.node();
916
16.4k
        auto mutate = Mutating && node->can_mutate(e);
917
16.4k
        if (Collapse && idx == 0) {
918
14.4k
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
919
14.4k
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
920
14.4k
            if (Mutating)
921
0
                pos.visit(dec_right_visitor{}, count_t{1});
922
14.4k
            return res;
923
14.4k
        } else {
924
1.92k
            using std::get;
925
1.92k
            auto subs =
926
1.92k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
927
1.92k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
928
1.92k
            auto next = get<1>(subs);
929
1.92k
            auto ts   = get<2>(subs);
930
1.92k
            auto tail = get<3>(subs);
931
1.92k
            IMMER_TRY {
932
1.92k
                if (next) {
933
510
                    if (mutate) {
934
0
                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
935
0
                        pos.each_right(dec_visitor{}, idx + 1);
936
0
                        node->inner()[idx] = next;
937
0
                        nodr->d.sizes[idx] = last + 1 - ts;
938
0
                        nodr->d.count      = idx + 1;
939
0
                        assert(nodr->d.sizes[idx]);
940
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
941
510
                    } else {
942
510
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
943
510
                        auto newr = newn->relaxed();
944
510
                        newn->inner()[idx] = next;
945
510
                        newr->d.sizes[idx] = last + 1 - ts;
946
510
                        newr->d.count      = idx + 1;
947
510
                        assert(newr->d.sizes[idx]);
948
510
                        if (Mutating)
949
0
                            pos.visit(dec_visitor{});
950
510
                        return std::make_tuple(pos.shift(), newn, ts, tail);
951
510
                    }
952
1.41k
                } else if (idx == 0) {
953
0
                    if (Mutating)
954
0
                        pos.visit(dec_right_visitor{}, count_t{1});
955
0
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
956
1.41k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
957
409
                    auto newn = pos.node()->inner()[0];
958
409
                    if (!mutate)
959
409
                        newn->inc();
960
409
                    if (Mutating)
961
0
                        pos.visit(dec_right_visitor{}, count_t{2});
962
409
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
963
1.00k
                } else {
964
1.00k
                    if (mutate) {
965
0
                        pos.each_right(dec_visitor{}, idx + 1);
966
0
                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
967
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
968
1.00k
                    } else {
969
1.00k
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
970
1.00k
                        if (Mutating)
971
0
                            pos.visit(dec_visitor{});
972
1.00k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
973
1.00k
                    }
974
1.00k
                }
975
1.92k
            }
976
1.92k
            IMMER_CATCH (...) {
977
0
                assert(!mutate);
978
0
                assert(!next || pos.shift() > BL);
979
0
                if (next)
980
0
                    dec_inner(next,
981
0
                              pos.shift() - B,
982
0
                              last + 1 - ts - pos.size_before(idx));
983
0
                dec_leaf(tail, ts);
984
0
                IMMER_RETHROW;
985
0
            }
986
1.92k
        }
987
16.4k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, true>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
913
11.6k
    {
914
11.6k
        auto idx    = pos.index(last);
915
11.6k
        auto node   = pos.node();
916
11.6k
        auto mutate = Mutating && node->can_mutate(e);
917
11.6k
        if (Collapse && idx == 0) {
918
0
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
919
0
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
920
0
            if (Mutating)
921
0
                pos.visit(dec_right_visitor{}, count_t{1});
922
0
            return res;
923
11.6k
        } else {
924
11.6k
            using std::get;
925
11.6k
            auto subs =
926
11.6k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
927
11.6k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
928
11.6k
            auto next = get<1>(subs);
929
11.6k
            auto ts   = get<2>(subs);
930
11.6k
            auto tail = get<3>(subs);
931
11.6k
            IMMER_TRY {
932
11.6k
                if (next) {
933
6.21k
                    if (mutate) {
934
4.65k
                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
935
4.65k
                        pos.each_right(dec_visitor{}, idx + 1);
936
4.65k
                        node->inner()[idx] = next;
937
4.65k
                        nodr->d.sizes[idx] = last + 1 - ts;
938
4.65k
                        nodr->d.count      = idx + 1;
939
4.65k
                        assert(nodr->d.sizes[idx]);
940
4.65k
                        return std::make_tuple(pos.shift(), node, ts, tail);
941
4.65k
                    } else {
942
1.55k
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
943
1.55k
                        auto newr = newn->relaxed();
944
1.55k
                        newn->inner()[idx] = next;
945
1.55k
                        newr->d.sizes[idx] = last + 1 - ts;
946
1.55k
                        newr->d.count      = idx + 1;
947
1.55k
                        assert(newr->d.sizes[idx]);
948
1.55k
                        if (Mutating)
949
1.55k
                            pos.visit(dec_visitor{});
950
1.55k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
951
1.55k
                    }
952
6.21k
                } else if (idx == 0) {
953
2.45k
                    if (Mutating)
954
2.45k
                        pos.visit(dec_right_visitor{}, count_t{1});
955
2.45k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
956
2.98k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
957
0
                    auto newn = pos.node()->inner()[0];
958
0
                    if (!mutate)
959
0
                        newn->inc();
960
0
                    if (Mutating)
961
0
                        pos.visit(dec_right_visitor{}, count_t{2});
962
0
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
963
2.98k
                } else {
964
2.98k
                    if (mutate) {
965
2.42k
                        pos.each_right(dec_visitor{}, idx + 1);
966
2.42k
                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
967
2.42k
                        return std::make_tuple(pos.shift(), node, ts, tail);
968
2.42k
                    } else {
969
554
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
970
554
                        if (Mutating)
971
554
                            pos.visit(dec_visitor{});
972
554
                        return std::make_tuple(pos.shift(), newn, ts, tail);
973
554
                    }
974
2.98k
                }
975
11.6k
            }
976
11.6k
            IMMER_CATCH (...) {
977
0
                assert(!mutate);
978
0
                assert(!next || pos.shift() > BL);
979
0
                if (next)
980
0
                    dec_inner(next,
981
0
                              pos.shift() - B,
982
0
                              last + 1 - ts - pos.size_before(idx));
983
0
                dec_leaf(tail, ts);
984
0
                IMMER_RETHROW;
985
0
            }
986
11.6k
        }
987
11.6k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, false>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
913
7.00k
    {
914
7.00k
        auto idx    = pos.index(last);
915
7.00k
        auto node   = pos.node();
916
7.00k
        auto mutate = Mutating && node->can_mutate(e);
917
7.00k
        if (Collapse && idx == 0) {
918
0
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
919
0
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
920
0
            if (Mutating)
921
0
                pos.visit(dec_right_visitor{}, count_t{1});
922
0
            return res;
923
7.00k
        } else {
924
7.00k
            using std::get;
925
7.00k
            auto subs =
926
7.00k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
927
7.00k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
928
7.00k
            auto next = get<1>(subs);
929
7.00k
            auto ts   = get<2>(subs);
930
7.00k
            auto tail = get<3>(subs);
931
7.00k
            IMMER_TRY {
932
7.00k
                if (next) {
933
1.08k
                    if (mutate) {
934
0
                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
935
0
                        pos.each_right(dec_visitor{}, idx + 1);
936
0
                        node->inner()[idx] = next;
937
0
                        nodr->d.sizes[idx] = last + 1 - ts;
938
0
                        nodr->d.count      = idx + 1;
939
0
                        assert(nodr->d.sizes[idx]);
940
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
941
1.08k
                    } else {
942
1.08k
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
943
1.08k
                        auto newr = newn->relaxed();
944
1.08k
                        newn->inner()[idx] = next;
945
1.08k
                        newr->d.sizes[idx] = last + 1 - ts;
946
1.08k
                        newr->d.count      = idx + 1;
947
1.08k
                        assert(newr->d.sizes[idx]);
948
1.08k
                        if (Mutating)
949
0
                            pos.visit(dec_visitor{});
950
1.08k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
951
1.08k
                    }
952
5.92k
                } else if (idx == 0) {
953
4.19k
                    if (Mutating)
954
0
                        pos.visit(dec_right_visitor{}, count_t{1});
955
4.19k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
956
4.19k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
957
0
                    auto newn = pos.node()->inner()[0];
958
0
                    if (!mutate)
959
0
                        newn->inc();
960
0
                    if (Mutating)
961
0
                        pos.visit(dec_right_visitor{}, count_t{2});
962
0
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
963
1.72k
                } else {
964
1.72k
                    if (mutate) {
965
0
                        pos.each_right(dec_visitor{}, idx + 1);
966
0
                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
967
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
968
1.72k
                    } else {
969
1.72k
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
970
1.72k
                        if (Mutating)
971
0
                            pos.visit(dec_visitor{});
972
1.72k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
973
1.72k
                    }
974
1.72k
                }
975
7.00k
            }
976
7.00k
            IMMER_CATCH (...) {
977
0
                assert(!mutate);
978
0
                assert(!next || pos.shift() > BL);
979
0
                if (next)
980
0
                    dec_inner(next,
981
0
                              pos.shift() - B,
982
0
                              last + 1 - ts - pos.size_before(idx));
983
0
                dec_leaf(tail, ts);
984
0
                IMMER_RETHROW;
985
0
            }
986
7.00k
        }
987
7.00k
    }
988
989
    template <typename PosT>
990
    static result_t visit_regular(PosT&& pos, size_t last, edit_t e)
991
48.7k
    {
992
48.7k
        auto idx    = pos.index(last);
993
48.7k
        auto node   = pos.node();
994
48.7k
        auto mutate = Mutating && node->can_mutate(e);
995
48.7k
        if (Collapse && idx == 0) {
996
10.1k
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
10.1k
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
10.1k
            if (Mutating)
999
9.07k
                pos.visit(dec_right_visitor{}, count_t{1});
1000
10.1k
            return res;
1001
38.5k
        } else {
1002
38.5k
            using std::get;
1003
38.5k
            auto subs =
1004
38.5k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
38.5k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
38.5k
            auto next = get<1>(subs);
1007
38.5k
            auto ts   = get<2>(subs);
1008
38.5k
            auto tail = get<3>(subs);
1009
38.5k
            IMMER_TRY {
1010
38.5k
                if (next) {
1011
8.87k
                    if (mutate) {
1012
5.61k
                        node->inner()[idx] = next;
1013
5.61k
                        pos.each_right(dec_visitor{}, idx + 1);
1014
5.61k
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
5.61k
                    } else {
1016
3.26k
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
3.26k
                        newn->inner()[idx] = next;
1018
3.26k
                        if (Mutating)
1019
1.28k
                            pos.visit(dec_visitor{});
1020
3.26k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
3.26k
                    }
1022
29.7k
                } else if (idx == 0) {
1023
10.6k
                    if (Mutating)
1024
6.55k
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
10.6k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
19.1k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
3.20k
                    auto newn = pos.node()->inner()[0];
1028
3.20k
                    if (!mutate)
1029
1.38k
                        newn->inc();
1030
3.20k
                    if (Mutating)
1031
2.77k
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
3.20k
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
15.8k
                } else {
1034
15.8k
                    if (mutate) {
1035
6.96k
                        pos.each_right(dec_visitor{}, idx + 1);
1036
6.96k
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
8.93k
                    } else {
1038
8.93k
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
8.93k
                        if (Mutating)
1040
3.14k
                            pos.visit(dec_visitor{});
1041
8.93k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
8.93k
                    }
1043
15.8k
                }
1044
38.5k
            }
1045
38.5k
            IMMER_CATCH (...) {
1046
0
                assert(!mutate);
1047
0
                assert(!next || pos.shift() > BL);
1048
0
                assert(tail);
1049
0
                if (next)
1050
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1051
0
                dec_leaf(tail, ts);
1052
0
                IMMER_RETHROW;
1053
0
            }
1054
38.5k
        }
1055
48.7k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, false>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
991
1.46k
    {
992
1.46k
        auto idx    = pos.index(last);
993
1.46k
        auto node   = pos.node();
994
1.46k
        auto mutate = Mutating && node->can_mutate(e);
995
1.46k
        if (Collapse && idx == 0) {
996
425
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
425
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
425
            if (Mutating)
999
0
                pos.visit(dec_right_visitor{}, count_t{1});
1000
425
            return res;
1001
1.03k
        } else {
1002
1.03k
            using std::get;
1003
1.03k
            auto subs =
1004
1.03k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
1.03k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
1.03k
            auto next = get<1>(subs);
1007
1.03k
            auto ts   = get<2>(subs);
1008
1.03k
            auto tail = get<3>(subs);
1009
1.03k
            IMMER_TRY {
1010
1.03k
                if (next) {
1011
221
                    if (mutate) {
1012
0
                        node->inner()[idx] = next;
1013
0
                        pos.each_right(dec_visitor{}, idx + 1);
1014
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
221
                    } else {
1016
221
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
221
                        newn->inner()[idx] = next;
1018
221
                        if (Mutating)
1019
0
                            pos.visit(dec_visitor{});
1020
221
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
221
                    }
1022
816
                } else if (idx == 0) {
1023
0
                    if (Mutating)
1024
0
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
0
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
816
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
206
                    auto newn = pos.node()->inner()[0];
1028
206
                    if (!mutate)
1029
206
                        newn->inc();
1030
206
                    if (Mutating)
1031
0
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
206
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
610
                } else {
1034
610
                    if (mutate) {
1035
0
                        pos.each_right(dec_visitor{}, idx + 1);
1036
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
610
                    } else {
1038
610
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
610
                        if (Mutating)
1040
0
                            pos.visit(dec_visitor{});
1041
610
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
610
                    }
1043
610
                }
1044
1.03k
            }
1045
1.03k
            IMMER_CATCH (...) {
1046
0
                assert(!mutate);
1047
0
                assert(!next || pos.shift() > BL);
1048
0
                assert(tail);
1049
0
                if (next)
1050
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1051
0
                dec_leaf(tail, ts);
1052
0
                IMMER_RETHROW;
1053
0
            }
1054
1.03k
        }
1055
1.46k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, false>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
991
1.93k
    {
992
1.93k
        auto idx    = pos.index(last);
993
1.93k
        auto node   = pos.node();
994
1.93k
        auto mutate = Mutating && node->can_mutate(e);
995
1.93k
        if (Collapse && idx == 0) {
996
660
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
660
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
660
            if (Mutating)
999
0
                pos.visit(dec_right_visitor{}, count_t{1});
1000
660
            return res;
1001
1.27k
        } else {
1002
1.27k
            using std::get;
1003
1.27k
            auto subs =
1004
1.27k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
1.27k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
1.27k
            auto next = get<1>(subs);
1007
1.27k
            auto ts   = get<2>(subs);
1008
1.27k
            auto tail = get<3>(subs);
1009
1.27k
            IMMER_TRY {
1010
1.27k
                if (next) {
1011
257
                    if (mutate) {
1012
0
                        node->inner()[idx] = next;
1013
0
                        pos.each_right(dec_visitor{}, idx + 1);
1014
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
257
                    } else {
1016
257
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
257
                        newn->inner()[idx] = next;
1018
257
                        if (Mutating)
1019
0
                            pos.visit(dec_visitor{});
1020
257
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
257
                    }
1022
1.02k
                } else if (idx == 0) {
1023
0
                    if (Mutating)
1024
0
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
0
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
1.02k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
220
                    auto newn = pos.node()->inner()[0];
1028
220
                    if (!mutate)
1029
220
                        newn->inc();
1030
220
                    if (Mutating)
1031
0
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
220
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
801
                } else {
1034
801
                    if (mutate) {
1035
0
                        pos.each_right(dec_visitor{}, idx + 1);
1036
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
801
                    } else {
1038
801
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
801
                        if (Mutating)
1040
0
                            pos.visit(dec_visitor{});
1041
801
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
801
                    }
1043
801
                }
1044
1.27k
            }
1045
1.27k
            IMMER_CATCH (...) {
1046
0
                assert(!mutate);
1047
0
                assert(!next || pos.shift() > BL);
1048
0
                assert(tail);
1049
0
                if (next)
1050
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1051
0
                dec_leaf(tail, ts);
1052
0
                IMMER_RETHROW;
1053
0
            }
1054
1.27k
        }
1055
1.93k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, true>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
991
4.82k
    {
992
4.82k
        auto idx    = pos.index(last);
993
4.82k
        auto node   = pos.node();
994
4.82k
        auto mutate = Mutating && node->can_mutate(e);
995
4.82k
        if (Collapse && idx == 0) {
996
0
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
0
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
0
            if (Mutating)
999
0
                pos.visit(dec_right_visitor{}, count_t{1});
1000
0
            return res;
1001
4.82k
        } else {
1002
4.82k
            using std::get;
1003
4.82k
            auto subs =
1004
4.82k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
4.82k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
4.82k
            auto next = get<1>(subs);
1007
4.82k
            auto ts   = get<2>(subs);
1008
4.82k
            auto tail = get<3>(subs);
1009
4.82k
            IMMER_TRY {
1010
4.82k
                if (next) {
1011
904
                    if (mutate) {
1012
620
                        node->inner()[idx] = next;
1013
620
                        pos.each_right(dec_visitor{}, idx + 1);
1014
620
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
620
                    } else {
1016
284
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
284
                        newn->inner()[idx] = next;
1018
284
                        if (Mutating)
1019
284
                            pos.visit(dec_visitor{});
1020
284
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
284
                    }
1022
3.92k
                } else if (idx == 0) {
1023
1.45k
                    if (Mutating)
1024
1.45k
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
1.45k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
2.47k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
0
                    auto newn = pos.node()->inner()[0];
1028
0
                    if (!mutate)
1029
0
                        newn->inc();
1030
0
                    if (Mutating)
1031
0
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
0
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
2.47k
                } else {
1034
2.47k
                    if (mutate) {
1035
1.51k
                        pos.each_right(dec_visitor{}, idx + 1);
1036
1.51k
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
1.51k
                    } else {
1038
961
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
961
                        if (Mutating)
1040
961
                            pos.visit(dec_visitor{});
1041
961
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
961
                    }
1043
2.47k
                }
1044
4.82k
            }
1045
4.82k
            IMMER_CATCH (...) {
1046
0
                assert(!mutate);
1047
0
                assert(!next || pos.shift() > BL);
1048
0
                assert(tail);
1049
0
                if (next)
1050
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1051
0
                dec_leaf(tail, ts);
1052
0
                IMMER_RETHROW;
1053
0
            }
1054
4.82k
        }
1055
4.82k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, false>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
991
3.44k
    {
992
3.44k
        auto idx    = pos.index(last);
993
3.44k
        auto node   = pos.node();
994
3.44k
        auto mutate = Mutating && node->can_mutate(e);
995
3.44k
        if (Collapse && idx == 0) {
996
0
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
0
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
0
            if (Mutating)
999
0
                pos.visit(dec_right_visitor{}, count_t{1});
1000
0
            return res;
1001
3.44k
        } else {
1002
3.44k
            using std::get;
1003
3.44k
            auto subs =
1004
3.44k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
3.44k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
3.44k
            auto next = get<1>(subs);
1007
3.44k
            auto ts   = get<2>(subs);
1008
3.44k
            auto tail = get<3>(subs);
1009
3.44k
            IMMER_TRY {
1010
3.44k
                if (next) {
1011
302
                    if (mutate) {
1012
0
                        node->inner()[idx] = next;
1013
0
                        pos.each_right(dec_visitor{}, idx + 1);
1014
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
302
                    } else {
1016
302
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
302
                        newn->inner()[idx] = next;
1018
302
                        if (Mutating)
1019
0
                            pos.visit(dec_visitor{});
1020
302
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
302
                    }
1022
3.14k
                } else if (idx == 0) {
1023
1.28k
                    if (Mutating)
1024
0
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
1.28k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
1.85k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
0
                    auto newn = pos.node()->inner()[0];
1028
0
                    if (!mutate)
1029
0
                        newn->inc();
1030
0
                    if (Mutating)
1031
0
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
0
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
1.85k
                } else {
1034
1.85k
                    if (mutate) {
1035
0
                        pos.each_right(dec_visitor{}, idx + 1);
1036
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
1.85k
                    } else {
1038
1.85k
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
1.85k
                        if (Mutating)
1040
0
                            pos.visit(dec_visitor{});
1041
1.85k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
1.85k
                    }
1043
1.85k
                }
1044
3.44k
            }
1045
3.44k
            IMMER_CATCH (...) {
1046
0
                assert(!mutate);
1047
0
                assert(!next || pos.shift() > BL);
1048
0
                assert(tail);
1049
0
                if (next)
1050
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1051
0
                dec_leaf(tail, ts);
1052
0
                IMMER_RETHROW;
1053
0
            }
1054
3.44k
        }
1055
3.44k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, false>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, true>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
991
6.28k
    {
992
6.28k
        auto idx    = pos.index(last);
993
6.28k
        auto node   = pos.node();
994
6.28k
        auto mutate = Mutating && node->can_mutate(e);
995
6.28k
        if (Collapse && idx == 0) {
996
0
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
0
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
0
            if (Mutating)
999
0
                pos.visit(dec_right_visitor{}, count_t{1});
1000
0
            return res;
1001
6.28k
        } else {
1002
6.28k
            using std::get;
1003
6.28k
            auto subs =
1004
6.28k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
6.28k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
6.28k
            auto next = get<1>(subs);
1007
6.28k
            auto ts   = get<2>(subs);
1008
6.28k
            auto tail = get<3>(subs);
1009
6.28k
            IMMER_TRY {
1010
6.28k
                if (next) {
1011
1.46k
                    if (mutate) {
1012
1.26k
                        node->inner()[idx] = next;
1013
1.26k
                        pos.each_right(dec_visitor{}, idx + 1);
1014
1.26k
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
1.26k
                    } else {
1016
207
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
207
                        newn->inner()[idx] = next;
1018
207
                        if (Mutating)
1019
207
                            pos.visit(dec_visitor{});
1020
207
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
207
                    }
1022
4.81k
                } else if (idx == 0) {
1023
4.04k
                    if (Mutating)
1024
4.04k
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
4.04k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
4.04k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
0
                    auto newn = pos.node()->inner()[0];
1028
0
                    if (!mutate)
1029
0
                        newn->inc();
1030
0
                    if (Mutating)
1031
0
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
0
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
766
                } else {
1034
766
                    if (mutate) {
1035
555
                        pos.each_right(dec_visitor{}, idx + 1);
1036
555
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
555
                    } else {
1038
211
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
211
                        if (Mutating)
1040
211
                            pos.visit(dec_visitor{});
1041
211
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
211
                    }
1043
766
                }
1044
6.28k
            }
1045
6.28k
            IMMER_CATCH (...) {
1046
0
                assert(!mutate);
1047
0
                assert(!next || pos.shift() > BL);
1048
0
                assert(tail);
1049
0
                if (next)
1050
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1051
0
                dec_leaf(tail, ts);
1052
0
                IMMER_RETHROW;
1053
0
            }
1054
6.28k
        }
1055
6.28k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, false>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
991
3.17k
    {
992
3.17k
        auto idx    = pos.index(last);
993
3.17k
        auto node   = pos.node();
994
3.17k
        auto mutate = Mutating && node->can_mutate(e);
995
3.17k
        if (Collapse && idx == 0) {
996
0
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
0
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
0
            if (Mutating)
999
0
                pos.visit(dec_right_visitor{}, count_t{1});
1000
0
            return res;
1001
3.17k
        } else {
1002
3.17k
            using std::get;
1003
3.17k
            auto subs =
1004
3.17k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
3.17k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
3.17k
            auto next = get<1>(subs);
1007
3.17k
            auto ts   = get<2>(subs);
1008
3.17k
            auto tail = get<3>(subs);
1009
3.17k
            IMMER_TRY {
1010
3.17k
                if (next) {
1011
387
                    if (mutate) {
1012
0
                        node->inner()[idx] = next;
1013
0
                        pos.each_right(dec_visitor{}, idx + 1);
1014
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
387
                    } else {
1016
387
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
387
                        newn->inner()[idx] = next;
1018
387
                        if (Mutating)
1019
0
                            pos.visit(dec_visitor{});
1020
387
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
387
                    }
1022
2.79k
                } else if (idx == 0) {
1023
2.07k
                    if (Mutating)
1024
0
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
2.07k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
2.07k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
0
                    auto newn = pos.node()->inner()[0];
1028
0
                    if (!mutate)
1029
0
                        newn->inc();
1030
0
                    if (Mutating)
1031
0
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
0
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
718
                } else {
1034
718
                    if (mutate) {
1035
0
                        pos.each_right(dec_visitor{}, idx + 1);
1036
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
718
                    } else {
1038
718
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
718
                        if (Mutating)
1040
0
                            pos.visit(dec_visitor{});
1041
718
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
718
                    }
1043
718
                }
1044
3.17k
            }
1045
3.17k
            IMMER_CATCH (...) {
1046
0
                assert(!mutate);
1047
0
                assert(!next || pos.shift() > BL);
1048
0
                assert(tail);
1049
0
                if (next)
1050
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1051
0
                dec_leaf(tail, ts);
1052
0
                IMMER_RETHROW;
1053
0
            }
1054
3.17k
        }
1055
3.17k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
991
7.73k
    {
992
7.73k
        auto idx    = pos.index(last);
993
7.73k
        auto node   = pos.node();
994
7.73k
        auto mutate = Mutating && node->can_mutate(e);
995
7.73k
        if (Collapse && idx == 0) {
996
0
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
0
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
0
            if (Mutating)
999
0
                pos.visit(dec_right_visitor{}, count_t{1});
1000
0
            return res;
1001
7.73k
        } else {
1002
7.73k
            using std::get;
1003
7.73k
            auto subs =
1004
7.73k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
7.73k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
7.73k
            auto next = get<1>(subs);
1007
7.73k
            auto ts   = get<2>(subs);
1008
7.73k
            auto tail = get<3>(subs);
1009
7.73k
            IMMER_TRY {
1010
7.73k
                if (next) {
1011
2.77k
                    if (mutate) {
1012
2.47k
                        node->inner()[idx] = next;
1013
2.47k
                        pos.each_right(dec_visitor{}, idx + 1);
1014
2.47k
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
2.47k
                    } else {
1016
302
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
302
                        newn->inner()[idx] = next;
1018
302
                        if (Mutating)
1019
302
                            pos.visit(dec_visitor{});
1020
302
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
302
                    }
1022
4.95k
                } else if (idx == 0) {
1023
1.05k
                    if (Mutating)
1024
1.05k
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
1.05k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
3.89k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
0
                    auto newn = pos.node()->inner()[0];
1028
0
                    if (!mutate)
1029
0
                        newn->inc();
1030
0
                    if (Mutating)
1031
0
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
0
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
3.89k
                } else {
1034
3.89k
                    if (mutate) {
1035
3.50k
                        pos.each_right(dec_visitor{}, idx + 1);
1036
3.50k
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
3.50k
                    } else {
1038
388
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
388
                        if (Mutating)
1040
388
                            pos.visit(dec_visitor{});
1041
388
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
388
                    }
1043
3.89k
                }
1044
7.73k
            }
1045
7.73k
            IMMER_CATCH (...) {
1046
0
                assert(!mutate);
1047
0
                assert(!next || pos.shift() > BL);
1048
0
                assert(tail);
1049
0
                if (next)
1050
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1051
0
                dec_leaf(tail, ts);
1052
0
                IMMER_RETHROW;
1053
0
            }
1054
7.73k
        }
1055
7.73k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, false>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
991
3.32k
    {
992
3.32k
        auto idx    = pos.index(last);
993
3.32k
        auto node   = pos.node();
994
3.32k
        auto mutate = Mutating && node->can_mutate(e);
995
3.32k
        if (Collapse && idx == 0) {
996
0
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
0
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
0
            if (Mutating)
999
0
                pos.visit(dec_right_visitor{}, count_t{1});
1000
0
            return res;
1001
3.32k
        } else {
1002
3.32k
            using std::get;
1003
3.32k
            auto subs =
1004
3.32k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
3.32k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
3.32k
            auto next = get<1>(subs);
1007
3.32k
            auto ts   = get<2>(subs);
1008
3.32k
            auto tail = get<3>(subs);
1009
3.32k
            IMMER_TRY {
1010
3.32k
                if (next) {
1011
816
                    if (mutate) {
1012
0
                        node->inner()[idx] = next;
1013
0
                        pos.each_right(dec_visitor{}, idx + 1);
1014
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
816
                    } else {
1016
816
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
816
                        newn->inner()[idx] = next;
1018
816
                        if (Mutating)
1019
0
                            pos.visit(dec_visitor{});
1020
816
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
816
                    }
1022
2.50k
                } else if (idx == 0) {
1023
702
                    if (Mutating)
1024
0
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
702
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
1.80k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
0
                    auto newn = pos.node()->inner()[0];
1028
0
                    if (!mutate)
1029
0
                        newn->inc();
1030
0
                    if (Mutating)
1031
0
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
0
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
1.80k
                } else {
1034
1.80k
                    if (mutate) {
1035
0
                        pos.each_right(dec_visitor{}, idx + 1);
1036
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
1.80k
                    } else {
1038
1.80k
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
1.80k
                        if (Mutating)
1040
0
                            pos.visit(dec_visitor{});
1041
1.80k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
1.80k
                    }
1043
1.80k
                }
1044
3.32k
            }
1045
3.32k
            IMMER_CATCH (...) {
1046
0
                assert(!mutate);
1047
0
                assert(!next || pos.shift() > BL);
1048
0
                assert(tail);
1049
0
                if (next)
1050
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1051
0
                dec_leaf(tail, ts);
1052
0
                IMMER_RETHROW;
1053
0
            }
1054
3.32k
        }
1055
3.32k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
991
12.6k
    {
992
12.6k
        auto idx    = pos.index(last);
993
12.6k
        auto node   = pos.node();
994
12.6k
        auto mutate = Mutating && node->can_mutate(e);
995
12.6k
        if (Collapse && idx == 0) {
996
7.57k
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
7.57k
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
7.57k
            if (Mutating)
999
7.57k
                pos.visit(dec_right_visitor{}, count_t{1});
1000
7.57k
            return res;
1001
7.57k
        } else {
1002
5.04k
            using std::get;
1003
5.04k
            auto subs =
1004
5.04k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
5.04k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
5.04k
            auto next = get<1>(subs);
1007
5.04k
            auto ts   = get<2>(subs);
1008
5.04k
            auto tail = get<3>(subs);
1009
5.04k
            IMMER_TRY {
1010
5.04k
                if (next) {
1011
1.04k
                    if (mutate) {
1012
778
                        node->inner()[idx] = next;
1013
778
                        pos.each_right(dec_visitor{}, idx + 1);
1014
778
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
778
                    } else {
1016
271
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
271
                        newn->inner()[idx] = next;
1018
271
                        if (Mutating)
1019
271
                            pos.visit(dec_visitor{});
1020
271
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
271
                    }
1022
3.99k
                } else if (idx == 0) {
1023
0
                    if (Mutating)
1024
0
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
0
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
3.99k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
2.31k
                    auto newn = pos.node()->inner()[0];
1028
2.31k
                    if (!mutate)
1029
758
                        newn->inc();
1030
2.31k
                    if (Mutating)
1031
2.31k
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
2.31k
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
2.31k
                } else {
1034
1.67k
                    if (mutate) {
1035
1.14k
                        pos.each_right(dec_visitor{}, idx + 1);
1036
1.14k
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
1.14k
                    } else {
1038
529
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
529
                        if (Mutating)
1040
529
                            pos.visit(dec_visitor{});
1041
529
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
529
                    }
1043
1.67k
                }
1044
5.04k
            }
1045
5.04k
            IMMER_CATCH (...) {
1046
0
                assert(!mutate);
1047
0
                assert(!next || pos.shift() > BL);
1048
0
                assert(tail);
1049
0
                if (next)
1050
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1051
0
                dec_leaf(tail, ts);
1052
0
                IMMER_RETHROW;
1053
0
            }
1054
5.04k
        }
1055
12.6k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, true>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
991
3.94k
    {
992
3.94k
        auto idx    = pos.index(last);
993
3.94k
        auto node   = pos.node();
994
3.94k
        auto mutate = Mutating && node->can_mutate(e);
995
3.94k
        if (Collapse && idx == 0) {
996
1.49k
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
1.49k
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
1.49k
            if (Mutating)
999
1.49k
                pos.visit(dec_right_visitor{}, count_t{1});
1000
1.49k
            return res;
1001
2.44k
        } else {
1002
2.44k
            using std::get;
1003
2.44k
            auto subs =
1004
2.44k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
2.44k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
2.44k
            auto next = get<1>(subs);
1007
2.44k
            auto ts   = get<2>(subs);
1008
2.44k
            auto tail = get<3>(subs);
1009
2.44k
            IMMER_TRY {
1010
2.44k
                if (next) {
1011
693
                    if (mutate) {
1012
474
                        node->inner()[idx] = next;
1013
474
                        pos.each_right(dec_visitor{}, idx + 1);
1014
474
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
474
                    } else {
1016
219
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
219
                        newn->inner()[idx] = next;
1018
219
                        if (Mutating)
1019
219
                            pos.visit(dec_visitor{});
1020
219
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
219
                    }
1022
1.75k
                } else if (idx == 0) {
1023
0
                    if (Mutating)
1024
0
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
0
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
1.75k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
458
                    auto newn = pos.node()->inner()[0];
1028
458
                    if (!mutate)
1029
199
                        newn->inc();
1030
458
                    if (Mutating)
1031
458
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
458
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
1.29k
                } else {
1034
1.29k
                    if (mutate) {
1035
238
                        pos.each_right(dec_visitor{}, idx + 1);
1036
238
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
1.05k
                    } else {
1038
1.05k
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
1.05k
                        if (Mutating)
1040
1.05k
                            pos.visit(dec_visitor{});
1041
1.05k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
1.05k
                    }
1043
1.29k
                }
1044
2.44k
            }
1045
2.44k
            IMMER_CATCH (...) {
1046
0
                assert(!mutate);
1047
0
                assert(!next || pos.shift() > BL);
1048
0
                assert(tail);
1049
0
                if (next)
1050
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1051
0
                dec_leaf(tail, ts);
1052
0
                IMMER_RETHROW;
1053
0
            }
1054
2.44k
        }
1055
3.94k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, true>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
1056
1057
    template <typename PosT>
1058
    static result_t visit_leaf(PosT&& pos, size_t last, edit_t e)
1059
35.9k
    {
1060
35.9k
        auto old_tail_size = pos.count();
1061
35.9k
        auto new_tail_size = pos.index(last) + 1;
1062
35.9k
        auto node          = pos.node();
1063
35.9k
        auto mutate        = Mutating && node->can_mutate(e);
1064
35.9k
        if (new_tail_size == old_tail_size) {
1065
10.4k
            if (!Mutating)
1066
6.30k
                node->inc();
1067
10.4k
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
25.4k
        } else if (mutate) {
1069
3.37k
            detail::destroy_n(node->leaf() + new_tail_size,
1070
3.37k
                              old_tail_size - new_tail_size);
1071
3.37k
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
22.1k
        } else {
1073
22.1k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
22.1k
            if (Mutating)
1075
8.19k
                pos.visit(dec_visitor{});
1076
22.1k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
22.1k
        }
1078
35.9k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1059
1.06k
    {
1060
1.06k
        auto old_tail_size = pos.count();
1061
1.06k
        auto new_tail_size = pos.index(last) + 1;
1062
1.06k
        auto node          = pos.node();
1063
1.06k
        auto mutate        = Mutating && node->can_mutate(e);
1064
1.06k
        if (new_tail_size == old_tail_size) {
1065
304
            if (!Mutating)
1066
0
                node->inc();
1067
304
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
761
        } else if (mutate) {
1069
267
            detail::destroy_n(node->leaf() + new_tail_size,
1070
267
                              old_tail_size - new_tail_size);
1071
267
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
494
        } else {
1073
494
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
494
            if (Mutating)
1075
494
                pos.visit(dec_visitor{});
1076
494
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
494
        }
1078
1.06k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1059
777
    {
1060
777
        auto old_tail_size = pos.count();
1061
777
        auto new_tail_size = pos.index(last) + 1;
1062
777
        auto node          = pos.node();
1063
777
        auto mutate        = Mutating && node->can_mutate(e);
1064
777
        if (new_tail_size == old_tail_size) {
1065
487
            if (!Mutating)
1066
487
                node->inc();
1067
487
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
487
        } else if (mutate) {
1069
0
            detail::destroy_n(node->leaf() + new_tail_size,
1070
0
                              old_tail_size - new_tail_size);
1071
0
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
290
        } else {
1073
290
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
290
            if (Mutating)
1075
0
                pos.visit(dec_visitor{});
1076
290
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
290
        }
1078
777
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, false>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1059
1.49k
    {
1060
1.49k
        auto old_tail_size = pos.count();
1061
1.49k
        auto new_tail_size = pos.index(last) + 1;
1062
1.49k
        auto node          = pos.node();
1063
1.49k
        auto mutate        = Mutating && node->can_mutate(e);
1064
1.49k
        if (new_tail_size == old_tail_size) {
1065
728
            if (!Mutating)
1066
728
                node->inc();
1067
728
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
770
        } else if (mutate) {
1069
0
            detail::destroy_n(node->leaf() + new_tail_size,
1070
0
                              old_tail_size - new_tail_size);
1071
0
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
770
        } else {
1073
770
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
770
            if (Mutating)
1075
0
                pos.visit(dec_visitor{});
1076
770
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
770
        }
1078
1.49k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, true>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1059
5.93k
    {
1060
5.93k
        auto old_tail_size = pos.count();
1061
5.93k
        auto new_tail_size = pos.index(last) + 1;
1062
5.93k
        auto node          = pos.node();
1063
5.93k
        auto mutate        = Mutating && node->can_mutate(e);
1064
5.93k
        if (new_tail_size == old_tail_size) {
1065
1.30k
            if (!Mutating)
1066
0
                node->inc();
1067
1.30k
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
4.62k
        } else if (mutate) {
1069
1.07k
            detail::destroy_n(node->leaf() + new_tail_size,
1070
1.07k
                              old_tail_size - new_tail_size);
1071
1.07k
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
3.54k
        } else {
1073
3.54k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
3.54k
            if (Mutating)
1075
3.54k
                pos.visit(dec_visitor{});
1076
3.54k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
3.54k
        }
1078
5.93k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, false>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1059
10.1k
    {
1060
10.1k
        auto old_tail_size = pos.count();
1061
10.1k
        auto new_tail_size = pos.index(last) + 1;
1062
10.1k
        auto node          = pos.node();
1063
10.1k
        auto mutate        = Mutating && node->can_mutate(e);
1064
10.1k
        if (new_tail_size == old_tail_size) {
1065
2.79k
            if (!Mutating)
1066
2.79k
                node->inc();
1067
2.79k
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
7.33k
        } else if (mutate) {
1069
0
            detail::destroy_n(node->leaf() + new_tail_size,
1070
0
                              old_tail_size - new_tail_size);
1071
0
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
7.33k
        } else {
1073
7.33k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
7.33k
            if (Mutating)
1075
0
                pos.visit(dec_visitor{});
1076
7.33k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
7.33k
        }
1078
10.1k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, false>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1059
427
    {
1060
427
        auto old_tail_size = pos.count();
1061
427
        auto new_tail_size = pos.index(last) + 1;
1062
427
        auto node          = pos.node();
1063
427
        auto mutate        = Mutating && node->can_mutate(e);
1064
427
        if (new_tail_size == old_tail_size) {
1065
197
            if (!Mutating)
1066
197
                node->inc();
1067
197
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
230
        } else if (mutate) {
1069
0
            detail::destroy_n(node->leaf() + new_tail_size,
1070
0
                              old_tail_size - new_tail_size);
1071
0
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
230
        } else {
1073
230
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
230
            if (Mutating)
1075
0
                pos.visit(dec_visitor{});
1076
230
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
230
        }
1078
427
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, true>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1059
2.40k
    {
1060
2.40k
        auto old_tail_size = pos.count();
1061
2.40k
        auto new_tail_size = pos.index(last) + 1;
1062
2.40k
        auto node          = pos.node();
1063
2.40k
        auto mutate        = Mutating && node->can_mutate(e);
1064
2.40k
        if (new_tail_size == old_tail_size) {
1065
251
            if (!Mutating)
1066
0
                node->inc();
1067
251
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
2.14k
        } else if (mutate) {
1069
353
            detail::destroy_n(node->leaf() + new_tail_size,
1070
353
                              old_tail_size - new_tail_size);
1071
353
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
1.79k
        } else {
1073
1.79k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
1.79k
            if (Mutating)
1075
1.79k
                pos.visit(dec_visitor{});
1076
1.79k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
1.79k
        }
1078
2.40k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, false>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1059
2.39k
    {
1060
2.39k
        auto old_tail_size = pos.count();
1061
2.39k
        auto new_tail_size = pos.index(last) + 1;
1062
2.39k
        auto node          = pos.node();
1063
2.39k
        auto mutate        = Mutating && node->can_mutate(e);
1064
2.39k
        if (new_tail_size == old_tail_size) {
1065
691
            if (!Mutating)
1066
691
                node->inc();
1067
691
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
1.70k
        } else if (mutate) {
1069
0
            detail::destroy_n(node->leaf() + new_tail_size,
1070
0
                              old_tail_size - new_tail_size);
1071
0
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
1.70k
        } else {
1073
1.70k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
1.70k
            if (Mutating)
1075
0
                pos.visit(dec_visitor{});
1076
1.70k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
1.70k
        }
1078
2.39k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1059
3.98k
    {
1060
3.98k
        auto old_tail_size = pos.count();
1061
3.98k
        auto new_tail_size = pos.index(last) + 1;
1062
3.98k
        auto node          = pos.node();
1063
3.98k
        auto mutate        = Mutating && node->can_mutate(e);
1064
3.98k
        if (new_tail_size == old_tail_size) {
1065
1.36k
            if (!Mutating)
1066
0
                node->inc();
1067
1.36k
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
2.62k
        } else if (mutate) {
1069
932
            detail::destroy_n(node->leaf() + new_tail_size,
1070
932
                              old_tail_size - new_tail_size);
1071
932
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
1.69k
        } else {
1073
1.69k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
1.69k
            if (Mutating)
1075
1.69k
                pos.visit(dec_visitor{});
1076
1.69k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
1.69k
        }
1078
3.98k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1059
4.99k
    {
1060
4.99k
        auto old_tail_size = pos.count();
1061
4.99k
        auto new_tail_size = pos.index(last) + 1;
1062
4.99k
        auto node          = pos.node();
1063
4.99k
        auto mutate        = Mutating && node->can_mutate(e);
1064
4.99k
        if (new_tail_size == old_tail_size) {
1065
1.40k
            if (!Mutating)
1066
1.40k
                node->inc();
1067
1.40k
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
3.58k
        } else if (mutate) {
1069
0
            detail::destroy_n(node->leaf() + new_tail_size,
1070
0
                              old_tail_size - new_tail_size);
1071
0
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
3.58k
        } else {
1073
3.58k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
3.58k
            if (Mutating)
1075
0
                pos.visit(dec_visitor{});
1076
3.58k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
3.58k
        }
1078
4.99k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, true>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1059
1.69k
    {
1060
1.69k
        auto old_tail_size = pos.count();
1061
1.69k
        auto new_tail_size = pos.index(last) + 1;
1062
1.69k
        auto node          = pos.node();
1063
1.69k
        auto mutate        = Mutating && node->can_mutate(e);
1064
1.69k
        if (new_tail_size == old_tail_size) {
1065
704
            if (!Mutating)
1066
0
                node->inc();
1067
704
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
988
        } else if (mutate) {
1069
549
            detail::destroy_n(node->leaf() + new_tail_size,
1070
549
                              old_tail_size - new_tail_size);
1071
549
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
549
        } else {
1073
439
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
439
            if (Mutating)
1075
439
                pos.visit(dec_visitor{});
1076
439
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
439
        }
1078
1.69k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, true>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1059
657
    {
1060
657
        auto old_tail_size = pos.count();
1061
657
        auto new_tail_size = pos.index(last) + 1;
1062
657
        auto node          = pos.node();
1063
657
        auto mutate        = Mutating && node->can_mutate(e);
1064
657
        if (new_tail_size == old_tail_size) {
1065
237
            if (!Mutating)
1066
0
                node->inc();
1067
237
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
420
        } else if (mutate) {
1069
194
            detail::destroy_n(node->leaf() + new_tail_size,
1070
194
                              old_tail_size - new_tail_size);
1071
194
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
226
        } else {
1073
226
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
226
            if (Mutating)
1075
226
                pos.visit(dec_visitor{});
1076
226
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
226
        }
1078
657
    }
1079
};
1080
1081
template <typename NodeT, bool Collapse = true>
1082
struct slice_right_visitor : visitor_base<slice_right_visitor<NodeT, Collapse>>
1083
{
1084
    using node_t = NodeT;
1085
    using this_t = slice_right_visitor;
1086
1087
    // returns a new shift, new root, the new tail size and the new tail
1088
    using result_t      = std::tuple<shift_t, NodeT*, count_t, NodeT*>;
1089
    using no_collapse_t = slice_right_visitor<NodeT, false>;
1090
1091
    static constexpr auto B  = NodeT::bits;
1092
    static constexpr auto BL = NodeT::bits_leaf;
1093
1094
    template <typename PosT>
1095
    static result_t visit_relaxed(PosT&& pos, size_t last)
1096
50.6k
    {
1097
50.6k
        auto idx = pos.index(last);
1098
50.6k
        if (Collapse && idx == 0) {
1099
28.9k
            return pos.towards_oh(this_t{}, last, idx);
1100
28.9k
        } else {
1101
21.7k
            using std::get;
1102
21.7k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1103
21.7k
            auto next = get<1>(subs);
1104
21.7k
            auto ts   = get<2>(subs);
1105
21.7k
            auto tail = get<3>(subs);
1106
21.7k
            IMMER_TRY {
1107
21.7k
                if (next) {
1108
12.2k
                    auto count = idx + 1;
1109
12.2k
                    auto newn  = node_t::copy_inner_r_n(count, pos.node(), idx);
1110
12.2k
                    auto newr  = newn->relaxed();
1111
12.2k
                    newn->inner()[idx] = next;
1112
12.2k
                    newr->d.sizes[idx] = last + 1 - ts;
1113
12.2k
                    newr->d.count      = count;
1114
12.2k
                    assert(newr->d.sizes[idx]);
1115
12.2k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1116
12.2k
                } else if (idx == 0) {
1117
2.55k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1118
6.93k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1119
2.08k
                    auto newn = pos.node()->inner()[0];
1120
2.08k
                    return std::make_tuple(
1121
2.08k
                        pos.shift() - B, newn->inc(), ts, tail);
1122
4.85k
                } else {
1123
4.85k
                    auto newn = node_t::copy_inner_r(pos.node(), idx);
1124
4.85k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1125
4.85k
                }
1126
21.7k
            }
1127
21.7k
            IMMER_CATCH (...) {
1128
0
                assert(!next || pos.shift() > BL);
1129
0
                if (next)
1130
0
                    dec_inner(next,
1131
0
                              pos.shift() - B,
1132
0
                              last + 1 - ts - pos.size_before(idx));
1133
0
                if (tail)
1134
0
                    dec_leaf(tail, ts);
1135
0
                IMMER_RETHROW;
1136
0
            }
1137
21.7k
        }
1138
50.6k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1096
38.5k
    {
1097
38.5k
        auto idx = pos.index(last);
1098
38.5k
        if (Collapse && idx == 0) {
1099
28.9k
            return pos.towards_oh(this_t{}, last, idx);
1100
28.9k
        } else {
1101
9.67k
            using std::get;
1102
9.67k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1103
9.67k
            auto next = get<1>(subs);
1104
9.67k
            auto ts   = get<2>(subs);
1105
9.67k
            auto tail = get<3>(subs);
1106
9.67k
            IMMER_TRY {
1107
9.67k
                if (next) {
1108
5.71k
                    auto count = idx + 1;
1109
5.71k
                    auto newn  = node_t::copy_inner_r_n(count, pos.node(), idx);
1110
5.71k
                    auto newr  = newn->relaxed();
1111
5.71k
                    newn->inner()[idx] = next;
1112
5.71k
                    newr->d.sizes[idx] = last + 1 - ts;
1113
5.71k
                    newr->d.count      = count;
1114
5.71k
                    assert(newr->d.sizes[idx]);
1115
5.71k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1116
5.71k
                } else if (idx == 0) {
1117
0
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1118
3.95k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1119
2.08k
                    auto newn = pos.node()->inner()[0];
1120
2.08k
                    return std::make_tuple(
1121
2.08k
                        pos.shift() - B, newn->inc(), ts, tail);
1122
2.08k
                } else {
1123
1.87k
                    auto newn = node_t::copy_inner_r(pos.node(), idx);
1124
1.87k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1125
1.87k
                }
1126
9.67k
            }
1127
9.67k
            IMMER_CATCH (...) {
1128
0
                assert(!next || pos.shift() > BL);
1129
0
                if (next)
1130
0
                    dec_inner(next,
1131
0
                              pos.shift() - B,
1132
0
                              last + 1 - ts - pos.size_before(idx));
1133
0
                if (tail)
1134
0
                    dec_leaf(tail, ts);
1135
0
                IMMER_RETHROW;
1136
0
            }
1137
9.67k
        }
1138
38.5k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1096
12.0k
    {
1097
12.0k
        auto idx = pos.index(last);
1098
12.0k
        if (Collapse && idx == 0) {
1099
0
            return pos.towards_oh(this_t{}, last, idx);
1100
12.0k
        } else {
1101
12.0k
            using std::get;
1102
12.0k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1103
12.0k
            auto next = get<1>(subs);
1104
12.0k
            auto ts   = get<2>(subs);
1105
12.0k
            auto tail = get<3>(subs);
1106
12.0k
            IMMER_TRY {
1107
12.0k
                if (next) {
1108
6.49k
                    auto count = idx + 1;
1109
6.49k
                    auto newn  = node_t::copy_inner_r_n(count, pos.node(), idx);
1110
6.49k
                    auto newr  = newn->relaxed();
1111
6.49k
                    newn->inner()[idx] = next;
1112
6.49k
                    newr->d.sizes[idx] = last + 1 - ts;
1113
6.49k
                    newr->d.count      = count;
1114
6.49k
                    assert(newr->d.sizes[idx]);
1115
6.49k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1116
6.49k
                } else if (idx == 0) {
1117
2.55k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1118
2.98k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1119
0
                    auto newn = pos.node()->inner()[0];
1120
0
                    return std::make_tuple(
1121
0
                        pos.shift() - B, newn->inc(), ts, tail);
1122
2.98k
                } else {
1123
2.98k
                    auto newn = node_t::copy_inner_r(pos.node(), idx);
1124
2.98k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1125
2.98k
                }
1126
12.0k
            }
1127
12.0k
            IMMER_CATCH (...) {
1128
0
                assert(!next || pos.shift() > BL);
1129
0
                if (next)
1130
0
                    dec_inner(next,
1131
0
                              pos.shift() - B,
1132
0
                              last + 1 - ts - pos.size_before(idx));
1133
0
                if (tail)
1134
0
                    dec_leaf(tail, ts);
1135
0
                IMMER_RETHROW;
1136
0
            }
1137
12.0k
        }
1138
12.0k
    }
1139
1140
    template <typename PosT>
1141
    static result_t visit_regular(PosT&& pos, size_t last)
1142
21.6k
    {
1143
21.6k
        auto idx = pos.index(last);
1144
21.6k
        if (Collapse && idx == 0) {
1145
4.84k
            return pos.towards_oh(this_t{}, last, idx);
1146
16.8k
        } else {
1147
16.8k
            using std::get;
1148
16.8k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1149
16.8k
            auto next = get<1>(subs);
1150
16.8k
            auto ts   = get<2>(subs);
1151
16.8k
            auto tail = get<3>(subs);
1152
16.8k
            IMMER_TRY {
1153
16.8k
                if (next) {
1154
4.64k
                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
1155
4.64k
                    newn->inner()[idx] = next;
1156
4.64k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1157
12.1k
                } else if (idx == 0) {
1158
4.72k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1159
7.46k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1160
1.89k
                    auto newn = pos.node()->inner()[0];
1161
1.89k
                    return std::make_tuple(
1162
1.89k
                        pos.shift() - B, newn->inc(), ts, tail);
1163
5.56k
                } else {
1164
5.56k
                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
1165
5.56k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1166
5.56k
                }
1167
16.8k
            }
1168
16.8k
            IMMER_CATCH (...) {
1169
0
                assert(!next || pos.shift() > BL);
1170
0
                assert(tail);
1171
0
                if (next)
1172
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1173
0
                dec_leaf(tail, ts);
1174
0
                IMMER_RETHROW;
1175
0
            }
1176
16.8k
        }
1177
21.6k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1142
4.19k
    {
1143
4.19k
        auto idx = pos.index(last);
1144
4.19k
        if (Collapse && idx == 0) {
1145
0
            return pos.towards_oh(this_t{}, last, idx);
1146
4.19k
        } else {
1147
4.19k
            using std::get;
1148
4.19k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1149
4.19k
            auto next = get<1>(subs);
1150
4.19k
            auto ts   = get<2>(subs);
1151
4.19k
            auto tail = get<3>(subs);
1152
4.19k
            IMMER_TRY {
1153
4.19k
                if (next) {
1154
1.94k
                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
1155
1.94k
                    newn->inner()[idx] = next;
1156
1.94k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1157
2.25k
                } else if (idx == 0) {
1158
1.46k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1159
1.46k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1160
0
                    auto newn = pos.node()->inner()[0];
1161
0
                    return std::make_tuple(
1162
0
                        pos.shift() - B, newn->inc(), ts, tail);
1163
787
                } else {
1164
787
                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
1165
787
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1166
787
                }
1167
4.19k
            }
1168
4.19k
            IMMER_CATCH (...) {
1169
0
                assert(!next || pos.shift() > BL);
1170
0
                assert(tail);
1171
0
                if (next)
1172
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1173
0
                dec_leaf(tail, ts);
1174
0
                IMMER_RETHROW;
1175
0
            }
1176
4.19k
        }
1177
4.19k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1142
2.90k
    {
1143
2.90k
        auto idx = pos.index(last);
1144
2.90k
        if (Collapse && idx == 0) {
1145
0
            return pos.towards_oh(this_t{}, last, idx);
1146
2.90k
        } else {
1147
2.90k
            using std::get;
1148
2.90k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1149
2.90k
            auto next = get<1>(subs);
1150
2.90k
            auto ts   = get<2>(subs);
1151
2.90k
            auto tail = get<3>(subs);
1152
2.90k
            IMMER_TRY {
1153
2.90k
                if (next) {
1154
334
                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
1155
334
                    newn->inner()[idx] = next;
1156
334
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1157
2.56k
                } else if (idx == 0) {
1158
1.47k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1159
1.47k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1160
0
                    auto newn = pos.node()->inner()[0];
1161
0
                    return std::make_tuple(
1162
0
                        pos.shift() - B, newn->inc(), ts, tail);
1163
1.09k
                } else {
1164
1.09k
                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
1165
1.09k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1166
1.09k
                }
1167
2.90k
            }
1168
2.90k
            IMMER_CATCH (...) {
1169
0
                assert(!next || pos.shift() > BL);
1170
0
                assert(tail);
1171
0
                if (next)
1172
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1173
0
                dec_leaf(tail, ts);
1174
0
                IMMER_RETHROW;
1175
0
            }
1176
2.90k
        }
1177
2.90k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1142
5.00k
    {
1143
5.00k
        auto idx = pos.index(last);
1144
5.00k
        if (Collapse && idx == 0) {
1145
0
            return pos.towards_oh(this_t{}, last, idx);
1146
5.00k
        } else {
1147
5.00k
            using std::get;
1148
5.00k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1149
5.00k
            auto next = get<1>(subs);
1150
5.00k
            auto ts   = get<2>(subs);
1151
5.00k
            auto tail = get<3>(subs);
1152
5.00k
            IMMER_TRY {
1153
5.00k
                if (next) {
1154
1.19k
                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
1155
1.19k
                    newn->inner()[idx] = next;
1156
1.19k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1157
3.81k
                } else if (idx == 0) {
1158
1.78k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1159
2.03k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1160
0
                    auto newn = pos.node()->inner()[0];
1161
0
                    return std::make_tuple(
1162
0
                        pos.shift() - B, newn->inc(), ts, tail);
1163
2.03k
                } else {
1164
2.03k
                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
1165
2.03k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1166
2.03k
                }
1167
5.00k
            }
1168
5.00k
            IMMER_CATCH (...) {
1169
0
                assert(!next || pos.shift() > BL);
1170
0
                assert(tail);
1171
0
                if (next)
1172
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1173
0
                dec_leaf(tail, ts);
1174
0
                IMMER_RETHROW;
1175
0
            }
1176
5.00k
        }
1177
5.00k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1142
6.84k
    {
1143
6.84k
        auto idx = pos.index(last);
1144
6.84k
        if (Collapse && idx == 0) {
1145
3.63k
            return pos.towards_oh(this_t{}, last, idx);
1146
3.63k
        } else {
1147
3.21k
            using std::get;
1148
3.21k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1149
3.21k
            auto next = get<1>(subs);
1150
3.21k
            auto ts   = get<2>(subs);
1151
3.21k
            auto tail = get<3>(subs);
1152
3.21k
            IMMER_TRY {
1153
3.21k
                if (next) {
1154
835
                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
1155
835
                    newn->inner()[idx] = next;
1156
835
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1157
2.37k
                } else if (idx == 0) {
1158
0
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1159
2.37k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1160
1.44k
                    auto newn = pos.node()->inner()[0];
1161
1.44k
                    return std::make_tuple(
1162
1.44k
                        pos.shift() - B, newn->inc(), ts, tail);
1163
1.44k
                } else {
1164
931
                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
1165
931
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1166
931
                }
1167
3.21k
            }
1168
3.21k
            IMMER_CATCH (...) {
1169
0
                assert(!next || pos.shift() > BL);
1170
0
                assert(tail);
1171
0
                if (next)
1172
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1173
0
                dec_leaf(tail, ts);
1174
0
                IMMER_RETHROW;
1175
0
            }
1176
3.21k
        }
1177
6.84k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1142
2.72k
    {
1143
2.72k
        auto idx = pos.index(last);
1144
2.72k
        if (Collapse && idx == 0) {
1145
1.20k
            return pos.towards_oh(this_t{}, last, idx);
1146
1.51k
        } else {
1147
1.51k
            using std::get;
1148
1.51k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1149
1.51k
            auto next = get<1>(subs);
1150
1.51k
            auto ts   = get<2>(subs);
1151
1.51k
            auto tail = get<3>(subs);
1152
1.51k
            IMMER_TRY {
1153
1.51k
                if (next) {
1154
343
                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
1155
343
                    newn->inner()[idx] = next;
1156
343
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1157
1.17k
                } else if (idx == 0) {
1158
0
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1159
1.17k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1160
446
                    auto newn = pos.node()->inner()[0];
1161
446
                    return std::make_tuple(
1162
446
                        pos.shift() - B, newn->inc(), ts, tail);
1163
728
                } else {
1164
728
                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
1165
728
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1166
728
                }
1167
1.51k
            }
1168
1.51k
            IMMER_CATCH (...) {
1169
0
                assert(!next || pos.shift() > BL);
1170
0
                assert(tail);
1171
0
                if (next)
1172
0
                    dec_regular(next, pos.shift() - B, last + 1 - ts);
1173
0
                dec_leaf(tail, ts);
1174
0
                IMMER_RETHROW;
1175
0
            }
1176
1.51k
        }
1177
2.72k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
1178
1179
    template <typename PosT>
1180
    static result_t visit_leaf(PosT&& pos, size_t last)
1181
18.5k
    {
1182
18.5k
        auto old_tail_size = pos.count();
1183
18.5k
        auto new_tail_size = pos.index(last) + 1;
1184
18.5k
        auto new_tail      = new_tail_size == old_tail_size
1185
18.5k
                                 ? pos.node()->inc()
1186
18.5k
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
18.5k
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
18.5k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1181
2.06k
    {
1182
2.06k
        auto old_tail_size = pos.count();
1183
2.06k
        auto new_tail_size = pos.index(last) + 1;
1184
2.06k
        auto new_tail      = new_tail_size == old_tail_size
1185
2.06k
                                 ? pos.node()->inc()
1186
2.06k
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
2.06k
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
2.06k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1181
5.47k
    {
1182
5.47k
        auto old_tail_size = pos.count();
1183
5.47k
        auto new_tail_size = pos.index(last) + 1;
1184
5.47k
        auto new_tail      = new_tail_size == old_tail_size
1185
5.47k
                                 ? pos.node()->inc()
1186
5.47k
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
5.47k
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
5.47k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1181
6.57k
    {
1182
6.57k
        auto old_tail_size = pos.count();
1183
6.57k
        auto new_tail_size = pos.index(last) + 1;
1184
6.57k
        auto new_tail      = new_tail_size == old_tail_size
1185
6.57k
                                 ? pos.node()->inc()
1186
6.57k
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
6.57k
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
6.57k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1181
2.34k
    {
1182
2.34k
        auto old_tail_size = pos.count();
1183
2.34k
        auto new_tail_size = pos.index(last) + 1;
1184
2.34k
        auto new_tail      = new_tail_size == old_tail_size
1185
2.34k
                                 ? pos.node()->inc()
1186
2.34k
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
2.34k
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
2.34k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1181
1.45k
    {
1182
1.45k
        auto old_tail_size = pos.count();
1183
1.45k
        auto new_tail_size = pos.index(last) + 1;
1184
1.45k
        auto new_tail      = new_tail_size == old_tail_size
1185
1.45k
                                 ? pos.node()->inc()
1186
1.45k
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
1.45k
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
1.45k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1181
664
    {
1182
664
        auto old_tail_size = pos.count();
1183
664
        auto new_tail_size = pos.index(last) + 1;
1184
664
        auto new_tail      = new_tail_size == old_tail_size
1185
664
                                 ? pos.node()->inc()
1186
664
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
664
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
664
    }
1189
};
1190
1191
struct dec_left_visitor : visitor_base<dec_left_visitor>
1192
{
1193
    using this_t = dec_left_visitor;
1194
    using dec_t  = dec_visitor;
1195
1196
    template <typename Pos>
1197
    static void visit_relaxed(Pos&& p, count_t idx)
1198
5.83k
    {
1199
5.83k
        using node_t = node_type<Pos>;
1200
5.83k
        auto node    = p.node();
1201
5.83k
        if (node->dec()) {
1202
5.83k
            p.each_left(dec_t{}, idx);
1203
5.83k
            node_t::delete_inner_r(node, p.count());
1204
5.83k
        }
1205
5.83k
    }
1206
1207
    template <typename Pos>
1208
    static void visit_regular(Pos&& p, count_t idx)
1209
4.76k
    {
1210
4.76k
        using node_t = node_type<Pos>;
1211
4.76k
        auto node    = p.node();
1212
4.76k
        if (node->dec()) {
1213
4.76k
            p.each_left(dec_t{}, idx);
1214
4.76k
            node_t::delete_inner(node, p.count());
1215
4.76k
        }
1216
4.76k
    }
void immer::detail::rbts::dec_left_visitor::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int)
Line
Count
Source
1209
311
    {
1210
311
        using node_t = node_type<Pos>;
1211
311
        auto node    = p.node();
1212
311
        if (node->dec()) {
1213
311
            p.each_left(dec_t{}, idx);
1214
311
            node_t::delete_inner(node, p.count());
1215
311
        }
1216
311
    }
void immer::detail::rbts::dec_left_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned int)
Line
Count
Source
1209
4.45k
    {
1210
4.45k
        using node_t = node_type<Pos>;
1211
4.45k
        auto node    = p.node();
1212
4.45k
        if (node->dec()) {
1213
4.45k
            p.each_left(dec_t{}, idx);
1214
4.45k
            node_t::delete_inner(node, p.count());
1215
4.45k
        }
1216
4.45k
    }
1217
1218
    template <typename Pos>
1219
    static void visit_leaf(Pos&& p, count_t idx)
1220
    {
1221
        IMMER_UNREACHABLE;
1222
    }
1223
};
1224
1225
template <typename NodeT, bool Collapse = true, bool Mutating = true>
1226
struct slice_left_mut_visitor
1227
    : visitor_base<slice_left_mut_visitor<NodeT, Collapse, Mutating>>
1228
{
1229
    using node_t    = NodeT;
1230
    using this_t    = slice_left_mut_visitor;
1231
    using edit_t    = typename NodeT::edit_t;
1232
    using value_t   = typename NodeT::value_t;
1233
    using relaxed_t = typename NodeT::relaxed_t;
1234
    // returns a new shift and new root
1235
    using result_t = std::tuple<shift_t, NodeT*>;
1236
1237
    using no_collapse_t        = slice_left_mut_visitor<NodeT, false, true>;
1238
    using no_collapse_no_mut_t = slice_left_mut_visitor<NodeT, false, false>;
1239
    using no_mut_t             = slice_left_mut_visitor<NodeT, Collapse, false>;
1240
1241
    static constexpr auto B  = NodeT::bits;
1242
    static constexpr auto BL = NodeT::bits_leaf;
1243
1244
    template <typename PosT>
1245
    static result_t visit_relaxed(PosT&& pos, size_t first, edit_t e)
1246
279k
    {
1247
279k
        auto idx                = pos.subindex(first);
1248
279k
        auto count              = pos.count();
1249
279k
        auto node               = pos.node();
1250
279k
        auto mutate             = Mutating && node->can_mutate(e);
1251
279k
        auto left_size          = pos.size_before(idx);
1252
279k
        auto child_size         = pos.size_sbh(idx, left_size);
1253
279k
        auto dropped_size       = first;
1254
279k
        auto child_dropped_size = dropped_size - left_size;
1255
279k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1256
10.3k
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1257
10.3k
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1258
10.3k
            if (mutate)
1259
5.83k
                pos.visit(dec_left_visitor{}, idx);
1260
4.46k
            else if (Mutating)
1261
3.44k
                pos.visit(dec_visitor{});
1262
10.3k
            return r;
1263
269k
        } else {
1264
269k
            using std::get;
1265
269k
            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
1266
269k
                                   : node_t::make_inner_r_e(e);
1267
269k
            auto newr     = newn->relaxed();
1268
269k
            auto newcount = count - idx;
1269
269k
            auto new_child_size = child_size - child_dropped_size;
1270
269k
            IMMER_TRY {
1271
269k
                auto subs =
1272
269k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1273
269k
                           : pos.towards_sub_oh(
1274
67.7k
                                 no_collapse_no_mut_t{}, first, idx, e);
1275
269k
                if (mutate)
1276
201k
                    pos.each_left(dec_visitor{}, idx);
1277
269k
                pos.copy_sizes(
1278
269k
                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
1279
269k
                std::copy(node->inner() + idx + 1,
1280
269k
                          node->inner() + count,
1281
269k
                          newn->inner() + 1);
1282
269k
                newn->inner()[0] = get<1>(subs);
1283
269k
                newr->d.sizes[0] = new_child_size;
1284
269k
                newr->d.count    = newcount;
1285
269k
                assert(new_child_size);
1286
269k
                if (!mutate) {
1287
67.7k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1288
67.7k
                    if (Mutating)
1289
13.7k
                        pos.visit(dec_visitor{});
1290
67.7k
                }
1291
269k
                return std::make_tuple(pos.shift(), newn);
1292
269k
            }
1293
269k
            IMMER_CATCH (...) {
1294
0
                if (!mutate)
1295
0
                    node_t::delete_inner_r_e(newn);
1296
0
                IMMER_RETHROW;
1297
0
            }
1298
269k
        }
1299
279k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, true>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1246
37.0k
    {
1247
37.0k
        auto idx                = pos.subindex(first);
1248
37.0k
        auto count              = pos.count();
1249
37.0k
        auto node               = pos.node();
1250
37.0k
        auto mutate             = Mutating && node->can_mutate(e);
1251
37.0k
        auto left_size          = pos.size_before(idx);
1252
37.0k
        auto child_size         = pos.size_sbh(idx, left_size);
1253
37.0k
        auto dropped_size       = first;
1254
37.0k
        auto child_dropped_size = dropped_size - left_size;
1255
37.0k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1256
9.27k
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1257
9.27k
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1258
9.27k
            if (mutate)
1259
5.83k
                pos.visit(dec_left_visitor{}, idx);
1260
3.44k
            else if (Mutating)
1261
3.44k
                pos.visit(dec_visitor{});
1262
9.27k
            return r;
1263
27.7k
        } else {
1264
27.7k
            using std::get;
1265
27.7k
            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
1266
27.7k
                                   : node_t::make_inner_r_e(e);
1267
27.7k
            auto newr     = newn->relaxed();
1268
27.7k
            auto newcount = count - idx;
1269
27.7k
            auto new_child_size = child_size - child_dropped_size;
1270
27.7k
            IMMER_TRY {
1271
27.7k
                auto subs =
1272
27.7k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1273
27.7k
                           : pos.towards_sub_oh(
1274
6.30k
                                 no_collapse_no_mut_t{}, first, idx, e);
1275
27.7k
                if (mutate)
1276
21.4k
                    pos.each_left(dec_visitor{}, idx);
1277
27.7k
                pos.copy_sizes(
1278
27.7k
                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
1279
27.7k
                std::copy(node->inner() + idx + 1,
1280
27.7k
                          node->inner() + count,
1281
27.7k
                          newn->inner() + 1);
1282
27.7k
                newn->inner()[0] = get<1>(subs);
1283
27.7k
                newr->d.sizes[0] = new_child_size;
1284
27.7k
                newr->d.count    = newcount;
1285
27.7k
                assert(new_child_size);
1286
27.7k
                if (!mutate) {
1287
6.30k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1288
6.30k
                    if (Mutating)
1289
6.30k
                        pos.visit(dec_visitor{});
1290
6.30k
                }
1291
27.7k
                return std::make_tuple(pos.shift(), newn);
1292
27.7k
            }
1293
27.7k
            IMMER_CATCH (...) {
1294
0
                if (!mutate)
1295
0
                    node_t::delete_inner_r_e(newn);
1296
0
                IMMER_RETHROW;
1297
0
            }
1298
27.7k
        }
1299
37.0k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, false>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1246
2.71k
    {
1247
2.71k
        auto idx                = pos.subindex(first);
1248
2.71k
        auto count              = pos.count();
1249
2.71k
        auto node               = pos.node();
1250
2.71k
        auto mutate             = Mutating && node->can_mutate(e);
1251
2.71k
        auto left_size          = pos.size_before(idx);
1252
2.71k
        auto child_size         = pos.size_sbh(idx, left_size);
1253
2.71k
        auto dropped_size       = first;
1254
2.71k
        auto child_dropped_size = dropped_size - left_size;
1255
2.71k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1256
1.02k
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1257
1.02k
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1258
1.02k
            if (mutate)
1259
0
                pos.visit(dec_left_visitor{}, idx);
1260
1.02k
            else if (Mutating)
1261
0
                pos.visit(dec_visitor{});
1262
1.02k
            return r;
1263
1.68k
        } else {
1264
1.68k
            using std::get;
1265
1.68k
            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
1266
1.68k
                                   : node_t::make_inner_r_e(e);
1267
1.68k
            auto newr     = newn->relaxed();
1268
1.68k
            auto newcount = count - idx;
1269
1.68k
            auto new_child_size = child_size - child_dropped_size;
1270
1.68k
            IMMER_TRY {
1271
1.68k
                auto subs =
1272
1.68k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1273
1.68k
                           : pos.towards_sub_oh(
1274
1.68k
                                 no_collapse_no_mut_t{}, first, idx, e);
1275
1.68k
                if (mutate)
1276
0
                    pos.each_left(dec_visitor{}, idx);
1277
1.68k
                pos.copy_sizes(
1278
1.68k
                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
1279
1.68k
                std::copy(node->inner() + idx + 1,
1280
1.68k
                          node->inner() + count,
1281
1.68k
                          newn->inner() + 1);
1282
1.68k
                newn->inner()[0] = get<1>(subs);
1283
1.68k
                newr->d.sizes[0] = new_child_size;
1284
1.68k
                newr->d.count    = newcount;
1285
1.68k
                assert(new_child_size);
1286
1.68k
                if (!mutate) {
1287
1.68k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1288
1.68k
                    if (Mutating)
1289
0
                        pos.visit(dec_visitor{});
1290
1.68k
                }
1291
1.68k
                return std::make_tuple(pos.shift(), newn);
1292
1.68k
            }
1293
1.68k
            IMMER_CATCH (...) {
1294
0
                if (!mutate)
1295
0
                    node_t::delete_inner_r_e(newn);
1296
0
                IMMER_RETHROW;
1297
0
            }
1298
1.68k
        }
1299
2.71k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, true>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1246
187k
    {
1247
187k
        auto idx                = pos.subindex(first);
1248
187k
        auto count              = pos.count();
1249
187k
        auto node               = pos.node();
1250
187k
        auto mutate             = Mutating && node->can_mutate(e);
1251
187k
        auto left_size          = pos.size_before(idx);
1252
187k
        auto child_size         = pos.size_sbh(idx, left_size);
1253
187k
        auto dropped_size       = first;
1254
187k
        auto child_dropped_size = dropped_size - left_size;
1255
187k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1256
0
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1257
0
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1258
0
            if (mutate)
1259
0
                pos.visit(dec_left_visitor{}, idx);
1260
0
            else if (Mutating)
1261
0
                pos.visit(dec_visitor{});
1262
0
            return r;
1263
187k
        } else {
1264
187k
            using std::get;
1265
187k
            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
1266
187k
                                   : node_t::make_inner_r_e(e);
1267
187k
            auto newr     = newn->relaxed();
1268
187k
            auto newcount = count - idx;
1269
187k
            auto new_child_size = child_size - child_dropped_size;
1270
187k
            IMMER_TRY {
1271
187k
                auto subs =
1272
187k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1273
187k
                           : pos.towards_sub_oh(
1274
7.46k
                                 no_collapse_no_mut_t{}, first, idx, e);
1275
187k
                if (mutate)
1276
180k
                    pos.each_left(dec_visitor{}, idx);
1277
187k
                pos.copy_sizes(
1278
187k
                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
1279
187k
                std::copy(node->inner() + idx + 1,
1280
187k
                          node->inner() + count,
1281
187k
                          newn->inner() + 1);
1282
187k
                newn->inner()[0] = get<1>(subs);
1283
187k
                newr->d.sizes[0] = new_child_size;
1284
187k
                newr->d.count    = newcount;
1285
187k
                assert(new_child_size);
1286
187k
                if (!mutate) {
1287
7.46k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1288
7.46k
                    if (Mutating)
1289
7.46k
                        pos.visit(dec_visitor{});
1290
7.46k
                }
1291
187k
                return std::make_tuple(pos.shift(), newn);
1292
187k
            }
1293
187k
            IMMER_CATCH (...) {
1294
0
                if (!mutate)
1295
0
                    node_t::delete_inner_r_e(newn);
1296
0
                IMMER_RETHROW;
1297
0
            }
1298
187k
        }
1299
187k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, false>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1246
52.3k
    {
1247
52.3k
        auto idx                = pos.subindex(first);
1248
52.3k
        auto count              = pos.count();
1249
52.3k
        auto node               = pos.node();
1250
52.3k
        auto mutate             = Mutating && node->can_mutate(e);
1251
52.3k
        auto left_size          = pos.size_before(idx);
1252
52.3k
        auto child_size         = pos.size_sbh(idx, left_size);
1253
52.3k
        auto dropped_size       = first;
1254
52.3k
        auto child_dropped_size = dropped_size - left_size;
1255
52.3k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1256
0
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1257
0
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1258
0
            if (mutate)
1259
0
                pos.visit(dec_left_visitor{}, idx);
1260
0
            else if (Mutating)
1261
0
                pos.visit(dec_visitor{});
1262
0
            return r;
1263
52.3k
        } else {
1264
52.3k
            using std::get;
1265
52.3k
            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
1266
52.3k
                                   : node_t::make_inner_r_e(e);
1267
52.3k
            auto newr     = newn->relaxed();
1268
52.3k
            auto newcount = count - idx;
1269
52.3k
            auto new_child_size = child_size - child_dropped_size;
1270
52.3k
            IMMER_TRY {
1271
52.3k
                auto subs =
1272
52.3k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1273
52.3k
                           : pos.towards_sub_oh(
1274
52.3k
                                 no_collapse_no_mut_t{}, first, idx, e);
1275
52.3k
                if (mutate)
1276
0
                    pos.each_left(dec_visitor{}, idx);
1277
52.3k
                pos.copy_sizes(
1278
52.3k
                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
1279
52.3k
                std::copy(node->inner() + idx + 1,
1280
52.3k
                          node->inner() + count,
1281
52.3k
                          newn->inner() + 1);
1282
52.3k
                newn->inner()[0] = get<1>(subs);
1283
52.3k
                newr->d.sizes[0] = new_child_size;
1284
52.3k
                newr->d.count    = newcount;
1285
52.3k
                assert(new_child_size);
1286
52.3k
                if (!mutate) {
1287
52.3k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1288
52.3k
                    if (Mutating)
1289
0
                        pos.visit(dec_visitor{});
1290
52.3k
                }
1291
52.3k
                return std::make_tuple(pos.shift(), newn);
1292
52.3k
            }
1293
52.3k
            IMMER_CATCH (...) {
1294
0
                if (!mutate)
1295
0
                    node_t::delete_inner_r_e(newn);
1296
0
                IMMER_RETHROW;
1297
0
            }
1298
52.3k
        }
1299
52.3k
    }
1300
1301
    template <typename PosT>
1302
    static result_t visit_regular(PosT&& pos, size_t first, edit_t e)
1303
28.5k
    {
1304
28.5k
        auto idx    = pos.subindex(first);
1305
28.5k
        auto count  = pos.count();
1306
28.5k
        auto node   = pos.node();
1307
28.5k
        auto mutate = Mutating
1308
                      // this is more restrictive than actually needed because
1309
                      // it causes the algorithm to also avoid mutating the leaf
1310
                      // in place
1311
17.0k
                      && !node_t::embed_relaxed && node->can_mutate(e);
1312
28.5k
        auto left_size          = pos.size_before(idx);
1313
28.5k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
28.5k
        auto dropped_size       = first;
1315
28.5k
        auto child_dropped_size = dropped_size - left_size;
1316
28.5k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1317
9.13k
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1318
9.13k
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1319
9.13k
            if (mutate)
1320
4.76k
                pos.visit(dec_left_visitor{}, idx);
1321
4.37k
            else if (Mutating)
1322
2.75k
                pos.visit(dec_visitor{});
1323
9.13k
            return r;
1324
19.4k
        } else {
1325
19.4k
            using std::get;
1326
            // if possible, we convert the node to a relaxed one simply by
1327
            // allocating a `relaxed_t` size table for it... maybe some of this
1328
            // magic should be moved as a `node<...>` static method...
1329
19.4k
            auto newcount = count - idx;
1330
19.4k
            auto newn =
1331
19.4k
                mutate ? (node->impl.d.data.inner.relaxed = new (
1332
5.47k
                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
1333
5.47k
                                                     norefs_tag{})) relaxed_t,
1334
5.47k
                          node)
1335
19.4k
                       : node_t::make_inner_r_e(e);
1336
19.4k
            auto newr = newn->relaxed();
1337
19.4k
            IMMER_TRY {
1338
19.4k
                auto subs =
1339
19.4k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
19.4k
                           : pos.towards_sub_oh(
1341
13.9k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
19.4k
                if (mutate)
1343
5.47k
                    pos.each_left(dec_visitor{}, idx);
1344
19.4k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
19.4k
                assert(newr->d.sizes[0]);
1346
19.4k
                pos.copy_sizes(
1347
19.4k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
19.4k
                newr->d.count    = newcount;
1349
19.4k
                newn->inner()[0] = get<1>(subs);
1350
19.4k
                std::copy(node->inner() + idx + 1,
1351
19.4k
                          node->inner() + count,
1352
19.4k
                          newn->inner() + 1);
1353
19.4k
                if (!mutate) {
1354
13.9k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
13.9k
                    if (Mutating)
1356
4.03k
                        pos.visit(dec_visitor{});
1357
13.9k
                }
1358
19.4k
                return std::make_tuple(pos.shift(), newn);
1359
19.4k
            }
1360
19.4k
            IMMER_CATCH (...) {
1361
0
                if (!mutate)
1362
0
                    node_t::delete_inner_r_e(newn);
1363
0
                else {
1364
                    // restore the regular node that we were
1365
                    // attempting to relax...
1366
0
                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
1367
0
                                             node->impl.d.data.inner.relaxed);
1368
0
                    node->impl.d.data.inner.relaxed = nullptr;
1369
0
                }
1370
0
                IMMER_RETHROW;
1371
0
            }
1372
19.4k
        }
1373
28.5k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, false>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1303
2.84k
    {
1304
2.84k
        auto idx    = pos.subindex(first);
1305
2.84k
        auto count  = pos.count();
1306
2.84k
        auto node   = pos.node();
1307
2.84k
        auto mutate = Mutating
1308
                      // this is more restrictive than actually needed because
1309
                      // it causes the algorithm to also avoid mutating the leaf
1310
                      // in place
1311
0
                      && !node_t::embed_relaxed && node->can_mutate(e);
1312
2.84k
        auto left_size          = pos.size_before(idx);
1313
2.84k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
2.84k
        auto dropped_size       = first;
1315
2.84k
        auto child_dropped_size = dropped_size - left_size;
1316
2.84k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1317
1.25k
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1318
1.25k
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1319
1.25k
            if (mutate)
1320
0
                pos.visit(dec_left_visitor{}, idx);
1321
1.25k
            else if (Mutating)
1322
0
                pos.visit(dec_visitor{});
1323
1.25k
            return r;
1324
1.58k
        } else {
1325
1.58k
            using std::get;
1326
            // if possible, we convert the node to a relaxed one simply by
1327
            // allocating a `relaxed_t` size table for it... maybe some of this
1328
            // magic should be moved as a `node<...>` static method...
1329
1.58k
            auto newcount = count - idx;
1330
1.58k
            auto newn =
1331
1.58k
                mutate ? (node->impl.d.data.inner.relaxed = new (
1332
0
                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
1333
0
                                                     norefs_tag{})) relaxed_t,
1334
0
                          node)
1335
1.58k
                       : node_t::make_inner_r_e(e);
1336
1.58k
            auto newr = newn->relaxed();
1337
1.58k
            IMMER_TRY {
1338
1.58k
                auto subs =
1339
1.58k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
1.58k
                           : pos.towards_sub_oh(
1341
1.58k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
1.58k
                if (mutate)
1343
0
                    pos.each_left(dec_visitor{}, idx);
1344
1.58k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
1.58k
                assert(newr->d.sizes[0]);
1346
1.58k
                pos.copy_sizes(
1347
1.58k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
1.58k
                newr->d.count    = newcount;
1349
1.58k
                newn->inner()[0] = get<1>(subs);
1350
1.58k
                std::copy(node->inner() + idx + 1,
1351
1.58k
                          node->inner() + count,
1352
1.58k
                          newn->inner() + 1);
1353
1.58k
                if (!mutate) {
1354
1.58k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
1.58k
                    if (Mutating)
1356
0
                        pos.visit(dec_visitor{});
1357
1.58k
                }
1358
1.58k
                return std::make_tuple(pos.shift(), newn);
1359
1.58k
            }
1360
1.58k
            IMMER_CATCH (...) {
1361
0
                if (!mutate)
1362
0
                    node_t::delete_inner_r_e(newn);
1363
0
                else {
1364
                    // restore the regular node that we were
1365
                    // attempting to relax...
1366
0
                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
1367
0
                                             node->impl.d.data.inner.relaxed);
1368
0
                    node->impl.d.data.inner.relaxed = nullptr;
1369
0
                }
1370
0
                IMMER_RETHROW;
1371
0
            }
1372
1.58k
        }
1373
2.84k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, false>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1303
3.28k
    {
1304
3.28k
        auto idx    = pos.subindex(first);
1305
3.28k
        auto count  = pos.count();
1306
3.28k
        auto node   = pos.node();
1307
3.28k
        auto mutate = Mutating
1308
                      // this is more restrictive than actually needed because
1309
                      // it causes the algorithm to also avoid mutating the leaf
1310
                      // in place
1311
0
                      && !node_t::embed_relaxed && node->can_mutate(e);
1312
3.28k
        auto left_size          = pos.size_before(idx);
1313
3.28k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
3.28k
        auto dropped_size       = first;
1315
3.28k
        auto child_dropped_size = dropped_size - left_size;
1316
3.28k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1317
364
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1318
364
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1319
364
            if (mutate)
1320
0
                pos.visit(dec_left_visitor{}, idx);
1321
364
            else if (Mutating)
1322
0
                pos.visit(dec_visitor{});
1323
364
            return r;
1324
2.92k
        } else {
1325
2.92k
            using std::get;
1326
            // if possible, we convert the node to a relaxed one simply by
1327
            // allocating a `relaxed_t` size table for it... maybe some of this
1328
            // magic should be moved as a `node<...>` static method...
1329
2.92k
            auto newcount = count - idx;
1330
2.92k
            auto newn =
1331
2.92k
                mutate ? (node->impl.d.data.inner.relaxed = new (
1332
0
                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
1333
0
                                                     norefs_tag{})) relaxed_t,
1334
0
                          node)
1335
2.92k
                       : node_t::make_inner_r_e(e);
1336
2.92k
            auto newr = newn->relaxed();
1337
2.92k
            IMMER_TRY {
1338
2.92k
                auto subs =
1339
2.92k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
2.92k
                           : pos.towards_sub_oh(
1341
2.92k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
2.92k
                if (mutate)
1343
0
                    pos.each_left(dec_visitor{}, idx);
1344
2.92k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
2.92k
                assert(newr->d.sizes[0]);
1346
2.92k
                pos.copy_sizes(
1347
2.92k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
2.92k
                newr->d.count    = newcount;
1349
2.92k
                newn->inner()[0] = get<1>(subs);
1350
2.92k
                std::copy(node->inner() + idx + 1,
1351
2.92k
                          node->inner() + count,
1352
2.92k
                          newn->inner() + 1);
1353
2.92k
                if (!mutate) {
1354
2.92k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
2.92k
                    if (Mutating)
1356
0
                        pos.visit(dec_visitor{});
1357
2.92k
                }
1358
2.92k
                return std::make_tuple(pos.shift(), newn);
1359
2.92k
            }
1360
2.92k
            IMMER_CATCH (...) {
1361
0
                if (!mutate)
1362
0
                    node_t::delete_inner_r_e(newn);
1363
0
                else {
1364
                    // restore the regular node that we were
1365
                    // attempting to relax...
1366
0
                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
1367
0
                                             node->impl.d.data.inner.relaxed);
1368
0
                    node->impl.d.data.inner.relaxed = nullptr;
1369
0
                }
1370
0
                IMMER_RETHROW;
1371
0
            }
1372
2.92k
        }
1373
3.28k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, true>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1303
2.24k
    {
1304
2.24k
        auto idx    = pos.subindex(first);
1305
2.24k
        auto count  = pos.count();
1306
2.24k
        auto node   = pos.node();
1307
2.24k
        auto mutate = Mutating
1308
                      // this is more restrictive than actually needed because
1309
                      // it causes the algorithm to also avoid mutating the leaf
1310
                      // in place
1311
2.24k
                      && !node_t::embed_relaxed && node->can_mutate(e);
1312
2.24k
        auto left_size          = pos.size_before(idx);
1313
2.24k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
2.24k
        auto dropped_size       = first;
1315
2.24k
        auto child_dropped_size = dropped_size - left_size;
1316
2.24k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1317
0
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1318
0
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1319
0
            if (mutate)
1320
0
                pos.visit(dec_left_visitor{}, idx);
1321
0
            else if (Mutating)
1322
0
                pos.visit(dec_visitor{});
1323
0
            return r;
1324
2.24k
        } else {
1325
2.24k
            using std::get;
1326
            // if possible, we convert the node to a relaxed one simply by
1327
            // allocating a `relaxed_t` size table for it... maybe some of this
1328
            // magic should be moved as a `node<...>` static method...
1329
2.24k
            auto newcount = count - idx;
1330
2.24k
            auto newn =
1331
2.24k
                mutate ? (node->impl.d.data.inner.relaxed = new (
1332
980
                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
1333
980
                                                     norefs_tag{})) relaxed_t,
1334
980
                          node)
1335
2.24k
                       : node_t::make_inner_r_e(e);
1336
2.24k
            auto newr = newn->relaxed();
1337
2.24k
            IMMER_TRY {
1338
2.24k
                auto subs =
1339
2.24k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
2.24k
                           : pos.towards_sub_oh(
1341
1.26k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
2.24k
                if (mutate)
1343
980
                    pos.each_left(dec_visitor{}, idx);
1344
2.24k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
2.24k
                assert(newr->d.sizes[0]);
1346
2.24k
                pos.copy_sizes(
1347
2.24k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
2.24k
                newr->d.count    = newcount;
1349
2.24k
                newn->inner()[0] = get<1>(subs);
1350
2.24k
                std::copy(node->inner() + idx + 1,
1351
2.24k
                          node->inner() + count,
1352
2.24k
                          newn->inner() + 1);
1353
2.24k
                if (!mutate) {
1354
1.26k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
1.26k
                    if (Mutating)
1356
1.26k
                        pos.visit(dec_visitor{});
1357
1.26k
                }
1358
2.24k
                return std::make_tuple(pos.shift(), newn);
1359
2.24k
            }
1360
2.24k
            IMMER_CATCH (...) {
1361
0
                if (!mutate)
1362
0
                    node_t::delete_inner_r_e(newn);
1363
0
                else {
1364
                    // restore the regular node that we were
1365
                    // attempting to relax...
1366
0
                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
1367
0
                                             node->impl.d.data.inner.relaxed);
1368
0
                    node->impl.d.data.inner.relaxed = nullptr;
1369
0
                }
1370
0
                IMMER_RETHROW;
1371
0
            }
1372
2.24k
        }
1373
2.24k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, false>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1303
3.39k
    {
1304
3.39k
        auto idx    = pos.subindex(first);
1305
3.39k
        auto count  = pos.count();
1306
3.39k
        auto node   = pos.node();
1307
3.39k
        auto mutate = Mutating
1308
                      // this is more restrictive than actually needed because
1309
                      // it causes the algorithm to also avoid mutating the leaf
1310
                      // in place
1311
0
                      && !node_t::embed_relaxed && node->can_mutate(e);
1312
3.39k
        auto left_size          = pos.size_before(idx);
1313
3.39k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
3.39k
        auto dropped_size       = first;
1315
3.39k
        auto child_dropped_size = dropped_size - left_size;
1316
3.39k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1317
0
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1318
0
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1319
0
            if (mutate)
1320
0
                pos.visit(dec_left_visitor{}, idx);
1321
0
            else if (Mutating)
1322
0
                pos.visit(dec_visitor{});
1323
0
            return r;
1324
3.39k
        } else {
1325
3.39k
            using std::get;
1326
            // if possible, we convert the node to a relaxed one simply by
1327
            // allocating a `relaxed_t` size table for it... maybe some of this
1328
            // magic should be moved as a `node<...>` static method...
1329
3.39k
            auto newcount = count - idx;
1330
3.39k
            auto newn =
1331
3.39k
                mutate ? (node->impl.d.data.inner.relaxed = new (
1332
0
                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
1333
0
                                                     norefs_tag{})) relaxed_t,
1334
0
                          node)
1335
3.39k
                       : node_t::make_inner_r_e(e);
1336
3.39k
            auto newr = newn->relaxed();
1337
3.39k
            IMMER_TRY {
1338
3.39k
                auto subs =
1339
3.39k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
3.39k
                           : pos.towards_sub_oh(
1341
3.39k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
3.39k
                if (mutate)
1343
0
                    pos.each_left(dec_visitor{}, idx);
1344
3.39k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
3.39k
                assert(newr->d.sizes[0]);
1346
3.39k
                pos.copy_sizes(
1347
3.39k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
3.39k
                newr->d.count    = newcount;
1349
3.39k
                newn->inner()[0] = get<1>(subs);
1350
3.39k
                std::copy(node->inner() + idx + 1,
1351
3.39k
                          node->inner() + count,
1352
3.39k
                          newn->inner() + 1);
1353
3.39k
                if (!mutate) {
1354
3.39k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
3.39k
                    if (Mutating)
1356
0
                        pos.visit(dec_visitor{});
1357
3.39k
                }
1358
3.39k
                return std::make_tuple(pos.shift(), newn);
1359
3.39k
            }
1360
3.39k
            IMMER_CATCH (...) {
1361
0
                if (!mutate)
1362
0
                    node_t::delete_inner_r_e(newn);
1363
0
                else {
1364
                    // restore the regular node that we were
1365
                    // attempting to relax...
1366
0
                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
1367
0
                                             node->impl.d.data.inner.relaxed);
1368
0
                    node->impl.d.data.inner.relaxed = nullptr;
1369
0
                }
1370
0
                IMMER_RETHROW;
1371
0
            }
1372
3.39k
        }
1373
3.39k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1303
1.45k
    {
1304
1.45k
        auto idx    = pos.subindex(first);
1305
1.45k
        auto count  = pos.count();
1306
1.45k
        auto node   = pos.node();
1307
1.45k
        auto mutate = Mutating
1308
                      // this is more restrictive than actually needed because
1309
                      // it causes the algorithm to also avoid mutating the leaf
1310
                      // in place
1311
1.45k
                      && !node_t::embed_relaxed && node->can_mutate(e);
1312
1.45k
        auto left_size          = pos.size_before(idx);
1313
1.45k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
1.45k
        auto dropped_size       = first;
1315
1.45k
        auto child_dropped_size = dropped_size - left_size;
1316
1.45k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1317
0
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1318
0
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1319
0
            if (mutate)
1320
0
                pos.visit(dec_left_visitor{}, idx);
1321
0
            else if (Mutating)
1322
0
                pos.visit(dec_visitor{});
1323
0
            return r;
1324
1.45k
        } else {
1325
1.45k
            using std::get;
1326
            // if possible, we convert the node to a relaxed one simply by
1327
            // allocating a `relaxed_t` size table for it... maybe some of this
1328
            // magic should be moved as a `node<...>` static method...
1329
1.45k
            auto newcount = count - idx;
1330
1.45k
            auto newn =
1331
1.45k
                mutate ? (node->impl.d.data.inner.relaxed = new (
1332
460
                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
1333
460
                                                     norefs_tag{})) relaxed_t,
1334
460
                          node)
1335
1.45k
                       : node_t::make_inner_r_e(e);
1336
1.45k
            auto newr = newn->relaxed();
1337
1.45k
            IMMER_TRY {
1338
1.45k
                auto subs =
1339
1.45k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
1.45k
                           : pos.towards_sub_oh(
1341
998
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
1.45k
                if (mutate)
1343
460
                    pos.each_left(dec_visitor{}, idx);
1344
1.45k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
1.45k
                assert(newr->d.sizes[0]);
1346
1.45k
                pos.copy_sizes(
1347
1.45k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
1.45k
                newr->d.count    = newcount;
1349
1.45k
                newn->inner()[0] = get<1>(subs);
1350
1.45k
                std::copy(node->inner() + idx + 1,
1351
1.45k
                          node->inner() + count,
1352
1.45k
                          newn->inner() + 1);
1353
1.45k
                if (!mutate) {
1354
998
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
998
                    if (Mutating)
1356
998
                        pos.visit(dec_visitor{});
1357
998
                }
1358
1.45k
                return std::make_tuple(pos.shift(), newn);
1359
1.45k
            }
1360
1.45k
            IMMER_CATCH (...) {
1361
0
                if (!mutate)
1362
0
                    node_t::delete_inner_r_e(newn);
1363
0
                else {
1364
                    // restore the regular node that we were
1365
                    // attempting to relax...
1366
0
                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
1367
0
                                             node->impl.d.data.inner.relaxed);
1368
0
                    node->impl.d.data.inner.relaxed = nullptr;
1369
0
                }
1370
0
                IMMER_RETHROW;
1371
0
            }
1372
1.45k
        }
1373
1.45k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, false>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1303
2.05k
    {
1304
2.05k
        auto idx    = pos.subindex(first);
1305
2.05k
        auto count  = pos.count();
1306
2.05k
        auto node   = pos.node();
1307
2.05k
        auto mutate = Mutating
1308
                      // this is more restrictive than actually needed because
1309
                      // it causes the algorithm to also avoid mutating the leaf
1310
                      // in place
1311
0
                      && !node_t::embed_relaxed && node->can_mutate(e);
1312
2.05k
        auto left_size          = pos.size_before(idx);
1313
2.05k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
2.05k
        auto dropped_size       = first;
1315
2.05k
        auto child_dropped_size = dropped_size - left_size;
1316
2.05k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1317
0
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1318
0
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1319
0
            if (mutate)
1320
0
                pos.visit(dec_left_visitor{}, idx);
1321
0
            else if (Mutating)
1322
0
                pos.visit(dec_visitor{});
1323
0
            return r;
1324
2.05k
        } else {
1325
2.05k
            using std::get;
1326
            // if possible, we convert the node to a relaxed one simply by
1327
            // allocating a `relaxed_t` size table for it... maybe some of this
1328
            // magic should be moved as a `node<...>` static method...
1329
2.05k
            auto newcount = count - idx;
1330
2.05k
            auto newn =
1331
2.05k
                mutate ? (node->impl.d.data.inner.relaxed = new (
1332
0
                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
1333
0
                                                     norefs_tag{})) relaxed_t,
1334
0
                          node)
1335
2.05k
                       : node_t::make_inner_r_e(e);
1336
2.05k
            auto newr = newn->relaxed();
1337
2.05k
            IMMER_TRY {
1338
2.05k
                auto subs =
1339
2.05k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
2.05k
                           : pos.towards_sub_oh(
1341
2.05k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
2.05k
                if (mutate)
1343
0
                    pos.each_left(dec_visitor{}, idx);
1344
2.05k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
2.05k
                assert(newr->d.sizes[0]);
1346
2.05k
                pos.copy_sizes(
1347
2.05k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
2.05k
                newr->d.count    = newcount;
1349
2.05k
                newn->inner()[0] = get<1>(subs);
1350
2.05k
                std::copy(node->inner() + idx + 1,
1351
2.05k
                          node->inner() + count,
1352
2.05k
                          newn->inner() + 1);
1353
2.05k
                if (!mutate) {
1354
2.05k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
2.05k
                    if (Mutating)
1356
0
                        pos.visit(dec_visitor{});
1357
2.05k
                }
1358
2.05k
                return std::make_tuple(pos.shift(), newn);
1359
2.05k
            }
1360
2.05k
            IMMER_CATCH (...) {
1361
0
                if (!mutate)
1362
0
                    node_t::delete_inner_r_e(newn);
1363
0
                else {
1364
                    // restore the regular node that we were
1365
                    // attempting to relax...
1366
0
                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
1367
0
                                             node->impl.d.data.inner.relaxed);
1368
0
                    node->impl.d.data.inner.relaxed = nullptr;
1369
0
                }
1370
0
                IMMER_RETHROW;
1371
0
            }
1372
2.05k
        }
1373
2.05k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1303
9.65k
    {
1304
9.65k
        auto idx    = pos.subindex(first);
1305
9.65k
        auto count  = pos.count();
1306
9.65k
        auto node   = pos.node();
1307
9.65k
        auto mutate = Mutating
1308
                      // this is more restrictive than actually needed because
1309
                      // it causes the algorithm to also avoid mutating the leaf
1310
                      // in place
1311
9.65k
                      && !node_t::embed_relaxed && node->can_mutate(e);
1312
9.65k
        auto left_size          = pos.size_before(idx);
1313
9.65k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
9.65k
        auto dropped_size       = first;
1315
9.65k
        auto child_dropped_size = dropped_size - left_size;
1316
9.65k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1317
5.57k
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1318
5.57k
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1319
5.57k
            if (mutate)
1320
4.45k
                pos.visit(dec_left_visitor{}, idx);
1321
1.12k
            else if (Mutating)
1322
1.12k
                pos.visit(dec_visitor{});
1323
5.57k
            return r;
1324
5.57k
        } else {
1325
4.07k
            using std::get;
1326
            // if possible, we convert the node to a relaxed one simply by
1327
            // allocating a `relaxed_t` size table for it... maybe some of this
1328
            // magic should be moved as a `node<...>` static method...
1329
4.07k
            auto newcount = count - idx;
1330
4.07k
            auto newn =
1331
4.07k
                mutate ? (node->impl.d.data.inner.relaxed = new (
1332
2.91k
                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
1333
2.91k
                                                     norefs_tag{})) relaxed_t,
1334
2.91k
                          node)
1335
4.07k
                       : node_t::make_inner_r_e(e);
1336
4.07k
            auto newr = newn->relaxed();
1337
4.07k
            IMMER_TRY {
1338
4.07k
                auto subs =
1339
4.07k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
4.07k
                           : pos.towards_sub_oh(
1341
1.16k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
4.07k
                if (mutate)
1343
2.91k
                    pos.each_left(dec_visitor{}, idx);
1344
4.07k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
4.07k
                assert(newr->d.sizes[0]);
1346
4.07k
                pos.copy_sizes(
1347
4.07k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
4.07k
                newr->d.count    = newcount;
1349
4.07k
                newn->inner()[0] = get<1>(subs);
1350
4.07k
                std::copy(node->inner() + idx + 1,
1351
4.07k
                          node->inner() + count,
1352
4.07k
                          newn->inner() + 1);
1353
4.07k
                if (!mutate) {
1354
1.16k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
1.16k
                    if (Mutating)
1356
1.16k
                        pos.visit(dec_visitor{});
1357
1.16k
                }
1358
4.07k
                return std::make_tuple(pos.shift(), newn);
1359
4.07k
            }
1360
4.07k
            IMMER_CATCH (...) {
1361
0
                if (!mutate)
1362
0
                    node_t::delete_inner_r_e(newn);
1363
0
                else {
1364
                    // restore the regular node that we were
1365
                    // attempting to relax...
1366
0
                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
1367
0
                                             node->impl.d.data.inner.relaxed);
1368
0
                    node->impl.d.data.inner.relaxed = nullptr;
1369
0
                }
1370
0
                IMMER_RETHROW;
1371
0
            }
1372
4.07k
        }
1373
9.65k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, true>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1303
3.67k
    {
1304
3.67k
        auto idx    = pos.subindex(first);
1305
3.67k
        auto count  = pos.count();
1306
3.67k
        auto node   = pos.node();
1307
3.67k
        auto mutate = Mutating
1308
                      // this is more restrictive than actually needed because
1309
                      // it causes the algorithm to also avoid mutating the leaf
1310
                      // in place
1311
3.67k
                      && !node_t::embed_relaxed && node->can_mutate(e);
1312
3.67k
        auto left_size          = pos.size_before(idx);
1313
3.67k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
3.67k
        auto dropped_size       = first;
1315
3.67k
        auto child_dropped_size = dropped_size - left_size;
1316
3.67k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1317
1.93k
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1318
1.93k
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1319
1.93k
            if (mutate)
1320
311
                pos.visit(dec_left_visitor{}, idx);
1321
1.62k
            else if (Mutating)
1322
1.62k
                pos.visit(dec_visitor{});
1323
1.93k
            return r;
1324
1.93k
        } else {
1325
1.73k
            using std::get;
1326
            // if possible, we convert the node to a relaxed one simply by
1327
            // allocating a `relaxed_t` size table for it... maybe some of this
1328
            // magic should be moved as a `node<...>` static method...
1329
1.73k
            auto newcount = count - idx;
1330
1.73k
            auto newn =
1331
1.73k
                mutate ? (node->impl.d.data.inner.relaxed = new (
1332
1.12k
                              node_t::heap::allocate(node_t::max_sizeof_relaxed,
1333
1.12k
                                                     norefs_tag{})) relaxed_t,
1334
1.12k
                          node)
1335
1.73k
                       : node_t::make_inner_r_e(e);
1336
1.73k
            auto newr = newn->relaxed();
1337
1.73k
            IMMER_TRY {
1338
1.73k
                auto subs =
1339
1.73k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
1.73k
                           : pos.towards_sub_oh(
1341
612
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
1.73k
                if (mutate)
1343
1.12k
                    pos.each_left(dec_visitor{}, idx);
1344
1.73k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
1.73k
                assert(newr->d.sizes[0]);
1346
1.73k
                pos.copy_sizes(
1347
1.73k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
1.73k
                newr->d.count    = newcount;
1349
1.73k
                newn->inner()[0] = get<1>(subs);
1350
1.73k
                std::copy(node->inner() + idx + 1,
1351
1.73k
                          node->inner() + count,
1352
1.73k
                          newn->inner() + 1);
1353
1.73k
                if (!mutate) {
1354
612
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
612
                    if (Mutating)
1356
612
                        pos.visit(dec_visitor{});
1357
612
                }
1358
1.73k
                return std::make_tuple(pos.shift(), newn);
1359
1.73k
            }
1360
1.73k
            IMMER_CATCH (...) {
1361
0
                if (!mutate)
1362
0
                    node_t::delete_inner_r_e(newn);
1363
0
                else {
1364
                    // restore the regular node that we were
1365
                    // attempting to relax...
1366
0
                    node_t::heap::deallocate(node_t::max_sizeof_relaxed,
1367
0
                                             node->impl.d.data.inner.relaxed);
1368
0
                    node->impl.d.data.inner.relaxed = nullptr;
1369
0
                }
1370
0
                IMMER_RETHROW;
1371
0
            }
1372
1.73k
        }
1373
3.67k
    }
1374
1375
    template <typename PosT>
1376
    static result_t visit_leaf(PosT&& pos, size_t first, edit_t e)
1377
40.4k
    {
1378
40.4k
        auto node   = pos.node();
1379
40.4k
        auto idx    = pos.index(first);
1380
40.4k
        auto count  = pos.count();
1381
40.4k
        auto mutate = Mutating &&
1382
0
                      std::is_nothrow_move_constructible<value_t>::value &&
1383
16.4k
                      node->can_mutate(e);
1384
40.4k
        if (mutate) {
1385
9.72k
            auto data     = node->leaf();
1386
9.72k
            auto newcount = count - idx;
1387
9.72k
            std::move(data + idx, data + count, data);
1388
9.72k
            detail::destroy_n(data + newcount, idx);
1389
9.72k
            return std::make_tuple(0, node);
1390
30.7k
        } else {
1391
30.7k
            auto newn = node_t::copy_leaf_e(e, node, idx, count);
1392
30.7k
            if (Mutating)
1393
6.73k
                pos.visit(dec_visitor{});
1394
30.7k
            return std::make_tuple(0, newn);
1395
30.7k
        }
1396
40.4k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1377
687
    {
1378
687
        auto node   = pos.node();
1379
687
        auto idx    = pos.index(first);
1380
687
        auto count  = pos.count();
1381
687
        auto mutate = Mutating &&
1382
0
                      std::is_nothrow_move_constructible<value_t>::value &&
1383
687
                      node->can_mutate(e);
1384
687
        if (mutate) {
1385
439
            auto data     = node->leaf();
1386
439
            auto newcount = count - idx;
1387
439
            std::move(data + idx, data + count, data);
1388
439
            detail::destroy_n(data + newcount, idx);
1389
439
            return std::make_tuple(0, node);
1390
439
        } else {
1391
248
            auto newn = node_t::copy_leaf_e(e, node, idx, count);
1392
248
            if (Mutating)
1393
248
                pos.visit(dec_visitor{});
1394
248
            return std::make_tuple(0, newn);
1395
248
        }
1396
687
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, false>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, true>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1377
3.23k
    {
1378
3.23k
        auto node   = pos.node();
1379
3.23k
        auto idx    = pos.index(first);
1380
3.23k
        auto count  = pos.count();
1381
3.23k
        auto mutate = Mutating &&
1382
0
                      std::is_nothrow_move_constructible<value_t>::value &&
1383
3.23k
                      node->can_mutate(e);
1384
3.23k
        if (mutate) {
1385
613
            auto data     = node->leaf();
1386
613
            auto newcount = count - idx;
1387
613
            std::move(data + idx, data + count, data);
1388
613
            detail::destroy_n(data + newcount, idx);
1389
613
            return std::make_tuple(0, node);
1390
2.62k
        } else {
1391
2.62k
            auto newn = node_t::copy_leaf_e(e, node, idx, count);
1392
2.62k
            if (Mutating)
1393
2.62k
                pos.visit(dec_visitor{});
1394
2.62k
            return std::make_tuple(0, newn);
1395
2.62k
        }
1396
3.23k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, false>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1377
10.5k
    {
1378
10.5k
        auto node   = pos.node();
1379
10.5k
        auto idx    = pos.index(first);
1380
10.5k
        auto count  = pos.count();
1381
10.5k
        auto mutate = Mutating &&
1382
0
                      std::is_nothrow_move_constructible<value_t>::value &&
1383
0
                      node->can_mutate(e);
1384
10.5k
        if (mutate) {
1385
0
            auto data     = node->leaf();
1386
0
            auto newcount = count - idx;
1387
0
            std::move(data + idx, data + count, data);
1388
0
            detail::destroy_n(data + newcount, idx);
1389
0
            return std::make_tuple(0, node);
1390
10.5k
        } else {
1391
10.5k
            auto newn = node_t::copy_leaf_e(e, node, idx, count);
1392
10.5k
            if (Mutating)
1393
0
                pos.visit(dec_visitor{});
1394
10.5k
            return std::make_tuple(0, newn);
1395
10.5k
        }
1396
10.5k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1377
12.5k
    {
1378
12.5k
        auto node   = pos.node();
1379
12.5k
        auto idx    = pos.index(first);
1380
12.5k
        auto count  = pos.count();
1381
12.5k
        auto mutate = Mutating &&
1382
0
                      std::is_nothrow_move_constructible<value_t>::value &&
1383
12.5k
                      node->can_mutate(e);
1384
12.5k
        if (mutate) {
1385
8.66k
            auto data     = node->leaf();
1386
8.66k
            auto newcount = count - idx;
1387
8.66k
            std::move(data + idx, data + count, data);
1388
8.66k
            detail::destroy_n(data + newcount, idx);
1389
8.66k
            return std::make_tuple(0, node);
1390
8.66k
        } else {
1391
3.87k
            auto newn = node_t::copy_leaf_e(e, node, idx, count);
1392
3.87k
            if (Mutating)
1393
3.87k
                pos.visit(dec_visitor{});
1394
3.87k
            return std::make_tuple(0, newn);
1395
3.87k
        }
1396
12.5k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Line
Count
Source
1377
13.4k
    {
1378
13.4k
        auto node   = pos.node();
1379
13.4k
        auto idx    = pos.index(first);
1380
13.4k
        auto count  = pos.count();
1381
13.4k
        auto mutate = Mutating &&
1382
0
                      std::is_nothrow_move_constructible<value_t>::value &&
1383
0
                      node->can_mutate(e);
1384
13.4k
        if (mutate) {
1385
0
            auto data     = node->leaf();
1386
0
            auto newcount = count - idx;
1387
0
            std::move(data + idx, data + count, data);
1388
0
            detail::destroy_n(data + newcount, idx);
1389
0
            return std::make_tuple(0, node);
1390
13.4k
        } else {
1391
13.4k
            auto newn = node_t::copy_leaf_e(e, node, idx, count);
1392
13.4k
            if (Mutating)
1393
0
                pos.visit(dec_visitor{});
1394
13.4k
            return std::make_tuple(0, newn);
1395
13.4k
        }
1396
13.4k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true, true>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
1397
};
1398
1399
template <typename NodeT, bool Collapse = true>
1400
struct slice_left_visitor : visitor_base<slice_left_visitor<NodeT, Collapse>>
1401
{
1402
    using node_t = NodeT;
1403
    using this_t = slice_left_visitor;
1404
1405
    // returns a new shift and new root
1406
    using result_t      = std::tuple<shift_t, NodeT*>;
1407
    using no_collapse_t = slice_left_visitor<NodeT, false>;
1408
1409
    static constexpr auto B  = NodeT::bits;
1410
    static constexpr auto BL = NodeT::bits_leaf;
1411
1412
    template <typename PosT>
1413
    static result_t visit_inner(PosT&& pos, size_t first)
1414
82.1k
    {
1415
82.1k
        auto idx                = pos.subindex(first);
1416
82.1k
        auto count              = pos.count();
1417
82.1k
        auto left_size          = pos.size_before(idx);
1418
82.1k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
82.1k
        auto dropped_size       = first;
1420
82.1k
        auto child_dropped_size = dropped_size - left_size;
1421
82.1k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
8.74k
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
73.3k
        } else {
1424
73.3k
            using std::get;
1425
73.3k
            auto n    = pos.node();
1426
73.3k
            auto newc = count - idx;
1427
73.3k
            auto newn = node_t::make_inner_r_n(newc);
1428
73.3k
            IMMER_TRY {
1429
73.3k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
73.3k
                auto newr     = newn->relaxed();
1431
73.3k
                newr->d.count = count - idx;
1432
73.3k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
73.3k
                assert(newr->d.sizes[0]);
1434
73.3k
                pos.copy_sizes(idx + 1,
1435
73.3k
                               newr->d.count - 1,
1436
73.3k
                               newr->d.sizes[0],
1437
73.3k
                               newr->d.sizes + 1);
1438
73.3k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
73.3k
                       pos.size() - dropped_size);
1440
73.3k
                newn->inner()[0] = get<1>(subs);
1441
73.3k
                std::copy(n->inner() + idx + 1,
1442
73.3k
                          n->inner() + count,
1443
73.3k
                          newn->inner() + 1);
1444
73.3k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
73.3k
                return std::make_tuple(pos.shift(), newn);
1446
73.3k
            }
1447
73.3k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
73.3k
        }
1452
82.1k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1414
15.5k
    {
1415
15.5k
        auto idx                = pos.subindex(first);
1416
15.5k
        auto count              = pos.count();
1417
15.5k
        auto left_size          = pos.size_before(idx);
1418
15.5k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
15.5k
        auto dropped_size       = first;
1420
15.5k
        auto child_dropped_size = dropped_size - left_size;
1421
15.5k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
4.66k
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
10.8k
        } else {
1424
10.8k
            using std::get;
1425
10.8k
            auto n    = pos.node();
1426
10.8k
            auto newc = count - idx;
1427
10.8k
            auto newn = node_t::make_inner_r_n(newc);
1428
10.8k
            IMMER_TRY {
1429
10.8k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
10.8k
                auto newr     = newn->relaxed();
1431
10.8k
                newr->d.count = count - idx;
1432
10.8k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
10.8k
                assert(newr->d.sizes[0]);
1434
10.8k
                pos.copy_sizes(idx + 1,
1435
10.8k
                               newr->d.count - 1,
1436
10.8k
                               newr->d.sizes[0],
1437
10.8k
                               newr->d.sizes + 1);
1438
10.8k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
10.8k
                       pos.size() - dropped_size);
1440
10.8k
                newn->inner()[0] = get<1>(subs);
1441
10.8k
                std::copy(n->inner() + idx + 1,
1442
10.8k
                          n->inner() + count,
1443
10.8k
                          newn->inner() + 1);
1444
10.8k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
10.8k
                return std::make_tuple(pos.shift(), newn);
1446
10.8k
            }
1447
10.8k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
10.8k
        }
1452
15.5k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1414
46.2k
    {
1415
46.2k
        auto idx                = pos.subindex(first);
1416
46.2k
        auto count              = pos.count();
1417
46.2k
        auto left_size          = pos.size_before(idx);
1418
46.2k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
46.2k
        auto dropped_size       = first;
1420
46.2k
        auto child_dropped_size = dropped_size - left_size;
1421
46.2k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
0
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
46.2k
        } else {
1424
46.2k
            using std::get;
1425
46.2k
            auto n    = pos.node();
1426
46.2k
            auto newc = count - idx;
1427
46.2k
            auto newn = node_t::make_inner_r_n(newc);
1428
46.2k
            IMMER_TRY {
1429
46.2k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
46.2k
                auto newr     = newn->relaxed();
1431
46.2k
                newr->d.count = count - idx;
1432
46.2k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
46.2k
                assert(newr->d.sizes[0]);
1434
46.2k
                pos.copy_sizes(idx + 1,
1435
46.2k
                               newr->d.count - 1,
1436
46.2k
                               newr->d.sizes[0],
1437
46.2k
                               newr->d.sizes + 1);
1438
46.2k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
46.2k
                       pos.size() - dropped_size);
1440
46.2k
                newn->inner()[0] = get<1>(subs);
1441
46.2k
                std::copy(n->inner() + idx + 1,
1442
46.2k
                          n->inner() + count,
1443
46.2k
                          newn->inner() + 1);
1444
46.2k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
46.2k
                return std::make_tuple(pos.shift(), newn);
1446
46.2k
            }
1447
46.2k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
46.2k
        }
1452
46.2k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1414
2.21k
    {
1415
2.21k
        auto idx                = pos.subindex(first);
1416
2.21k
        auto count              = pos.count();
1417
2.21k
        auto left_size          = pos.size_before(idx);
1418
2.21k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
2.21k
        auto dropped_size       = first;
1420
2.21k
        auto child_dropped_size = dropped_size - left_size;
1421
2.21k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
0
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
2.21k
        } else {
1424
2.21k
            using std::get;
1425
2.21k
            auto n    = pos.node();
1426
2.21k
            auto newc = count - idx;
1427
2.21k
            auto newn = node_t::make_inner_r_n(newc);
1428
2.21k
            IMMER_TRY {
1429
2.21k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
2.21k
                auto newr     = newn->relaxed();
1431
2.21k
                newr->d.count = count - idx;
1432
2.21k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
2.21k
                assert(newr->d.sizes[0]);
1434
2.21k
                pos.copy_sizes(idx + 1,
1435
2.21k
                               newr->d.count - 1,
1436
2.21k
                               newr->d.sizes[0],
1437
2.21k
                               newr->d.sizes + 1);
1438
2.21k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
2.21k
                       pos.size() - dropped_size);
1440
2.21k
                newn->inner()[0] = get<1>(subs);
1441
2.21k
                std::copy(n->inner() + idx + 1,
1442
2.21k
                          n->inner() + count,
1443
2.21k
                          newn->inner() + 1);
1444
2.21k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
2.21k
                return std::make_tuple(pos.shift(), newn);
1446
2.21k
            }
1447
2.21k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
2.21k
        }
1452
2.21k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1414
6.28k
    {
1415
6.28k
        auto idx                = pos.subindex(first);
1416
6.28k
        auto count              = pos.count();
1417
6.28k
        auto left_size          = pos.size_before(idx);
1418
6.28k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
6.28k
        auto dropped_size       = first;
1420
6.28k
        auto child_dropped_size = dropped_size - left_size;
1421
6.28k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
0
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
6.28k
        } else {
1424
6.28k
            using std::get;
1425
6.28k
            auto n    = pos.node();
1426
6.28k
            auto newc = count - idx;
1427
6.28k
            auto newn = node_t::make_inner_r_n(newc);
1428
6.28k
            IMMER_TRY {
1429
6.28k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
6.28k
                auto newr     = newn->relaxed();
1431
6.28k
                newr->d.count = count - idx;
1432
6.28k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
6.28k
                assert(newr->d.sizes[0]);
1434
6.28k
                pos.copy_sizes(idx + 1,
1435
6.28k
                               newr->d.count - 1,
1436
6.28k
                               newr->d.sizes[0],
1437
6.28k
                               newr->d.sizes + 1);
1438
6.28k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
6.28k
                       pos.size() - dropped_size);
1440
6.28k
                newn->inner()[0] = get<1>(subs);
1441
6.28k
                std::copy(n->inner() + idx + 1,
1442
6.28k
                          n->inner() + count,
1443
6.28k
                          newn->inner() + 1);
1444
6.28k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
6.28k
                return std::make_tuple(pos.shift(), newn);
1446
6.28k
            }
1447
6.28k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
6.28k
        }
1452
6.28k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1414
10.0k
    {
1415
10.0k
        auto idx                = pos.subindex(first);
1416
10.0k
        auto count              = pos.count();
1417
10.0k
        auto left_size          = pos.size_before(idx);
1418
10.0k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
10.0k
        auto dropped_size       = first;
1420
10.0k
        auto child_dropped_size = dropped_size - left_size;
1421
10.0k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
3.77k
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
6.30k
        } else {
1424
6.30k
            using std::get;
1425
6.30k
            auto n    = pos.node();
1426
6.30k
            auto newc = count - idx;
1427
6.30k
            auto newn = node_t::make_inner_r_n(newc);
1428
6.30k
            IMMER_TRY {
1429
6.30k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
6.30k
                auto newr     = newn->relaxed();
1431
6.30k
                newr->d.count = count - idx;
1432
6.30k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
6.30k
                assert(newr->d.sizes[0]);
1434
6.30k
                pos.copy_sizes(idx + 1,
1435
6.30k
                               newr->d.count - 1,
1436
6.30k
                               newr->d.sizes[0],
1437
6.30k
                               newr->d.sizes + 1);
1438
6.30k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
6.30k
                       pos.size() - dropped_size);
1440
6.30k
                newn->inner()[0] = get<1>(subs);
1441
6.30k
                std::copy(n->inner() + idx + 1,
1442
6.30k
                          n->inner() + count,
1443
6.30k
                          newn->inner() + 1);
1444
6.30k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
6.30k
                return std::make_tuple(pos.shift(), newn);
1446
6.30k
            }
1447
6.30k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
6.30k
        }
1452
10.0k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1414
1.71k
    {
1415
1.71k
        auto idx                = pos.subindex(first);
1416
1.71k
        auto count              = pos.count();
1417
1.71k
        auto left_size          = pos.size_before(idx);
1418
1.71k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
1.71k
        auto dropped_size       = first;
1420
1.71k
        auto child_dropped_size = dropped_size - left_size;
1421
1.71k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
313
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
1.39k
        } else {
1424
1.39k
            using std::get;
1425
1.39k
            auto n    = pos.node();
1426
1.39k
            auto newc = count - idx;
1427
1.39k
            auto newn = node_t::make_inner_r_n(newc);
1428
1.39k
            IMMER_TRY {
1429
1.39k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
1.39k
                auto newr     = newn->relaxed();
1431
1.39k
                newr->d.count = count - idx;
1432
1.39k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
1.39k
                assert(newr->d.sizes[0]);
1434
1.39k
                pos.copy_sizes(idx + 1,
1435
1.39k
                               newr->d.count - 1,
1436
1.39k
                               newr->d.sizes[0],
1437
1.39k
                               newr->d.sizes + 1);
1438
1.39k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
1.39k
                       pos.size() - dropped_size);
1440
1.39k
                newn->inner()[0] = get<1>(subs);
1441
1.39k
                std::copy(n->inner() + idx + 1,
1442
1.39k
                          n->inner() + count,
1443
1.39k
                          newn->inner() + 1);
1444
1.39k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
1.39k
                return std::make_tuple(pos.shift(), newn);
1446
1.39k
            }
1447
1.39k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
1.39k
        }
1452
1.71k
    }
1453
1454
    template <typename PosT>
1455
    static result_t visit_leaf(PosT&& pos, size_t first)
1456
18.5k
    {
1457
18.5k
        auto n = node_t::copy_leaf(pos.node(), pos.index(first), pos.count());
1458
18.5k
        return std::make_tuple(0, n);
1459
18.5k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1456
8.68k
    {
1457
8.68k
        auto n = node_t::copy_leaf(pos.node(), pos.index(first), pos.count());
1458
8.68k
        return std::make_tuple(0, n);
1459
8.68k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, false>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
Line
Count
Source
1456
9.91k
    {
1457
9.91k
        auto n = node_t::copy_leaf(pos.node(), pos.index(first), pos.count());
1458
9.91k
        return std::make_tuple(0, n);
1459
9.91k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, true>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, unsigned long)
1460
};
1461
1462
template <typename Node>
1463
struct concat_center_pos
1464
{
1465
    static constexpr auto B  = Node::bits;
1466
    static constexpr auto BL = Node::bits_leaf;
1467
1468
    static constexpr count_t max_children = 3;
1469
1470
    using node_t = Node;
1471
    using edit_t = typename Node::edit_t;
1472
1473
    shift_t shift_ = 0u;
1474
    count_t count_ = 0u;
1475
    node_t* nodes_[max_children];
1476
    size_t sizes_[max_children];
1477
1478
11.4M
    auto shift() const { return shift_; }
1479
1480
    concat_center_pos(shift_t s, Node* n0, size_t s0)
1481
5.73M
        : shift_{s}
1482
5.73M
        , count_{1}
1483
5.73M
        , nodes_{n0}
1484
5.73M
        , sizes_{s0}
1485
5.73M
    {
1486
5.73M
    }
1487
1488
    concat_center_pos(shift_t s, Node* n0, size_t s0, Node* n1, size_t s1)
1489
8.08k
        : shift_{s}
1490
8.08k
        , count_{2}
1491
8.08k
        , nodes_{n0, n1}
1492
8.08k
        , sizes_{s0, s0 + s1}
1493
8.08k
    {
1494
8.08k
    }
1495
1496
    concat_center_pos(shift_t s,
1497
                      Node* n0,
1498
                      size_t s0,
1499
                      Node* n1,
1500
                      size_t s1,
1501
                      Node* n2,
1502
                      size_t s2)
1503
527k
        : shift_{s}
1504
527k
        , count_{3}
1505
527k
        , nodes_{n0, n1, n2}
1506
527k
        , sizes_{s0, s0 + s1, s0 + s1 + s2}
1507
527k
    {
1508
527k
    }
1509
1510
    template <typename Visitor, typename... Args>
1511
    void each_sub(Visitor v, Args&&... args)
1512
17.2M
    {
1513
17.2M
        if (shift_ == BL) {
1514
1.60M
            auto s = size_t{};
1515
6.39M
            for (auto i = count_t{0}; i < count_; ++i) {
1516
4.79M
                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
1517
4.79M
                s = sizes_[i];
1518
4.79M
            }
1519
15.6M
        } else {
1520
39.7M
            for (auto i = count_t{0}; i < count_; ++i)
1521
24.1M
                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
1522
24.1M
                    .visit(v, args...);
1523
15.6M
        }
1524
17.2M
    }
void immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_sub<immer::detail::rbts::concat_rebalance_plan_fill_visitor, immer::detail::rbts::concat_rebalance_plan<2u, 2u>&>(immer::detail::rbts::concat_rebalance_plan_fill_visitor, immer::detail::rbts::concat_rebalance_plan<2u, 2u>&)
Line
Count
Source
1512
5.73M
    {
1513
5.73M
        if (shift_ == BL) {
1514
535k
            auto s = size_t{};
1515
2.13M
            for (auto i = count_t{0}; i < count_; ++i) {
1516
1.59M
                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
1517
1.59M
                s = sizes_[i];
1518
1.59M
            }
1519
5.20M
        } else {
1520
13.2M
            for (auto i = count_t{0}; i < count_; ++i)
1521
8.05M
                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
1522
8.05M
                    .visit(v, args...);
1523
5.20M
        }
1524
5.73M
    }
void immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_sub<immer::detail::rbts::concat_merger_visitor, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::concat_merger_visitor, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1512
5.73M
    {
1513
5.73M
        if (shift_ == BL) {
1514
535k
            auto s = size_t{};
1515
2.13M
            for (auto i = count_t{0}; i < count_; ++i) {
1516
1.59M
                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
1517
1.59M
                s = sizes_[i];
1518
1.59M
            }
1519
5.20M
        } else {
1520
13.2M
            for (auto i = count_t{0}; i < count_; ++i)
1521
8.05M
                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
1522
8.05M
                    .visit(v, args...);
1523
5.20M
        }
1524
5.73M
    }
void immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_sub<immer::detail::rbts::dec_visitor>(immer::detail::rbts::dec_visitor)
Line
Count
Source
1512
5.73M
    {
1513
5.73M
        if (shift_ == BL) {
1514
535k
            auto s = size_t{};
1515
2.13M
            for (auto i = count_t{0}; i < count_; ++i) {
1516
1.59M
                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
1517
1.59M
                s = sizes_[i];
1518
1.59M
            }
1519
5.20M
        } else {
1520
13.2M
            for (auto i = count_t{0}; i < count_; ++i)
1521
8.05M
                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
1522
8.05M
                    .visit(v, args...);
1523
5.20M
        }
1524
5.73M
    }
Unexecuted instantiation: void immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_sub<immer::detail::rbts::concat_merger_mut_visitor, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit&>(immer::detail::rbts::concat_merger_mut_visitor, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit&)
1525
1526
    relaxed_pos<Node> realize() &&
1527
535k
    {
1528
535k
        if (count_ > 1) {
1529
38.2k
            IMMER_TRY {
1530
38.2k
                auto result = node_t::make_inner_r_n(count_);
1531
38.2k
                auto r      = result->relaxed();
1532
38.2k
                r->d.count  = count_;
1533
38.2k
                std::copy(nodes_, nodes_ + count_, result->inner());
1534
38.2k
                std::copy(sizes_, sizes_ + count_, r->d.sizes);
1535
38.2k
                return {result, shift_, r};
1536
38.2k
            }
1537
38.2k
            IMMER_CATCH (...) {
1538
0
                each_sub(dec_visitor{});
1539
0
                IMMER_RETHROW;
1540
0
            }
1541
496k
        } else {
1542
496k
            assert(shift_ >= B + BL);
1543
496k
            return {nodes_[0], shift_ - B, nodes_[0]->relaxed()};
1544
496k
        }
1545
535k
    }
1546
1547
    relaxed_pos<Node> realize_e(edit_t e)
1548
0
    {
1549
0
        if (count_ > 1) {
1550
0
            auto result = node_t::make_inner_r_e(e);
1551
0
            auto r      = result->relaxed();
1552
0
            r->d.count  = count_;
1553
0
            std::copy(nodes_, nodes_ + count_, result->inner());
1554
0
            std::copy(sizes_, sizes_ + count_, r->d.sizes);
1555
0
            return {result, shift_, r};
1556
0
        } else {
1557
0
            assert(shift_ >= B + BL);
1558
0
            return {nodes_[0], shift_ - B, nodes_[0]->relaxed()};
1559
0
        }
1560
0
    }
1561
};
1562
1563
template <typename Node>
1564
struct concat_merger
1565
{
1566
    using node_t             = Node;
1567
    static constexpr auto B  = Node::bits;
1568
    static constexpr auto BL = Node::bits_leaf;
1569
1570
    using result_t = concat_center_pos<Node>;
1571
1572
    count_t* curr_;
1573
    count_t n_;
1574
    result_t result_;
1575
1576
    concat_merger(shift_t shift, count_t* counts, count_t n)
1577
5.73M
        : curr_{counts}
1578
5.73M
        , n_{n}
1579
5.73M
        , result_{
1580
5.73M
              shift + B, node_t::make_inner_r_n(std::min(n_, branches<B>)), 0}
1581
5.73M
    {
1582
5.73M
    }
1583
1584
    node_t* to_        = {};
1585
    count_t to_offset_ = {};
1586
    size_t to_size_    = {};
1587
1588
    void add_child(node_t* p, size_t size)
1589
25.4M
    {
1590
25.4M
        assert(size);
1591
25.4M
        ++curr_;
1592
25.4M
        auto parent  = result_.nodes_[result_.count_ - 1];
1593
25.4M
        auto relaxed = parent->relaxed();
1594
25.4M
        if (relaxed->d.count == branches<B>) {
1595
2.89M
            assert(result_.count_ < result_t::max_children);
1596
2.89M
            n_ -= branches<B>;
1597
2.89M
            parent  = node_t::make_inner_r_n(std::min(n_, branches<B>));
1598
2.89M
            relaxed = parent->relaxed();
1599
2.89M
            result_.nodes_[result_.count_] = parent;
1600
2.89M
            result_.sizes_[result_.count_] = result_.sizes_[result_.count_ - 1];
1601
2.89M
            assert(result_.sizes_[result_.count_]);
1602
2.89M
            ++result_.count_;
1603
2.89M
        }
1604
25.4M
        auto idx = relaxed->d.count++;
1605
25.4M
        result_.sizes_[result_.count_ - 1] += size;
1606
25.4M
        assert(result_.sizes_[result_.count_ - 1]);
1607
25.4M
        relaxed->d.sizes[idx] = size + (idx ? relaxed->d.sizes[idx - 1] : 0);
1608
25.4M
        assert(relaxed->d.sizes[idx]);
1609
25.4M
        parent->inner()[idx] = p;
1610
25.4M
    };
1611
1612
    template <typename Pos>
1613
    void merge_leaf(Pos&& p)
1614
3.61M
    {
1615
3.61M
        auto from       = p.node();
1616
3.61M
        auto from_size  = p.size();
1617
3.61M
        auto from_count = p.count();
1618
3.61M
        assert(from_size);
1619
3.61M
        if (!to_ && *curr_ == from_count) {
1620
3.57M
            add_child(from, from_size);
1621
3.57M
            from->inc();
1622
3.57M
        } else {
1623
41.2k
            auto from_offset = count_t{};
1624
41.2k
            auto from_data   = from->leaf();
1625
50.6k
            do {
1626
50.6k
                if (!to_) {
1627
25.0k
                    to_        = node_t::make_leaf_n(*curr_);
1628
25.0k
                    to_offset_ = 0;
1629
25.0k
                }
1630
50.6k
                auto data = to_->leaf();
1631
50.6k
                auto to_copy =
1632
50.6k
                    std::min(from_count - from_offset, *curr_ - to_offset_);
1633
50.6k
                detail::uninitialized_copy(from_data + from_offset,
1634
50.6k
                                           from_data + from_offset + to_copy,
1635
50.6k
                                           data + to_offset_);
1636
50.6k
                to_offset_ += to_copy;
1637
50.6k
                from_offset += to_copy;
1638
50.6k
                if (*curr_ == to_offset_) {
1639
25.0k
                    add_child(to_, to_offset_);
1640
25.0k
                    to_ = nullptr;
1641
25.0k
                }
1642
50.6k
            } while (from_offset != from_count);
1643
41.2k
        }
1644
3.61M
    }
void immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::merge_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1614
2.43M
    {
1615
2.43M
        auto from       = p.node();
1616
2.43M
        auto from_size  = p.size();
1617
2.43M
        auto from_count = p.count();
1618
2.43M
        assert(from_size);
1619
2.43M
        if (!to_ && *curr_ == from_count) {
1620
2.39M
            add_child(from, from_size);
1621
2.39M
            from->inc();
1622
2.39M
        } else {
1623
41.2k
            auto from_offset = count_t{};
1624
41.2k
            auto from_data   = from->leaf();
1625
50.6k
            do {
1626
50.6k
                if (!to_) {
1627
25.0k
                    to_        = node_t::make_leaf_n(*curr_);
1628
25.0k
                    to_offset_ = 0;
1629
25.0k
                }
1630
50.6k
                auto data = to_->leaf();
1631
50.6k
                auto to_copy =
1632
50.6k
                    std::min(from_count - from_offset, *curr_ - to_offset_);
1633
50.6k
                detail::uninitialized_copy(from_data + from_offset,
1634
50.6k
                                           from_data + from_offset + to_copy,
1635
50.6k
                                           data + to_offset_);
1636
50.6k
                to_offset_ += to_copy;
1637
50.6k
                from_offset += to_copy;
1638
50.6k
                if (*curr_ == to_offset_) {
1639
25.0k
                    add_child(to_, to_offset_);
1640
25.0k
                    to_ = nullptr;
1641
25.0k
                }
1642
50.6k
            } while (from_offset != from_count);
1643
41.2k
        }
1644
2.43M
    }
void immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::merge_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1614
1.18M
    {
1615
1.18M
        auto from       = p.node();
1616
1.18M
        auto from_size  = p.size();
1617
1.18M
        auto from_count = p.count();
1618
1.18M
        assert(from_size);
1619
1.18M
        if (!to_ && *curr_ == from_count) {
1620
1.18M
            add_child(from, from_size);
1621
1.18M
            from->inc();
1622
1.18M
        } else {
1623
0
            auto from_offset = count_t{};
1624
0
            auto from_data   = from->leaf();
1625
0
            do {
1626
0
                if (!to_) {
1627
0
                    to_        = node_t::make_leaf_n(*curr_);
1628
0
                    to_offset_ = 0;
1629
0
                }
1630
0
                auto data = to_->leaf();
1631
0
                auto to_copy =
1632
0
                    std::min(from_count - from_offset, *curr_ - to_offset_);
1633
0
                detail::uninitialized_copy(from_data + from_offset,
1634
0
                                           from_data + from_offset + to_copy,
1635
0
                                           data + to_offset_);
1636
0
                to_offset_ += to_copy;
1637
0
                from_offset += to_copy;
1638
0
                if (*curr_ == to_offset_) {
1639
0
                    add_child(to_, to_offset_);
1640
0
                    to_ = nullptr;
1641
0
                }
1642
0
            } while (from_offset != from_count);
1643
0
        }
1644
1.18M
    }
1645
1646
    template <typename Pos>
1647
    void merge_inner(Pos&& p)
1648
22.8M
    {
1649
22.8M
        auto from       = p.node();
1650
22.8M
        auto from_size  = p.size();
1651
22.8M
        auto from_count = p.count();
1652
22.8M
        assert(from_size);
1653
22.8M
        if (!to_ && *curr_ == from_count) {
1654
19.4M
            add_child(from, from_size);
1655
19.4M
            from->inc();
1656
19.4M
        } else {
1657
3.44M
            auto from_offset = count_t{};
1658
3.44M
            auto from_data   = from->inner();
1659
4.92M
            do {
1660
4.92M
                if (!to_) {
1661
2.45M
                    to_        = node_t::make_inner_r_n(*curr_);
1662
2.45M
                    to_offset_ = 0;
1663
2.45M
                    to_size_   = 0;
1664
2.45M
                }
1665
4.92M
                auto data = to_->inner();
1666
4.92M
                auto to_copy =
1667
4.92M
                    std::min(from_count - from_offset, *curr_ - to_offset_);
1668
4.92M
                std::copy(from_data + from_offset,
1669
4.92M
                          from_data + from_offset + to_copy,
1670
4.92M
                          data + to_offset_);
1671
4.92M
                node_t::inc_nodes(from_data + from_offset, to_copy);
1672
4.92M
                auto sizes = to_->relaxed()->d.sizes;
1673
4.92M
                p.copy_sizes(
1674
4.92M
                    from_offset, to_copy, to_size_, sizes + to_offset_);
1675
4.92M
                to_offset_ += to_copy;
1676
4.92M
                from_offset += to_copy;
1677
4.92M
                to_size_ = sizes[to_offset_ - 1];
1678
4.92M
                assert(to_size_);
1679
4.92M
                if (*curr_ == to_offset_) {
1680
2.45M
                    to_->relaxed()->d.count = to_offset_;
1681
2.45M
                    add_child(to_, to_size_);
1682
2.45M
                    to_ = nullptr;
1683
2.45M
                }
1684
4.92M
            } while (from_offset != from_count);
1685
3.44M
        }
1686
22.8M
    }
void immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::merge_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1648
21.2M
    {
1649
21.2M
        auto from       = p.node();
1650
21.2M
        auto from_size  = p.size();
1651
21.2M
        auto from_count = p.count();
1652
21.2M
        assert(from_size);
1653
21.2M
        if (!to_ && *curr_ == from_count) {
1654
17.9M
            add_child(from, from_size);
1655
17.9M
            from->inc();
1656
17.9M
        } else {
1657
3.31M
            auto from_offset = count_t{};
1658
3.31M
            auto from_data   = from->inner();
1659
4.68M
            do {
1660
4.68M
                if (!to_) {
1661
2.33M
                    to_        = node_t::make_inner_r_n(*curr_);
1662
2.33M
                    to_offset_ = 0;
1663
2.33M
                    to_size_   = 0;
1664
2.33M
                }
1665
4.68M
                auto data = to_->inner();
1666
4.68M
                auto to_copy =
1667
4.68M
                    std::min(from_count - from_offset, *curr_ - to_offset_);
1668
4.68M
                std::copy(from_data + from_offset,
1669
4.68M
                          from_data + from_offset + to_copy,
1670
4.68M
                          data + to_offset_);
1671
4.68M
                node_t::inc_nodes(from_data + from_offset, to_copy);
1672
4.68M
                auto sizes = to_->relaxed()->d.sizes;
1673
4.68M
                p.copy_sizes(
1674
4.68M
                    from_offset, to_copy, to_size_, sizes + to_offset_);
1675
4.68M
                to_offset_ += to_copy;
1676
4.68M
                from_offset += to_copy;
1677
4.68M
                to_size_ = sizes[to_offset_ - 1];
1678
4.68M
                assert(to_size_);
1679
4.68M
                if (*curr_ == to_offset_) {
1680
2.33M
                    to_->relaxed()->d.count = to_offset_;
1681
2.33M
                    add_child(to_, to_size_);
1682
2.33M
                    to_ = nullptr;
1683
2.33M
                }
1684
4.68M
            } while (from_offset != from_count);
1685
3.31M
        }
1686
21.2M
    }
void immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::merge_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1648
844k
    {
1649
844k
        auto from       = p.node();
1650
844k
        auto from_size  = p.size();
1651
844k
        auto from_count = p.count();
1652
844k
        assert(from_size);
1653
844k
        if (!to_ && *curr_ == from_count) {
1654
844k
            add_child(from, from_size);
1655
844k
            from->inc();
1656
844k
        } else {
1657
0
            auto from_offset = count_t{};
1658
0
            auto from_data   = from->inner();
1659
0
            do {
1660
0
                if (!to_) {
1661
0
                    to_        = node_t::make_inner_r_n(*curr_);
1662
0
                    to_offset_ = 0;
1663
0
                    to_size_   = 0;
1664
0
                }
1665
0
                auto data = to_->inner();
1666
0
                auto to_copy =
1667
0
                    std::min(from_count - from_offset, *curr_ - to_offset_);
1668
0
                std::copy(from_data + from_offset,
1669
0
                          from_data + from_offset + to_copy,
1670
0
                          data + to_offset_);
1671
0
                node_t::inc_nodes(from_data + from_offset, to_copy);
1672
0
                auto sizes = to_->relaxed()->d.sizes;
1673
0
                p.copy_sizes(
1674
0
                    from_offset, to_copy, to_size_, sizes + to_offset_);
1675
0
                to_offset_ += to_copy;
1676
0
                from_offset += to_copy;
1677
0
                to_size_ = sizes[to_offset_ - 1];
1678
0
                assert(to_size_);
1679
0
                if (*curr_ == to_offset_) {
1680
0
                    to_->relaxed()->d.count = to_offset_;
1681
0
                    add_child(to_, to_size_);
1682
0
                    to_ = nullptr;
1683
0
                }
1684
0
            } while (from_offset != from_count);
1685
0
        }
1686
844k
    }
void immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::merge_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1648
738k
    {
1649
738k
        auto from       = p.node();
1650
738k
        auto from_size  = p.size();
1651
738k
        auto from_count = p.count();
1652
738k
        assert(from_size);
1653
738k
        if (!to_ && *curr_ == from_count) {
1654
614k
            add_child(from, from_size);
1655
614k
            from->inc();
1656
614k
        } else {
1657
124k
            auto from_offset = count_t{};
1658
124k
            auto from_data   = from->inner();
1659
248k
            do {
1660
248k
                if (!to_) {
1661
124k
                    to_        = node_t::make_inner_r_n(*curr_);
1662
124k
                    to_offset_ = 0;
1663
124k
                    to_size_   = 0;
1664
124k
                }
1665
248k
                auto data = to_->inner();
1666
248k
                auto to_copy =
1667
248k
                    std::min(from_count - from_offset, *curr_ - to_offset_);
1668
248k
                std::copy(from_data + from_offset,
1669
248k
                          from_data + from_offset + to_copy,
1670
248k
                          data + to_offset_);
1671
248k
                node_t::inc_nodes(from_data + from_offset, to_copy);
1672
248k
                auto sizes = to_->relaxed()->d.sizes;
1673
248k
                p.copy_sizes(
1674
248k
                    from_offset, to_copy, to_size_, sizes + to_offset_);
1675
248k
                to_offset_ += to_copy;
1676
248k
                from_offset += to_copy;
1677
248k
                to_size_ = sizes[to_offset_ - 1];
1678
248k
                assert(to_size_);
1679
248k
                if (*curr_ == to_offset_) {
1680
124k
                    to_->relaxed()->d.count = to_offset_;
1681
124k
                    add_child(to_, to_size_);
1682
124k
                    to_ = nullptr;
1683
124k
                }
1684
248k
            } while (from_offset != from_count);
1685
124k
        }
1686
738k
    }
1687
1688
    concat_center_pos<Node> finish() const
1689
5.73M
    {
1690
5.73M
        assert(!to_);
1691
5.73M
        return result_;
1692
5.73M
    }
1693
1694
    void abort()
1695
0
    {
1696
0
        auto shift = result_.shift_ - B;
1697
0
        if (to_) {
1698
0
            if (shift == BL)
1699
0
                node_t::delete_leaf(to_, to_offset_);
1700
0
            else {
1701
0
                to_->relaxed()->d.count = to_offset_;
1702
0
                dec_relaxed(to_, shift - B);
1703
0
            }
1704
0
        }
1705
0
        result_.each_sub(dec_visitor());
1706
0
    }
1707
};
1708
1709
struct concat_merger_visitor : visitor_base<concat_merger_visitor>
1710
{
1711
    using this_t = concat_merger_visitor;
1712
1713
    template <typename Pos, typename Merger>
1714
    static void visit_inner(Pos&& p, Merger& merger)
1715
22.8M
    {
1716
22.8M
        merger.merge_inner(p);
1717
22.8M
    }
void immer::detail::rbts::concat_merger_visitor::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > >(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1715
21.2M
    {
1716
21.2M
        merger.merge_inner(p);
1717
21.2M
    }
void immer::detail::rbts::concat_merger_visitor::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > >(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1715
844k
    {
1716
844k
        merger.merge_inner(p);
1717
844k
    }
void immer::detail::rbts::concat_merger_visitor::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > >(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1715
738k
    {
1716
738k
        merger.merge_inner(p);
1717
738k
    }
1718
1719
    template <typename Pos, typename Merger>
1720
    static void visit_leaf(Pos&& p, Merger& merger)
1721
3.61M
    {
1722
3.61M
        merger.merge_leaf(p);
1723
3.61M
    }
void immer::detail::rbts::concat_merger_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > >(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1721
2.43M
    {
1722
2.43M
        merger.merge_leaf(p);
1723
2.43M
    }
void immer::detail::rbts::concat_merger_visitor::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > >(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1721
1.18M
    {
1722
1.18M
        merger.merge_leaf(p);
1723
1.18M
    }
1724
};
1725
1726
struct concat_rebalance_plan_fill_visitor
1727
    : visitor_base<concat_rebalance_plan_fill_visitor>
1728
{
1729
    using this_t = concat_rebalance_plan_fill_visitor;
1730
1731
    template <typename Pos, typename Plan>
1732
    static void visit_node(Pos&& p, Plan& plan)
1733
26.4M
    {
1734
26.4M
        auto count = p.count();
1735
26.4M
        assert(plan.n < Plan::max_children);
1736
26.4M
        plan.counts[plan.n++] = count;
1737
26.4M
        plan.total += count;
1738
26.4M
    }
void immer::detail::rbts::concat_rebalance_plan_fill_visitor::visit_node<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_rebalance_plan<2u, 2u> >(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_rebalance_plan<2u, 2u>&)
Line
Count
Source
1733
2.43M
    {
1734
2.43M
        auto count = p.count();
1735
2.43M
        assert(plan.n < Plan::max_children);
1736
2.43M
        plan.counts[plan.n++] = count;
1737
2.43M
        plan.total += count;
1738
2.43M
    }
void immer::detail::rbts::concat_rebalance_plan_fill_visitor::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_rebalance_plan<2u, 2u> >(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_rebalance_plan<2u, 2u>&)
Line
Count
Source
1733
21.2M
    {
1734
21.2M
        auto count = p.count();
1735
21.2M
        assert(plan.n < Plan::max_children);
1736
21.2M
        plan.counts[plan.n++] = count;
1737
21.2M
        plan.total += count;
1738
21.2M
    }
void immer::detail::rbts::concat_rebalance_plan_fill_visitor::visit_node<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_rebalance_plan<2u, 2u> >(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_rebalance_plan<2u, 2u>&)
Line
Count
Source
1733
1.18M
    {
1734
1.18M
        auto count = p.count();
1735
1.18M
        assert(plan.n < Plan::max_children);
1736
1.18M
        plan.counts[plan.n++] = count;
1737
1.18M
        plan.total += count;
1738
1.18M
    }
void immer::detail::rbts::concat_rebalance_plan_fill_visitor::visit_node<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_rebalance_plan<2u, 2u> >(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_rebalance_plan<2u, 2u>&)
Line
Count
Source
1733
844k
    {
1734
844k
        auto count = p.count();
1735
844k
        assert(plan.n < Plan::max_children);
1736
844k
        plan.counts[plan.n++] = count;
1737
844k
        plan.total += count;
1738
844k
    }
void immer::detail::rbts::concat_rebalance_plan_fill_visitor::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_rebalance_plan<2u, 2u> >(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_rebalance_plan<2u, 2u>&)
Line
Count
Source
1733
738k
    {
1734
738k
        auto count = p.count();
1735
738k
        assert(plan.n < Plan::max_children);
1736
738k
        plan.counts[plan.n++] = count;
1737
738k
        plan.total += count;
1738
738k
    }
1739
};
1740
1741
template <bits_t B, bits_t BL>
1742
struct concat_rebalance_plan
1743
{
1744
    static constexpr auto max_children = 2 * branches<B> + 1;
1745
1746
    count_t counts[max_children];
1747
    count_t n     = 0u;
1748
    count_t total = 0u;
1749
1750
    template <typename LPos, typename CPos, typename RPos>
1751
    void fill(LPos&& lpos, CPos&& cpos, RPos&& rpos)
1752
5.73M
    {
1753
5.73M
        assert(n == 0u);
1754
5.73M
        assert(total == 0u);
1755
5.73M
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
5.73M
        lpos.each_left_sub(visitor_t{}, *this);
1757
5.73M
        cpos.each_sub(visitor_t{}, *this);
1758
5.73M
        rpos.each_right_sub(visitor_t{}, *this);
1759
5.73M
    }
Unexecuted instantiation: void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&)
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1752
988
    {
1753
988
        assert(n == 0u);
1754
988
        assert(total == 0u);
1755
988
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
988
        lpos.each_left_sub(visitor_t{}, *this);
1757
988
        cpos.each_sub(visitor_t{}, *this);
1758
988
        rpos.each_right_sub(visitor_t{}, *this);
1759
988
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1752
741
    {
1753
741
        assert(n == 0u);
1754
741
        assert(total == 0u);
1755
741
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
741
        lpos.each_left_sub(visitor_t{}, *this);
1757
741
        cpos.each_sub(visitor_t{}, *this);
1758
741
        rpos.each_right_sub(visitor_t{}, *this);
1759
741
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1752
2.09k
    {
1753
2.09k
        assert(n == 0u);
1754
2.09k
        assert(total == 0u);
1755
2.09k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
2.09k
        lpos.each_left_sub(visitor_t{}, *this);
1757
2.09k
        cpos.each_sub(visitor_t{}, *this);
1758
2.09k
        rpos.each_right_sub(visitor_t{}, *this);
1759
2.09k
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1752
2.02k
    {
1753
2.02k
        assert(n == 0u);
1754
2.02k
        assert(total == 0u);
1755
2.02k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
2.02k
        lpos.each_left_sub(visitor_t{}, *this);
1757
2.02k
        cpos.each_sub(visitor_t{}, *this);
1758
2.02k
        rpos.each_right_sub(visitor_t{}, *this);
1759
2.02k
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1752
110k
    {
1753
110k
        assert(n == 0u);
1754
110k
        assert(total == 0u);
1755
110k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
110k
        lpos.each_left_sub(visitor_t{}, *this);
1757
110k
        cpos.each_sub(visitor_t{}, *this);
1758
110k
        rpos.each_right_sub(visitor_t{}, *this);
1759
110k
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1752
5.32k
    {
1753
5.32k
        assert(n == 0u);
1754
5.32k
        assert(total == 0u);
1755
5.32k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
5.32k
        lpos.each_left_sub(visitor_t{}, *this);
1757
5.32k
        cpos.each_sub(visitor_t{}, *this);
1758
5.32k
        rpos.each_right_sub(visitor_t{}, *this);
1759
5.32k
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&)
Line
Count
Source
1752
4.90k
    {
1753
4.90k
        assert(n == 0u);
1754
4.90k
        assert(total == 0u);
1755
4.90k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
4.90k
        lpos.each_left_sub(visitor_t{}, *this);
1757
4.90k
        cpos.each_sub(visitor_t{}, *this);
1758
4.90k
        rpos.each_right_sub(visitor_t{}, *this);
1759
4.90k
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1752
149k
    {
1753
149k
        assert(n == 0u);
1754
149k
        assert(total == 0u);
1755
149k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
149k
        lpos.each_left_sub(visitor_t{}, *this);
1757
149k
        cpos.each_sub(visitor_t{}, *this);
1758
149k
        rpos.each_right_sub(visitor_t{}, *this);
1759
149k
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1752
140k
    {
1753
140k
        assert(n == 0u);
1754
140k
        assert(total == 0u);
1755
140k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
140k
        lpos.each_left_sub(visitor_t{}, *this);
1757
140k
        cpos.each_sub(visitor_t{}, *this);
1758
140k
        rpos.each_right_sub(visitor_t{}, *this);
1759
140k
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1752
666k
    {
1753
666k
        assert(n == 0u);
1754
666k
        assert(total == 0u);
1755
666k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
666k
        lpos.each_left_sub(visitor_t{}, *this);
1757
666k
        cpos.each_sub(visitor_t{}, *this);
1758
666k
        rpos.each_right_sub(visitor_t{}, *this);
1759
666k
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&)
Line
Count
Source
1752
2.39M
    {
1753
2.39M
        assert(n == 0u);
1754
2.39M
        assert(total == 0u);
1755
2.39M
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
2.39M
        lpos.each_left_sub(visitor_t{}, *this);
1757
2.39M
        cpos.each_sub(visitor_t{}, *this);
1758
2.39M
        rpos.each_right_sub(visitor_t{}, *this);
1759
2.39M
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1752
2.67k
    {
1753
2.67k
        assert(n == 0u);
1754
2.67k
        assert(total == 0u);
1755
2.67k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
2.67k
        lpos.each_left_sub(visitor_t{}, *this);
1757
2.67k
        cpos.each_sub(visitor_t{}, *this);
1758
2.67k
        rpos.each_right_sub(visitor_t{}, *this);
1759
2.67k
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1752
16.8k
    {
1753
16.8k
        assert(n == 0u);
1754
16.8k
        assert(total == 0u);
1755
16.8k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
16.8k
        lpos.each_left_sub(visitor_t{}, *this);
1757
16.8k
        cpos.each_sub(visitor_t{}, *this);
1758
16.8k
        rpos.each_right_sub(visitor_t{}, *this);
1759
16.8k
    }
void immer::detail::rbts::concat_rebalance_plan<2u, 2u>::fill<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1752
2.23M
    {
1753
2.23M
        assert(n == 0u);
1754
2.23M
        assert(total == 0u);
1755
2.23M
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
2.23M
        lpos.each_left_sub(visitor_t{}, *this);
1757
2.23M
        cpos.each_sub(visitor_t{}, *this);
1758
2.23M
        rpos.each_right_sub(visitor_t{}, *this);
1759
2.23M
    }
1760
1761
    void shuffle(shift_t shift)
1762
5.73M
    {
1763
        // gcc seems to not really understand this code... :(
1764
5.73M
#if !defined(_MSC_VER)
1765
5.73M
#pragma GCC diagnostic push
1766
5.73M
#pragma GCC diagnostic ignored "-Warray-bounds"
1767
5.73M
#endif
1768
5.73M
        constexpr count_t rrb_extras    = 2;
1769
5.73M
        constexpr count_t rrb_invariant = 1;
1770
5.73M
        const auto bits                 = shift == BL ? BL : B;
1771
5.73M
        const auto branches             = count_t{1} << bits;
1772
5.73M
        const auto optimal              = ((total - 1) >> bits) + 1;
1773
5.73M
        count_t i                       = 0;
1774
6.73M
        while (n >= optimal + rrb_extras) {
1775
            // skip ok nodes
1776
1.64M
            while (counts[i] > branches - rrb_invariant)
1777
640k
                i++;
1778
999k
            assert(i < n);
1779
            // short node, redistribute
1780
999k
            auto remaining = counts[i];
1781
2.49M
            do {
1782
2.49M
                auto next  = counts[i + 1];
1783
2.49M
                auto count = std::min(remaining + next, branches);
1784
2.49M
                counts[i]  = count;
1785
2.49M
                assert(counts[i]);
1786
2.49M
                remaining += next - count;
1787
2.49M
                ++i;
1788
2.49M
            } while (remaining > 0);
1789
            // remove node
1790
999k
            std::move(counts + i + 1, counts + n, counts + i);
1791
999k
            --n;
1792
999k
            --i;
1793
999k
        }
1794
5.73M
#if !defined(_MSC_VER)
1795
5.73M
#pragma GCC diagnostic pop
1796
5.73M
#endif
1797
5.73M
    }
1798
1799
    template <typename LPos, typename CPos, typename RPos>
1800
    concat_center_pos<node_type<CPos>>
1801
    merge(LPos&& lpos, CPos&& cpos, RPos&& rpos)
1802
5.73M
    {
1803
5.73M
        using node_t    = node_type<CPos>;
1804
5.73M
        using merger_t  = concat_merger<node_t>;
1805
5.73M
        using visitor_t = concat_merger_visitor;
1806
5.73M
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
5.73M
        IMMER_TRY {
1808
5.73M
            lpos.each_left_sub(visitor_t{}, merger);
1809
5.73M
            cpos.each_sub(visitor_t{}, merger);
1810
5.73M
            rpos.each_right_sub(visitor_t{}, merger);
1811
5.73M
            cpos.each_sub(dec_visitor{});
1812
5.73M
            return merger.finish();
1813
5.73M
        }
1814
5.73M
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
5.73M
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&)
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1802
988
    {
1803
988
        using node_t    = node_type<CPos>;
1804
988
        using merger_t  = concat_merger<node_t>;
1805
988
        using visitor_t = concat_merger_visitor;
1806
988
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
988
        IMMER_TRY {
1808
988
            lpos.each_left_sub(visitor_t{}, merger);
1809
988
            cpos.each_sub(visitor_t{}, merger);
1810
988
            rpos.each_right_sub(visitor_t{}, merger);
1811
988
            cpos.each_sub(dec_visitor{});
1812
988
            return merger.finish();
1813
988
        }
1814
988
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
988
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1802
741
    {
1803
741
        using node_t    = node_type<CPos>;
1804
741
        using merger_t  = concat_merger<node_t>;
1805
741
        using visitor_t = concat_merger_visitor;
1806
741
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
741
        IMMER_TRY {
1808
741
            lpos.each_left_sub(visitor_t{}, merger);
1809
741
            cpos.each_sub(visitor_t{}, merger);
1810
741
            rpos.each_right_sub(visitor_t{}, merger);
1811
741
            cpos.each_sub(dec_visitor{});
1812
741
            return merger.finish();
1813
741
        }
1814
741
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
741
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1802
2.09k
    {
1803
2.09k
        using node_t    = node_type<CPos>;
1804
2.09k
        using merger_t  = concat_merger<node_t>;
1805
2.09k
        using visitor_t = concat_merger_visitor;
1806
2.09k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
2.09k
        IMMER_TRY {
1808
2.09k
            lpos.each_left_sub(visitor_t{}, merger);
1809
2.09k
            cpos.each_sub(visitor_t{}, merger);
1810
2.09k
            rpos.each_right_sub(visitor_t{}, merger);
1811
2.09k
            cpos.each_sub(dec_visitor{});
1812
2.09k
            return merger.finish();
1813
2.09k
        }
1814
2.09k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
2.09k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1802
2.02k
    {
1803
2.02k
        using node_t    = node_type<CPos>;
1804
2.02k
        using merger_t  = concat_merger<node_t>;
1805
2.02k
        using visitor_t = concat_merger_visitor;
1806
2.02k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
2.02k
        IMMER_TRY {
1808
2.02k
            lpos.each_left_sub(visitor_t{}, merger);
1809
2.02k
            cpos.each_sub(visitor_t{}, merger);
1810
2.02k
            rpos.each_right_sub(visitor_t{}, merger);
1811
2.02k
            cpos.each_sub(dec_visitor{});
1812
2.02k
            return merger.finish();
1813
2.02k
        }
1814
2.02k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
2.02k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1802
110k
    {
1803
110k
        using node_t    = node_type<CPos>;
1804
110k
        using merger_t  = concat_merger<node_t>;
1805
110k
        using visitor_t = concat_merger_visitor;
1806
110k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
110k
        IMMER_TRY {
1808
110k
            lpos.each_left_sub(visitor_t{}, merger);
1809
110k
            cpos.each_sub(visitor_t{}, merger);
1810
110k
            rpos.each_right_sub(visitor_t{}, merger);
1811
110k
            cpos.each_sub(dec_visitor{});
1812
110k
            return merger.finish();
1813
110k
        }
1814
110k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
110k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1802
5.32k
    {
1803
5.32k
        using node_t    = node_type<CPos>;
1804
5.32k
        using merger_t  = concat_merger<node_t>;
1805
5.32k
        using visitor_t = concat_merger_visitor;
1806
5.32k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
5.32k
        IMMER_TRY {
1808
5.32k
            lpos.each_left_sub(visitor_t{}, merger);
1809
5.32k
            cpos.each_sub(visitor_t{}, merger);
1810
5.32k
            rpos.each_right_sub(visitor_t{}, merger);
1811
5.32k
            cpos.each_sub(dec_visitor{});
1812
5.32k
            return merger.finish();
1813
5.32k
        }
1814
5.32k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
5.32k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&)
Line
Count
Source
1802
4.90k
    {
1803
4.90k
        using node_t    = node_type<CPos>;
1804
4.90k
        using merger_t  = concat_merger<node_t>;
1805
4.90k
        using visitor_t = concat_merger_visitor;
1806
4.90k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
4.90k
        IMMER_TRY {
1808
4.90k
            lpos.each_left_sub(visitor_t{}, merger);
1809
4.90k
            cpos.each_sub(visitor_t{}, merger);
1810
4.90k
            rpos.each_right_sub(visitor_t{}, merger);
1811
4.90k
            cpos.each_sub(dec_visitor{});
1812
4.90k
            return merger.finish();
1813
4.90k
        }
1814
4.90k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
4.90k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1802
149k
    {
1803
149k
        using node_t    = node_type<CPos>;
1804
149k
        using merger_t  = concat_merger<node_t>;
1805
149k
        using visitor_t = concat_merger_visitor;
1806
149k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
149k
        IMMER_TRY {
1808
149k
            lpos.each_left_sub(visitor_t{}, merger);
1809
149k
            cpos.each_sub(visitor_t{}, merger);
1810
149k
            rpos.each_right_sub(visitor_t{}, merger);
1811
149k
            cpos.each_sub(dec_visitor{});
1812
149k
            return merger.finish();
1813
149k
        }
1814
149k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
149k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1802
140k
    {
1803
140k
        using node_t    = node_type<CPos>;
1804
140k
        using merger_t  = concat_merger<node_t>;
1805
140k
        using visitor_t = concat_merger_visitor;
1806
140k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
140k
        IMMER_TRY {
1808
140k
            lpos.each_left_sub(visitor_t{}, merger);
1809
140k
            cpos.each_sub(visitor_t{}, merger);
1810
140k
            rpos.each_right_sub(visitor_t{}, merger);
1811
140k
            cpos.each_sub(dec_visitor{});
1812
140k
            return merger.finish();
1813
140k
        }
1814
140k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
140k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1802
666k
    {
1803
666k
        using node_t    = node_type<CPos>;
1804
666k
        using merger_t  = concat_merger<node_t>;
1805
666k
        using visitor_t = concat_merger_visitor;
1806
666k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
666k
        IMMER_TRY {
1808
666k
            lpos.each_left_sub(visitor_t{}, merger);
1809
666k
            cpos.each_sub(visitor_t{}, merger);
1810
666k
            rpos.each_right_sub(visitor_t{}, merger);
1811
666k
            cpos.each_sub(dec_visitor{});
1812
666k
            return merger.finish();
1813
666k
        }
1814
666k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
666k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&)
Line
Count
Source
1802
2.39M
    {
1803
2.39M
        using node_t    = node_type<CPos>;
1804
2.39M
        using merger_t  = concat_merger<node_t>;
1805
2.39M
        using visitor_t = concat_merger_visitor;
1806
2.39M
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
2.39M
        IMMER_TRY {
1808
2.39M
            lpos.each_left_sub(visitor_t{}, merger);
1809
2.39M
            cpos.each_sub(visitor_t{}, merger);
1810
2.39M
            rpos.each_right_sub(visitor_t{}, merger);
1811
2.39M
            cpos.each_sub(dec_visitor{});
1812
2.39M
            return merger.finish();
1813
2.39M
        }
1814
2.39M
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
2.39M
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1802
2.67k
    {
1803
2.67k
        using node_t    = node_type<CPos>;
1804
2.67k
        using merger_t  = concat_merger<node_t>;
1805
2.67k
        using visitor_t = concat_merger_visitor;
1806
2.67k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
2.67k
        IMMER_TRY {
1808
2.67k
            lpos.each_left_sub(visitor_t{}, merger);
1809
2.67k
            cpos.each_sub(visitor_t{}, merger);
1810
2.67k
            rpos.each_right_sub(visitor_t{}, merger);
1811
2.67k
            cpos.each_sub(dec_visitor{});
1812
2.67k
            return merger.finish();
1813
2.67k
        }
1814
2.67k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
2.67k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1802
16.8k
    {
1803
16.8k
        using node_t    = node_type<CPos>;
1804
16.8k
        using merger_t  = concat_merger<node_t>;
1805
16.8k
        using visitor_t = concat_merger_visitor;
1806
16.8k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
16.8k
        IMMER_TRY {
1808
16.8k
            lpos.each_left_sub(visitor_t{}, merger);
1809
16.8k
            cpos.each_sub(visitor_t{}, merger);
1810
16.8k
            rpos.each_right_sub(visitor_t{}, merger);
1811
16.8k
            cpos.each_sub(dec_visitor{});
1812
16.8k
            return merger.finish();
1813
16.8k
        }
1814
16.8k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
16.8k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<2u, 2u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1802
2.23M
    {
1803
2.23M
        using node_t    = node_type<CPos>;
1804
2.23M
        using merger_t  = concat_merger<node_t>;
1805
2.23M
        using visitor_t = concat_merger_visitor;
1806
2.23M
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
2.23M
        IMMER_TRY {
1808
2.23M
            lpos.each_left_sub(visitor_t{}, merger);
1809
2.23M
            cpos.each_sub(visitor_t{}, merger);
1810
2.23M
            rpos.each_right_sub(visitor_t{}, merger);
1811
2.23M
            cpos.each_sub(dec_visitor{});
1812
2.23M
            return merger.finish();
1813
2.23M
        }
1814
2.23M
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
2.23M
    }
1819
};
1820
1821
template <typename Node, typename LPos, typename CPos, typename RPos>
1822
concat_center_pos<Node> concat_rebalance(LPos&& lpos, CPos&& cpos, RPos&& rpos)
1823
5.73M
{
1824
5.73M
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
5.73M
    plan.fill(lpos, cpos, rpos);
1826
5.73M
    plan.shuffle(cpos.shift());
1827
5.73M
    IMMER_TRY {
1828
5.73M
        return plan.merge(lpos, cpos, rpos);
1829
5.73M
    }
1830
5.73M
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
5.73M
}
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&&)
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::null_sub_pos, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::null_sub_pos&&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1823
988
{
1824
988
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
988
    plan.fill(lpos, cpos, rpos);
1826
988
    plan.shuffle(cpos.shift());
1827
988
    IMMER_TRY {
1828
988
        return plan.merge(lpos, cpos, rpos);
1829
988
    }
1830
988
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
988
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1823
741
{
1824
741
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
741
    plan.fill(lpos, cpos, rpos);
1826
741
    plan.shuffle(cpos.shift());
1827
741
    IMMER_TRY {
1828
741
        return plan.merge(lpos, cpos, rpos);
1829
741
    }
1830
741
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
741
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::null_sub_pos, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::null_sub_pos&&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1823
2.09k
{
1824
2.09k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
2.09k
    plan.fill(lpos, cpos, rpos);
1826
2.09k
    plan.shuffle(cpos.shift());
1827
2.09k
    IMMER_TRY {
1828
2.09k
        return plan.merge(lpos, cpos, rpos);
1829
2.09k
    }
1830
2.09k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
2.09k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1823
2.02k
{
1824
2.02k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
2.02k
    plan.fill(lpos, cpos, rpos);
1826
2.02k
    plan.shuffle(cpos.shift());
1827
2.02k
    IMMER_TRY {
1828
2.02k
        return plan.merge(lpos, cpos, rpos);
1829
2.02k
    }
1830
2.02k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
2.02k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::null_sub_pos, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::null_sub_pos&&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1823
110k
{
1824
110k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
110k
    plan.fill(lpos, cpos, rpos);
1826
110k
    plan.shuffle(cpos.shift());
1827
110k
    IMMER_TRY {
1828
110k
        return plan.merge(lpos, cpos, rpos);
1829
110k
    }
1830
110k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
110k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1823
5.32k
{
1824
5.32k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
5.32k
    plan.fill(lpos, cpos, rpos);
1826
5.32k
    plan.shuffle(cpos.shift());
1827
5.32k
    IMMER_TRY {
1828
5.32k
        return plan.merge(lpos, cpos, rpos);
1829
5.32k
    }
1830
5.32k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
5.32k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&&)
Line
Count
Source
1823
4.90k
{
1824
4.90k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
4.90k
    plan.fill(lpos, cpos, rpos);
1826
4.90k
    plan.shuffle(cpos.shift());
1827
4.90k
    IMMER_TRY {
1828
4.90k
        return plan.merge(lpos, cpos, rpos);
1829
4.90k
    }
1830
4.90k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
4.90k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1823
149k
{
1824
149k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
149k
    plan.fill(lpos, cpos, rpos);
1826
149k
    plan.shuffle(cpos.shift());
1827
149k
    IMMER_TRY {
1828
149k
        return plan.merge(lpos, cpos, rpos);
1829
149k
    }
1830
149k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
149k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1823
140k
{
1824
140k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
140k
    plan.fill(lpos, cpos, rpos);
1826
140k
    plan.shuffle(cpos.shift());
1827
140k
    IMMER_TRY {
1828
140k
        return plan.merge(lpos, cpos, rpos);
1829
140k
    }
1830
140k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
140k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1823
666k
{
1824
666k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
666k
    plan.fill(lpos, cpos, rpos);
1826
666k
    plan.shuffle(cpos.shift());
1827
666k
    IMMER_TRY {
1828
666k
        return plan.merge(lpos, cpos, rpos);
1829
666k
    }
1830
666k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
666k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&&)
Line
Count
Source
1823
2.39M
{
1824
2.39M
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
2.39M
    plan.fill(lpos, cpos, rpos);
1826
2.39M
    plan.shuffle(cpos.shift());
1827
2.39M
    IMMER_TRY {
1828
2.39M
        return plan.merge(lpos, cpos, rpos);
1829
2.39M
    }
1830
2.39M
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
2.39M
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1823
2.67k
{
1824
2.67k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
2.67k
    plan.fill(lpos, cpos, rpos);
1826
2.67k
    plan.shuffle(cpos.shift());
1827
2.67k
    IMMER_TRY {
1828
2.67k
        return plan.merge(lpos, cpos, rpos);
1829
2.67k
    }
1830
2.67k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
2.67k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1823
16.8k
{
1824
16.8k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
16.8k
    plan.fill(lpos, cpos, rpos);
1826
16.8k
    plan.shuffle(cpos.shift());
1827
16.8k
    IMMER_TRY {
1828
16.8k
        return plan.merge(lpos, cpos, rpos);
1829
16.8k
    }
1830
16.8k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
16.8k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1823
2.23M
{
1824
2.23M
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
2.23M
    plan.fill(lpos, cpos, rpos);
1826
2.23M
    plan.shuffle(cpos.shift());
1827
2.23M
    IMMER_TRY {
1828
2.23M
        return plan.merge(lpos, cpos, rpos);
1829
2.23M
    }
1830
2.23M
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
2.23M
}
1835
1836
template <typename Node, typename LPos, typename TPos, typename RPos>
1837
concat_center_pos<Node> concat_leafs(LPos&& lpos, TPos&& tpos, RPos&& rpos)
1838
535k
{
1839
535k
    static_assert(Node::bits >= 2, "");
1840
535k
    assert(lpos.shift() == tpos.shift());
1841
535k
    assert(lpos.shift() == rpos.shift());
1842
535k
    assert(lpos.shift() == 0);
1843
535k
    if (tpos.count() > 0)
1844
527k
        return {
1845
527k
            Node::bits_leaf,
1846
527k
            lpos.node()->inc(),
1847
527k
            lpos.count(),
1848
527k
            tpos.node()->inc(),
1849
527k
            tpos.count(),
1850
527k
            rpos.node()->inc(),
1851
527k
            rpos.count(),
1852
527k
        };
1853
8.08k
    else
1854
8.08k
        return {
1855
8.08k
            Node::bits_leaf,
1856
8.08k
            lpos.node()->inc(),
1857
8.08k
            lpos.count(),
1858
8.08k
            rpos.node()->inc(),
1859
8.08k
            rpos.count(),
1860
8.08k
        };
1861
535k
}
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1838
2.76k
{
1839
2.76k
    static_assert(Node::bits >= 2, "");
1840
2.76k
    assert(lpos.shift() == tpos.shift());
1841
2.76k
    assert(lpos.shift() == rpos.shift());
1842
2.76k
    assert(lpos.shift() == 0);
1843
2.76k
    if (tpos.count() > 0)
1844
0
        return {
1845
0
            Node::bits_leaf,
1846
0
            lpos.node()->inc(),
1847
0
            lpos.count(),
1848
0
            tpos.node()->inc(),
1849
0
            tpos.count(),
1850
0
            rpos.node()->inc(),
1851
0
            rpos.count(),
1852
0
        };
1853
2.76k
    else
1854
2.76k
        return {
1855
2.76k
            Node::bits_leaf,
1856
2.76k
            lpos.node()->inc(),
1857
2.76k
            lpos.count(),
1858
2.76k
            rpos.node()->inc(),
1859
2.76k
            rpos.count(),
1860
2.76k
        };
1861
2.76k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1838
5.32k
{
1839
5.32k
    static_assert(Node::bits >= 2, "");
1840
5.32k
    assert(lpos.shift() == tpos.shift());
1841
5.32k
    assert(lpos.shift() == rpos.shift());
1842
5.32k
    assert(lpos.shift() == 0);
1843
5.32k
    if (tpos.count() > 0)
1844
0
        return {
1845
0
            Node::bits_leaf,
1846
0
            lpos.node()->inc(),
1847
0
            lpos.count(),
1848
0
            tpos.node()->inc(),
1849
0
            tpos.count(),
1850
0
            rpos.node()->inc(),
1851
0
            rpos.count(),
1852
0
        };
1853
5.32k
    else
1854
5.32k
        return {
1855
5.32k
            Node::bits_leaf,
1856
5.32k
            lpos.node()->inc(),
1857
5.32k
            lpos.count(),
1858
5.32k
            rpos.node()->inc(),
1859
5.32k
            rpos.count(),
1860
5.32k
        };
1861
5.32k
}
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1838
159k
{
1839
159k
    static_assert(Node::bits >= 2, "");
1840
159k
    assert(lpos.shift() == tpos.shift());
1841
159k
    assert(lpos.shift() == rpos.shift());
1842
159k
    assert(lpos.shift() == 0);
1843
159k
    if (tpos.count() > 0)
1844
159k
        return {
1845
159k
            Node::bits_leaf,
1846
159k
            lpos.node()->inc(),
1847
159k
            lpos.count(),
1848
159k
            tpos.node()->inc(),
1849
159k
            tpos.count(),
1850
159k
            rpos.node()->inc(),
1851
159k
            rpos.count(),
1852
159k
        };
1853
0
    else
1854
0
        return {
1855
0
            Node::bits_leaf,
1856
0
            lpos.node()->inc(),
1857
0
            lpos.count(),
1858
0
            rpos.node()->inc(),
1859
0
            rpos.count(),
1860
0
        };
1861
159k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1838
368k
{
1839
368k
    static_assert(Node::bits >= 2, "");
1840
368k
    assert(lpos.shift() == tpos.shift());
1841
368k
    assert(lpos.shift() == rpos.shift());
1842
368k
    assert(lpos.shift() == 0);
1843
368k
    if (tpos.count() > 0)
1844
368k
        return {
1845
368k
            Node::bits_leaf,
1846
368k
            lpos.node()->inc(),
1847
368k
            lpos.count(),
1848
368k
            tpos.node()->inc(),
1849
368k
            tpos.count(),
1850
368k
            rpos.node()->inc(),
1851
368k
            rpos.count(),
1852
368k
        };
1853
0
    else
1854
0
        return {
1855
0
            Node::bits_leaf,
1856
0
            lpos.node()->inc(),
1857
0
            lpos.count(),
1858
0
            rpos.node()->inc(),
1859
0
            rpos.count(),
1860
0
        };
1861
368k
}
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
1862
1863
template <typename Node>
1864
struct concat_left_visitor;
1865
template <typename Node>
1866
struct concat_right_visitor;
1867
template <typename Node>
1868
struct concat_both_visitor;
1869
1870
template <typename Node, typename LPos, typename TPos, typename RPos>
1871
concat_center_pos<Node> concat_inners(LPos&& lpos, TPos&& tpos, RPos&& rpos)
1872
5.73M
{
1873
5.73M
    auto lshift = lpos.shift();
1874
5.73M
    auto rshift = rpos.shift();
1875
5.73M
    if (lshift > rshift) {
1876
2.40M
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
2.40M
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
3.33M
    } else if (lshift < rshift) {
1879
114k
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
114k
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
3.22M
    } else {
1882
3.22M
        assert(lshift == rshift);
1883
3.22M
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
3.22M
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
3.22M
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
3.22M
    }
1887
5.73M
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1872
23.5k
{
1873
23.5k
    auto lshift = lpos.shift();
1874
23.5k
    auto rshift = rpos.shift();
1875
23.5k
    if (lshift > rshift) {
1876
0
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
0
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
23.5k
    } else if (lshift < rshift) {
1879
18.2k
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
18.2k
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
18.2k
    } else {
1882
5.32k
        assert(lshift == rshift);
1883
5.32k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
5.32k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
5.32k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
5.32k
    }
1887
23.5k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1872
2.76k
{
1873
2.76k
    auto lshift = lpos.shift();
1874
2.76k
    auto rshift = rpos.shift();
1875
2.76k
    if (lshift > rshift) {
1876
0
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
0
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
2.76k
    } else if (lshift < rshift) {
1879
741
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
741
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
2.02k
    } else {
1882
2.02k
        assert(lshift == rshift);
1883
2.02k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
2.02k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
2.02k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
2.02k
    }
1887
2.76k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1872
1.16k
{
1873
1.16k
    auto lshift = lpos.shift();
1874
1.16k
    auto rshift = rpos.shift();
1875
1.16k
    if (lshift > rshift) {
1876
0
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
0
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
1.16k
    } else if (lshift < rshift) {
1879
425
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
425
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
741
    } else {
1882
741
        assert(lshift == rshift);
1883
741
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
741
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
741
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
741
    }
1887
1.16k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1872
4.65M
{
1873
4.65M
    auto lshift = lpos.shift();
1874
4.65M
    auto rshift = rpos.shift();
1875
4.65M
    if (lshift > rshift) {
1876
2.33M
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
2.33M
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
2.33M
    } else if (lshift < rshift) {
1879
81.4k
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
81.4k
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
2.23M
    } else {
1882
2.23M
        assert(lshift == rshift);
1883
2.23M
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
2.23M
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
2.23M
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
2.23M
    }
1887
4.65M
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1872
681k
{
1873
681k
    auto lshift = lpos.shift();
1874
681k
    auto rshift = rpos.shift();
1875
681k
    if (lshift > rshift) {
1876
3.96k
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
3.96k
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
677k
    } else if (lshift < rshift) {
1879
11.2k
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
11.2k
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
666k
    } else {
1882
666k
        assert(lshift == rshift);
1883
666k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
666k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
666k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
666k
    }
1887
681k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1872
142k
{
1873
142k
    auto lshift = lpos.shift();
1874
142k
    auto rshift = rpos.shift();
1875
142k
    if (lshift > rshift) {
1876
932
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
932
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
141k
    } else if (lshift < rshift) {
1879
633
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
633
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
140k
    } else {
1882
140k
        assert(lshift == rshift);
1883
140k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
140k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
140k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
140k
    }
1887
142k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1872
150k
{
1873
150k
    auto lshift = lpos.shift();
1874
150k
    auto rshift = rpos.shift();
1875
150k
    if (lshift > rshift) {
1876
0
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
0
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
150k
    } else if (lshift < rshift) {
1879
302
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
302
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
149k
    } else {
1882
149k
        assert(lshift == rshift);
1883
149k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
149k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
149k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
149k
    }
1887
150k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1872
77.9k
{
1873
77.9k
    auto lshift = lpos.shift();
1874
77.9k
    auto rshift = rpos.shift();
1875
77.9k
    if (lshift > rshift) {
1876
60.3k
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
60.3k
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
60.3k
    } else if (lshift < rshift) {
1879
717
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
717
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
16.8k
    } else {
1882
16.8k
        assert(lshift == rshift);
1883
16.8k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
16.8k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
16.8k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
16.8k
    }
1887
77.9k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1872
2.93k
{
1873
2.93k
    auto lshift = lpos.shift();
1874
2.93k
    auto rshift = rpos.shift();
1875
2.93k
    if (lshift > rshift) {
1876
0
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
0
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
2.93k
    } else if (lshift < rshift) {
1879
261
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
261
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
2.67k
    } else {
1882
2.67k
        assert(lshift == rshift);
1883
2.67k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
2.67k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
2.67k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
2.67k
    }
1887
2.93k
}
1888
1889
template <typename Node>
1890
struct concat_left_visitor : visitor_base<concat_left_visitor<Node>>
1891
{
1892
    using this_t = concat_left_visitor;
1893
1894
    template <typename LPos, typename TPos, typename RPos>
1895
    static concat_center_pos<Node>
1896
    visit_inner(LPos&& lpos, TPos&& tpos, RPos&& rpos)
1897
2.40M
    {
1898
2.40M
        return concat_inners<Node>(lpos, tpos, rpos);
1899
2.40M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1897
2.33M
    {
1898
2.33M
        return concat_inners<Node>(lpos, tpos, rpos);
1899
2.33M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1897
6.51k
    {
1898
6.51k
        return concat_inners<Node>(lpos, tpos, rpos);
1899
6.51k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1897
1.34k
    {
1898
1.34k
        return concat_inners<Node>(lpos, tpos, rpos);
1899
1.34k
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1897
59.9k
    {
1898
59.9k
        return concat_inners<Node>(lpos, tpos, rpos);
1899
59.9k
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
1900
1901
    template <typename LPos, typename TPos, typename RPos>
1902
    static concat_center_pos<Node>
1903
    visit_leaf(LPos&& lpos, TPos&& tpos, RPos&& rpos)
1904
0
    {
1905
0
        IMMER_UNREACHABLE;
1906
0
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
1907
};
1908
1909
template <typename Node>
1910
struct concat_right_visitor : visitor_base<concat_right_visitor<Node>>
1911
{
1912
    using this_t = concat_right_visitor;
1913
1914
    template <typename RPos, typename LPos, typename TPos>
1915
    static concat_center_pos<Node>
1916
    visit_inner(RPos&& rpos, LPos&& lpos, TPos&& tpos)
1917
2.80M
    {
1918
2.80M
        return concat_inners<Node>(lpos, tpos, rpos);
1919
2.80M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1917
17.8k
    {
1918
17.8k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
17.8k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1917
386
    {
1918
386
        return concat_inners<Node>(lpos, tpos, rpos);
1919
386
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1917
1.16k
    {
1918
1.16k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
1.16k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1917
668k
    {
1918
668k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
668k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1917
132k
    {
1918
132k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
132k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1917
150k
    {
1918
150k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
150k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1917
1.82M
    {
1918
1.82M
        return concat_inners<Node>(lpos, tpos, rpos);
1919
1.82M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1917
2.20k
    {
1918
2.20k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
2.20k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1917
2.93k
    {
1918
2.93k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
2.93k
    }
1920
1921
    template <typename RPos, typename LPos, typename TPos>
1922
    static concat_center_pos<Node>
1923
    visit_leaf(RPos&& rpos, LPos&& lpos, TPos&& tpos)
1924
535k
    {
1925
535k
        return concat_leafs<Node>(lpos, tpos, rpos);
1926
535k
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1924
2.76k
    {
1925
2.76k
        return concat_leafs<Node>(lpos, tpos, rpos);
1926
2.76k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1924
5.32k
    {
1925
5.32k
        return concat_leafs<Node>(lpos, tpos, rpos);
1926
5.32k
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1924
159k
    {
1925
159k
        return concat_leafs<Node>(lpos, tpos, rpos);
1926
159k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1924
368k
    {
1925
368k
        return concat_leafs<Node>(lpos, tpos, rpos);
1926
368k
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
1927
};
1928
1929
template <typename Node>
1930
struct concat_both_visitor : visitor_base<concat_both_visitor<Node>>
1931
{
1932
    using this_t = concat_both_visitor;
1933
1934
    template <typename LPos, typename TPos, typename RPos>
1935
    static concat_center_pos<Node>
1936
    visit_inner(LPos&& lpos, TPos&& tpos, RPos&& rpos)
1937
2.68M
    {
1938
2.68M
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
2.68M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1937
77.1k
    {
1938
77.1k
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
77.1k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1937
72.0k
    {
1938
72.0k
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
72.0k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1937
790k
    {
1938
790k
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
790k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1937
429
    {
1938
429
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
429
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1937
1.52k
    {
1938
1.52k
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
1.52k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1937
1.74M
    {
1938
1.74M
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
1.74M
    }
1940
1941
    template <typename LPos, typename TPos, typename RPos>
1942
    static concat_center_pos<Node>
1943
    visit_leaf(LPos&& lpos, TPos&& tpos, RPos&& rpos)
1944
535k
    {
1945
535k
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
535k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1944
741
    {
1945
741
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
741
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1944
2.02k
    {
1945
2.02k
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
2.02k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1944
5.32k
    {
1945
5.32k
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
5.32k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1944
74.8k
    {
1945
74.8k
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
74.8k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1944
84.1k
    {
1945
84.1k
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
84.1k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1944
368k
    {
1945
368k
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
368k
    }
1947
};
1948
1949
template <typename Node>
1950
struct concat_trees_right_visitor
1951
    : visitor_base<concat_trees_right_visitor<Node>>
1952
{
1953
    using this_t = concat_trees_right_visitor;
1954
1955
    template <typename RPos, typename LPos, typename TPos>
1956
    static concat_center_pos<Node>
1957
    visit_node(RPos&& rpos, LPos&& lpos, TPos&& tpos)
1958
535k
    {
1959
535k
        return concat_inners<Node>(lpos, tpos, rpos);
1960
535k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1958
5.71k
    {
1959
5.71k
        return concat_inners<Node>(lpos, tpos, rpos);
1960
5.71k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1958
2.37k
    {
1959
2.37k
        return concat_inners<Node>(lpos, tpos, rpos);
1960
2.37k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1958
496k
    {
1959
496k
        return concat_inners<Node>(lpos, tpos, rpos);
1960
496k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1958
15.7k
    {
1959
15.7k
        return concat_inners<Node>(lpos, tpos, rpos);
1960
15.7k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1958
6.61k
    {
1959
6.61k
        return concat_inners<Node>(lpos, tpos, rpos);
1960
6.61k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Line
Count
Source
1958
8.27k
    {
1959
8.27k
        return concat_inners<Node>(lpos, tpos, rpos);
1960
8.27k
    }
1961
};
1962
1963
template <typename Node>
1964
struct concat_trees_left_visitor : visitor_base<concat_trees_left_visitor<Node>>
1965
{
1966
    using this_t = concat_trees_left_visitor;
1967
1968
    template <typename LPos, typename TPos, typename... Args>
1969
    static concat_center_pos<Node>
1970
    visit_node(LPos&& lpos, TPos&& tpos, Args&&... args)
1971
535k
    {
1972
535k
        return visit_maybe_relaxed_sub(
1973
535k
            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
1974
535k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&, unsigned int&, unsigned long&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&, unsigned int&, unsigned long&)
Line
Count
Source
1971
8.08k
    {
1972
8.08k
        return visit_maybe_relaxed_sub(
1973
8.08k
            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
1974
8.08k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&, unsigned int&, unsigned long&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&, unsigned int&, unsigned long&)
Line
Count
Source
1971
512k
    {
1972
512k
        return visit_maybe_relaxed_sub(
1973
512k
            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
1974
512k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&, unsigned int&, unsigned long&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&&, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&, unsigned int&, unsigned long&)
Line
Count
Source
1971
14.8k
    {
1972
14.8k
        return visit_maybe_relaxed_sub(
1973
14.8k
            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
1974
14.8k
    }
1975
};
1976
1977
template <typename Node>
1978
relaxed_pos<Node> concat_trees(Node* lroot,
1979
                               shift_t lshift,
1980
                               size_t lsize,
1981
                               Node* ltail,
1982
                               count_t ltcount,
1983
                               Node* rroot,
1984
                               shift_t rshift,
1985
                               size_t rsize)
1986
527k
{
1987
527k
    return visit_maybe_relaxed_sub(lroot,
1988
527k
                                   lshift,
1989
527k
                                   lsize,
1990
527k
                                   concat_trees_left_visitor<Node>{},
1991
527k
                                   make_leaf_pos(ltail, ltcount),
1992
527k
                                   rroot,
1993
527k
                                   rshift,
1994
527k
                                   rsize)
1995
527k
        .realize();
1996
527k
}
1997
1998
template <typename Node>
1999
relaxed_pos<Node> concat_trees(
2000
    Node* ltail, count_t ltcount, Node* rroot, shift_t rshift, size_t rsize)
2001
8.08k
{
2002
8.08k
    return make_singleton_regular_sub_pos(ltail, ltcount)
2003
8.08k
        .visit(concat_trees_left_visitor<Node>{},
2004
8.08k
               empty_leaf_pos<Node>{},
2005
8.08k
               rroot,
2006
8.08k
               rshift,
2007
8.08k
               rsize)
2008
8.08k
        .realize();
2009
8.08k
}
2010
2011
template <typename Node>
2012
using concat_center_mut_pos = concat_center_pos<Node>;
2013
2014
template <typename Node>
2015
struct concat_merger_mut
2016
{
2017
    using node_t = Node;
2018
    using edit_t = typename Node::edit_t;
2019
2020
    static constexpr auto B  = Node::bits;
2021
    static constexpr auto BL = Node::bits_leaf;
2022
2023
    using result_t = concat_center_pos<Node>;
2024
2025
    edit_t ec_ = {};
2026
2027
    count_t* curr_;
2028
    count_t n_;
2029
    result_t result_;
2030
    count_t count_      = 0;
2031
    node_t* candidate_  = nullptr;
2032
    edit_t candidate_e_ = Node::memory::transience_t::noone;
2033
2034
    concat_merger_mut(edit_t ec,
2035
                      shift_t shift,
2036
                      count_t* counts,
2037
                      count_t n,
2038
                      edit_t candidate_e,
2039
                      node_t* candidate)
2040
        : ec_{ec}
2041
        , curr_{counts}
2042
        , n_{n}
2043
        , result_{shift + B, nullptr, 0}
2044
    {
2045
        if (candidate) {
2046
            candidate->ensure_mutable_relaxed_e(candidate_e, ec);
2047
            result_.nodes_[0] = candidate;
2048
        } else {
2049
            result_.nodes_[0] = node_t::make_inner_r_e(ec);
2050
        }
2051
    }
2052
2053
    node_t* to_        = {};
2054
    count_t to_offset_ = {};
2055
    size_t to_size_    = {};
2056
2057
    void set_candidate(edit_t candidate_e, node_t* candidate)
2058
0
    {
2059
0
        candidate_   = candidate;
2060
0
        candidate_e_ = candidate_e;
2061
0
    }
2062
2063
    void add_child(node_t* p, size_t size)
2064
0
    {
2065
0
        assert(size);
2066
0
        ++curr_;
2067
0
        auto parent  = result_.nodes_[result_.count_ - 1];
2068
0
        auto relaxed = parent->relaxed();
2069
0
        if (count_ == branches<B>) {
2070
0
            parent->relaxed()->d.count = count_;
2071
0
            assert(result_.count_ < result_t::max_children);
2072
0
            n_ -= branches<B>;
2073
0
            if (candidate_) {
2074
0
                parent = candidate_;
2075
0
                parent->ensure_mutable_relaxed_e(candidate_e_, ec_);
2076
0
                candidate_ = nullptr;
2077
0
            } else
2078
0
                parent = node_t::make_inner_r_e(ec_);
2079
0
            count_                         = 0;
2080
0
            relaxed                        = parent->relaxed();
2081
0
            result_.nodes_[result_.count_] = parent;
2082
0
            result_.sizes_[result_.count_] = result_.sizes_[result_.count_ - 1];
2083
0
            assert(result_.sizes_[result_.count_]);
2084
0
            ++result_.count_;
2085
0
        }
2086
0
        auto idx = count_++;
2087
0
        result_.sizes_[result_.count_ - 1] += size;
2088
0
        assert(size);
2089
0
        assert(result_.sizes_[result_.count_ - 1]);
2090
0
        relaxed->d.sizes[idx] = size + (idx ? relaxed->d.sizes[idx - 1] : 0);
2091
0
        assert(relaxed->d.sizes[idx]);
2092
0
        parent->inner()[idx] = p;
2093
0
    };
2094
2095
    template <typename Pos>
2096
    void merge_leaf(Pos&& p, edit_t e)
2097
0
    {
2098
0
        auto from       = p.node();
2099
0
        auto from_size  = p.size();
2100
0
        auto from_count = p.count();
2101
0
        assert(from);
2102
0
        assert(from_size);
2103
0
        if (!to_ && *curr_ == from_count) {
2104
0
            add_child(from, from_size);
2105
0
        } else {
2106
0
            auto from_offset = count_t{};
2107
0
            auto from_data   = from->leaf();
2108
0
            auto from_mutate = from->can_mutate(e);
2109
0
            do {
2110
0
                if (!to_) {
2111
0
                    if (from_mutate) {
2112
0
                        node_t::ownee(from) = ec_;
2113
0
                        to_                 = from->inc();
2114
0
                        assert(from_count);
2115
0
                    } else {
2116
0
                        to_ = node_t::make_leaf_e(ec_);
2117
0
                    }
2118
0
                    to_offset_ = 0;
2119
0
                }
2120
0
                auto data = to_->leaf();
2121
0
                auto to_copy =
2122
0
                    std::min(from_count - from_offset, *curr_ - to_offset_);
2123
0
                if (from == to_) {
2124
0
                    if (from_offset != to_offset_)
2125
0
                        std::move(from_data + from_offset,
2126
0
                                  from_data + from_offset + to_copy,
2127
0
                                  data + to_offset_);
2128
0
                } else {
2129
0
                    if (!from_mutate)
2130
0
                        detail::uninitialized_copy(from_data + from_offset,
2131
0
                                                   from_data + from_offset +
2132
0
                                                       to_copy,
2133
0
                                                   data + to_offset_);
2134
0
                    else
2135
0
                        detail::uninitialized_move(from_data + from_offset,
2136
0
                                                   from_data + from_offset +
2137
0
                                                       to_copy,
2138
0
                                                   data + to_offset_);
2139
0
                }
2140
0
                to_offset_ += to_copy;
2141
0
                from_offset += to_copy;
2142
0
                if (*curr_ == to_offset_) {
2143
0
                    add_child(to_, to_offset_);
2144
0
                    to_ = nullptr;
2145
0
                }
2146
0
            } while (from_offset != from_count);
2147
0
        }
2148
0
    }
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::merge_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::merge_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
2149
2150
    template <typename Pos>
2151
    void merge_inner(Pos&& p, edit_t e)
2152
0
    {
2153
0
        auto from       = p.node();
2154
0
        auto from_size  = p.size();
2155
0
        auto from_count = p.count();
2156
0
        assert(from_size);
2157
0
        if (!to_ && *curr_ == from_count) {
2158
0
            add_child(from, from_size);
2159
0
        } else {
2160
0
            auto from_offset = count_t{};
2161
0
            auto from_data   = from->inner();
2162
0
            auto from_mutate = from->can_relax() && from->can_mutate(e);
2163
0
            do {
2164
0
                if (!to_) {
2165
0
                    if (from_mutate) {
2166
0
                        node_t::ownee(from) = ec_;
2167
0
                        from->ensure_mutable_relaxed_e(e, ec_);
2168
0
                        to_ = from;
2169
0
                    } else {
2170
0
                        to_ = node_t::make_inner_r_e(ec_);
2171
0
                    }
2172
0
                    to_offset_ = 0;
2173
0
                    to_size_   = 0;
2174
0
                }
2175
0
                auto data = to_->inner();
2176
0
                auto to_copy =
2177
0
                    std::min(from_count - from_offset, *curr_ - to_offset_);
2178
0
                auto sizes = to_->relaxed()->d.sizes;
2179
0
                if (from != to_ || from_offset != to_offset_) {
2180
0
                    std::copy(from_data + from_offset,
2181
0
                              from_data + from_offset + to_copy,
2182
0
                              data + to_offset_);
2183
0
                    p.copy_sizes(
2184
0
                        from_offset, to_copy, to_size_, sizes + to_offset_);
2185
0
                }
2186
0
                to_offset_ += to_copy;
2187
0
                from_offset += to_copy;
2188
0
                to_size_ = sizes[to_offset_ - 1];
2189
0
                if (*curr_ == to_offset_) {
2190
0
                    to_->relaxed()->d.count = to_offset_;
2191
0
                    add_child(to_, to_size_);
2192
0
                    to_ = nullptr;
2193
0
                }
2194
0
            } while (from_offset != from_count);
2195
0
        }
2196
0
    }
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::merge_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::merge_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::merge_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
2197
2198
    concat_center_pos<Node> finish() const
2199
0
    {
2200
0
        assert(!to_);
2201
0
        result_.nodes_[result_.count_ - 1]->relaxed()->d.count = count_;
2202
0
        return result_;
2203
0
    }
2204
2205
    void abort()
2206
0
    {
2207
0
        // We may have mutated stuff the tree in place, leaving
2208
0
        // everything in a corrupted state...  It should be possible
2209
0
        // to define cleanup properly, but that is a task for some
2210
0
        // other day... ;)
2211
0
        std::terminate();
2212
0
    }
2213
};
2214
2215
struct concat_merger_mut_visitor : visitor_base<concat_merger_mut_visitor>
2216
{
2217
    using this_t = concat_merger_mut_visitor;
2218
2219
    template <typename Pos, typename Merger>
2220
    static void visit_inner(Pos&& p, Merger& merger, edit_type<Pos> e)
2221
0
    {
2222
0
        merger.merge_inner(p, e);
2223
0
    }
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut_visitor::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > >(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t)
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut_visitor::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > >(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t)
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut_visitor::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > >(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t)
2224
2225
    template <typename Pos, typename Merger>
2226
    static void visit_leaf(Pos&& p, Merger& merger, edit_type<Pos> e)
2227
0
    {
2228
0
        merger.merge_leaf(p, e);
2229
0
    }
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > >(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t)
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut_visitor::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > >(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t)
2230
};
2231
2232
template <bits_t B, bits_t BL>
2233
struct concat_rebalance_plan_mut : concat_rebalance_plan<B, BL>
2234
{
2235
    using this_t = concat_rebalance_plan_mut;
2236
2237
    template <typename LPos, typename CPos, typename RPos>
2238
    concat_center_mut_pos<node_type<CPos>> merge(edit_type<CPos> ec,
2239
                                                 edit_type<CPos> el,
2240
                                                 LPos&& lpos,
2241
                                                 CPos&& cpos,
2242
                                                 edit_type<CPos> er,
2243
                                                 RPos&& rpos)
2244
0
    {
2245
0
        using node_t    = node_type<CPos>;
2246
0
        using merger_t  = concat_merger_mut<node_t>;
2247
0
        using visitor_t = concat_merger_mut_visitor;
2248
0
        auto lnode      = ((node_t*) lpos.node());
2249
0
        auto rnode      = ((node_t*) rpos.node());
2250
0
        auto lmut2      = lnode && lnode->can_relax() && lnode->can_mutate(el);
2251
0
        auto rmut2      = rnode && rnode->can_relax() && rnode->can_mutate(er);
2252
0
        auto merger     = merger_t{ec,
2253
0
                               cpos.shift(),
2254
0
                               this->counts,
2255
0
                               this->n,
2256
0
                               el,
2257
0
                               lmut2 ? lnode : nullptr};
2258
0
        IMMER_TRY {
2259
0
            lpos.each_left_sub(visitor_t{}, merger, el);
2260
0
            cpos.each_sub(visitor_t{}, merger, ec);
2261
0
            if (rmut2)
2262
0
                merger.set_candidate(er, rnode);
2263
0
            rpos.each_right_sub(visitor_t{}, merger, er);
2264
0
            return merger.finish();
2265
0
        }
2266
0
        IMMER_CATCH (...) {
2267
0
            merger.abort();
2268
0
            IMMER_RETHROW;
2269
0
        }
2270
0
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::null_sub_pos&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::null_sub_pos&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::null_sub_pos&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<2u, 2u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
2271
};
2272
2273
template <typename Node, typename LPos, typename CPos, typename RPos>
2274
concat_center_pos<Node> concat_rebalance_mut(edit_type<Node> ec,
2275
                                             edit_type<Node> el,
2276
                                             LPos&& lpos,
2277
                                             CPos&& cpos,
2278
                                             edit_type<Node> er,
2279
                                             RPos&& rpos)
2280
0
{
2281
0
    auto plan = concat_rebalance_plan_mut<Node::bits, Node::bits_leaf>{};
2282
0
    plan.fill(lpos, cpos, rpos);
2283
0
    plan.shuffle(cpos.shift());
2284
0
    return plan.merge(ec, el, lpos, cpos, er, rpos);
2285
0
}
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::null_sub_pos&&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::null_sub_pos, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::null_sub_pos&&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::null_sub_pos, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::null_sub_pos&&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::null_sub_pos, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::null_sub_pos&&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::null_sub_pos&&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::null_sub_pos>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::null_sub_pos&&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
2286
2287
template <typename Node, typename LPos, typename TPos, typename RPos>
2288
concat_center_mut_pos<Node> concat_leafs_mut(edit_type<Node> ec,
2289
                                             edit_type<Node> el,
2290
                                             LPos&& lpos,
2291
                                             TPos&& tpos,
2292
                                             edit_type<Node> er,
2293
                                             RPos&& rpos)
2294
0
{
2295
0
    static_assert(Node::bits >= 2, "");
2296
0
    assert(lpos.shift() == tpos.shift());
2297
0
    assert(lpos.shift() == rpos.shift());
2298
0
    assert(lpos.shift() == 0);
2299
0
    if (tpos.count() > 0)
2300
0
        return {
2301
0
            Node::bits_leaf,
2302
0
            lpos.node(),
2303
0
            lpos.count(),
2304
0
            tpos.node(),
2305
0
            tpos.count(),
2306
0
            rpos.node(),
2307
0
            rpos.count(),
2308
0
        };
2309
0
    else
2310
0
        return {
2311
0
            Node::bits_leaf,
2312
0
            lpos.node(),
2313
0
            lpos.count(),
2314
0
            rpos.node(),
2315
0
            rpos.count(),
2316
0
        };
2317
0
}
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
2318
2319
template <typename Node>
2320
struct concat_left_mut_visitor;
2321
template <typename Node>
2322
struct concat_right_mut_visitor;
2323
template <typename Node>
2324
struct concat_both_mut_visitor;
2325
2326
template <typename Node, typename LPos, typename TPos, typename RPos>
2327
concat_center_mut_pos<Node> concat_inners_mut(edit_type<Node> ec,
2328
                                              edit_type<Node> el,
2329
                                              LPos&& lpos,
2330
                                              TPos&& tpos,
2331
                                              edit_type<Node> er,
2332
                                              RPos&& rpos)
2333
0
{
2334
0
    auto lshift = lpos.shift();
2335
0
    auto rshift = rpos.shift();
2336
0
    // lpos.node() can be null it is a singleton_regular_sub_pos<...>,
2337
0
    // this is, when the tree is just a tail...
2338
0
    if (lshift > rshift) {
2339
0
        auto cpos = lpos.last_sub(
2340
0
            concat_left_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
2341
0
        return concat_rebalance_mut<Node>(
2342
0
            ec, el, lpos, cpos, er, null_sub_pos{});
2343
0
    } else if (lshift < rshift) {
2344
0
        auto cpos = rpos.first_sub(
2345
0
            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
2346
0
        return concat_rebalance_mut<Node>(
2347
0
            ec, el, null_sub_pos{}, cpos, er, rpos);
2348
0
    } else {
2349
0
        assert(lshift == rshift);
2350
0
        assert(Node::bits_leaf == 0u || lshift > 0);
2351
0
        auto cpos = lpos.last_sub(
2352
0
            concat_both_mut_visitor<Node>{}, ec, el, tpos, er, rpos);
2353
0
        return concat_rebalance_mut<Node>(ec, el, lpos, cpos, er, rpos);
2354
0
    }
2355
0
}
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
2356
2357
template <typename Node>
2358
struct concat_left_mut_visitor : visitor_base<concat_left_mut_visitor<Node>>
2359
{
2360
    using this_t = concat_left_mut_visitor;
2361
    using edit_t = typename Node::edit_t;
2362
2363
    template <typename LPos, typename TPos, typename RPos>
2364
    static concat_center_mut_pos<Node> visit_inner(
2365
        LPos&& lpos, edit_t ec, edit_t el, TPos&& tpos, edit_t er, RPos&& rpos)
2366
0
    {
2367
0
        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
2368
0
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
2369
2370
    template <typename LPos, typename TPos, typename RPos>
2371
    static concat_center_mut_pos<Node> visit_leaf(
2372
        LPos&& lpos, edit_t ec, edit_t el, TPos&& tpos, edit_t er, RPos&& rpos)
2373
0
    {
2374
0
        IMMER_UNREACHABLE;
2375
0
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
2376
};
2377
2378
template <typename Node>
2379
struct concat_right_mut_visitor : visitor_base<concat_right_mut_visitor<Node>>
2380
{
2381
    using this_t = concat_right_mut_visitor;
2382
    using edit_t = typename Node::edit_t;
2383
2384
    template <typename RPos, typename LPos, typename TPos>
2385
    static concat_center_mut_pos<Node> visit_inner(
2386
        RPos&& rpos, edit_t ec, edit_t el, LPos&& lpos, TPos&& tpos, edit_t er)
2387
0
    {
2388
0
        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
2389
0
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
2390
2391
    template <typename RPos, typename LPos, typename TPos>
2392
    static concat_center_mut_pos<Node> visit_leaf(
2393
        RPos&& rpos, edit_t ec, edit_t el, LPos&& lpos, TPos&& tpos, edit_t er)
2394
0
    {
2395
0
        return concat_leafs_mut<Node>(ec, el, lpos, tpos, er, rpos);
2396
0
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
2397
};
2398
2399
template <typename Node>
2400
struct concat_both_mut_visitor : visitor_base<concat_both_mut_visitor<Node>>
2401
{
2402
    using this_t = concat_both_mut_visitor;
2403
    using edit_t = typename Node::edit_t;
2404
2405
    template <typename LPos, typename TPos, typename RPos>
2406
    static concat_center_mut_pos<Node> visit_inner(
2407
        LPos&& lpos, edit_t ec, edit_t el, TPos&& tpos, edit_t er, RPos&& rpos)
2408
0
    {
2409
0
        return rpos.first_sub(
2410
0
            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
2411
0
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
2412
2413
    template <typename LPos, typename TPos, typename RPos>
2414
    static concat_center_mut_pos<Node> visit_leaf(
2415
        LPos&& lpos, edit_t ec, edit_t el, TPos&& tpos, edit_t er, RPos&& rpos)
2416
0
    {
2417
0
        return rpos.first_sub_leaf(
2418
0
            concat_right_mut_visitor<Node>{}, ec, el, lpos, tpos, er);
2419
0
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&)
2420
};
2421
2422
template <typename Node>
2423
struct concat_trees_right_mut_visitor
2424
    : visitor_base<concat_trees_right_mut_visitor<Node>>
2425
{
2426
    using this_t = concat_trees_right_mut_visitor;
2427
    using edit_t = typename Node::edit_t;
2428
2429
    template <typename RPos, typename LPos, typename TPos>
2430
    static concat_center_mut_pos<Node> visit_node(
2431
        RPos&& rpos, edit_t ec, edit_t el, LPos&& lpos, TPos&& tpos, edit_t er)
2432
0
    {
2433
0
        return concat_inners_mut<Node>(ec, el, lpos, tpos, er, rpos);
2434
0
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit)
2435
};
2436
2437
template <typename Node>
2438
struct concat_trees_left_mut_visitor
2439
    : visitor_base<concat_trees_left_mut_visitor<Node>>
2440
{
2441
    using this_t = concat_trees_left_mut_visitor;
2442
    using edit_t = typename Node::edit_t;
2443
2444
    template <typename LPos, typename TPos, typename... Args>
2445
    static concat_center_mut_pos<Node> visit_node(LPos&& lpos,
2446
                                                  edit_t ec,
2447
                                                  edit_t el,
2448
                                                  TPos&& tpos,
2449
                                                  edit_t er,
2450
                                                  Args&&... args)
2451
0
    {
2452
0
        return visit_maybe_relaxed_sub(args...,
2453
0
                                       concat_trees_right_mut_visitor<Node>{},
2454
0
                                       ec,
2455
0
                                       el,
2456
0
                                       lpos,
2457
0
                                       tpos,
2458
0
                                       er);
2459
0
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&, unsigned int&, unsigned long&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&, unsigned int&, unsigned long&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&, unsigned int&, unsigned long&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&, unsigned int&, unsigned long&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> > immer::detail::rbts::concat_trees_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&, unsigned int&, unsigned long&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >&&, immer::no_transience_policy::apply<immer::free_list_heap_policy<immer::cpp_heap, 1024ul> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::free_list_heap_policy<immer::cpp_heap, 1024ul>, immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&, unsigned int&, unsigned long&)
2460
};
2461
2462
template <typename Node>
2463
relaxed_pos<Node> concat_trees_mut(edit_type<Node> ec,
2464
                                   edit_type<Node> el,
2465
                                   Node* lroot,
2466
                                   shift_t lshift,
2467
                                   size_t lsize,
2468
                                   Node* ltail,
2469
                                   count_t ltcount,
2470
                                   edit_type<Node> er,
2471
                                   Node* rroot,
2472
                                   shift_t rshift,
2473
                                   size_t rsize)
2474
0
{
2475
0
    return visit_maybe_relaxed_sub(lroot,
2476
0
                                   lshift,
2477
0
                                   lsize,
2478
0
                                   concat_trees_left_mut_visitor<Node>{},
2479
0
                                   ec,
2480
0
                                   el,
2481
0
                                   make_leaf_pos(ltail, ltcount),
2482
0
                                   er,
2483
0
                                   rroot,
2484
0
                                   rshift,
2485
0
                                   rsize)
2486
0
        .realize_e(ec);
2487
0
}
2488
2489
template <typename Node>
2490
relaxed_pos<Node> concat_trees_mut(edit_type<Node> ec,
2491
                                   edit_type<Node> el,
2492
                                   Node* ltail,
2493
                                   count_t ltcount,
2494
                                   edit_type<Node> er,
2495
                                   Node* rroot,
2496
                                   shift_t rshift,
2497
                                   size_t rsize)
2498
0
{
2499
0
    return make_singleton_regular_sub_pos(ltail, ltcount)
2500
0
        .visit(concat_trees_left_mut_visitor<Node>{},
2501
0
               ec,
2502
0
               el,
2503
0
               empty_leaf_pos<Node>{},
2504
0
               er,
2505
0
               rroot,
2506
0
               rshift,
2507
0
               rsize)
2508
0
        .realize_e(ec);
2509
0
}
2510
2511
} // namespace rbts
2512
} // namespace detail
2513
} // namespace immer