Coverage Report

Created: 2026-02-26 06:19

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
5.00M
    {
54
5.00M
        return pos.towards(this_t{}, idx);
55
5.00M
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
53
4.56M
    {
54
4.56M
        return pos.towards(this_t{}, idx);
55
4.56M
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
53
202k
    {
54
202k
        return pos.towards(this_t{}, idx);
55
202k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
53
214k
    {
54
214k
        return pos.towards(this_t{}, idx);
55
214k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
53
22.3k
    {
54
22.3k
        return pos.towards(this_t{}, idx);
55
22.3k
    }
56
57
    template <typename PosT>
58
    static result_t visit_leaf(PosT&& pos, size_t idx)
59
1.24M
    {
60
1.24M
        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
61
1.24M
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, 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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
59
187k
    {
60
187k
        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
61
187k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
59
15.1k
    {
60
15.1k
        return std::make_tuple(pos.node()->leaf(), pos.index(idx), pos.count());
61
15.1k
    }
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
178k
    {
107
178k
        return pos.each_pred(this_t{}, fn);
108
178k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
106
15.7k
    {
107
15.7k
        return pos.each_pred(this_t{}, fn);
108
15.7k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
106
11.6k
    {
107
11.6k
        return pos.each_pred(this_t{}, fn);
108
11.6k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
106
3.41k
    {
107
3.41k
        return pos.each_pred(this_t{}, fn);
108
3.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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
106
148k
    {
107
148k
        return pos.each_pred(this_t{}, fn);
108
148k
    }
109
110
    template <typename Pos, typename Fn>
111
    static bool visit_leaf(Pos&& pos, Fn&& fn)
112
1.17M
    {
113
1.17M
        auto data = as_const(pos.node()->leaf());
114
1.17M
        return fn(data, data + pos.count());
115
1.17M
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
112
175k
    {
113
175k
        auto data = as_const(pos.node()->leaf());
114
175k
        return fn(data, data + pos.count());
115
175k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
112
987k
    {
113
987k
        auto data = as_const(pos.node()->leaf());
114
987k
        return fn(data, data + pos.count());
115
987k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&>(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&, immer::detail::rbts::equals_visitor::equal_chunk_p<immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&)::{lambda(auto:1, auto:2)#1}&)
Line
Count
Source
112
9.72k
    {
113
9.72k
        auto data = as_const(pos.node()->leaf());
114
9.72k
        return fn(data, data + pos.count());
115
9.72k
    }
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
35.2k
        {
330
35.2k
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
35.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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
329
24.8k
        {
330
24.8k
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
24.8k
        }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
329
2.08k
        {
330
2.08k
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
2.08k
        }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
329
441
        {
330
441
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
441
        }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
329
823
        {
330
823
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
823
        }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
329
800
        {
330
800
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
800
        }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
329
3.57k
        {
330
3.57k
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
3.57k
        }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
329
2.71k
        {
330
2.71k
            return posl.nth_sub(i, this_t{}, posr, first, idx);
331
2.71k
        }
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
46.3k
        {
337
46.3k
            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
338
46.3k
        }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
336
25.1k
        {
337
25.1k
            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
338
25.1k
        }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
336
5.58k
        {
337
5.58k
            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
338
5.58k
        }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
336
7.05k
        {
337
7.05k
            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
338
7.05k
        }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
336
8.50k
        {
337
8.50k
            return posl.nth_sub_leaf(i, this_t{}, posr, first, idx);
338
8.50k
        }
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
22.8k
        {
350
22.8k
            assert(shiftl <= posr.shift());
351
22.8k
            return shiftl == posr.shift()
352
22.8k
                       ? visit_maybe_relaxed_sub(rootl,
353
21.7k
                                                 shiftl,
354
21.7k
                                                 sizel,
355
21.7k
                                                 this_t{},
356
21.7k
                                                 posr,
357
21.7k
                                                 first,
358
21.7k
                                                 size_t{})
359
22.8k
                       : posr.first_sub_inner(
360
1.12k
                             rrb{}, first, rootl, shiftl, sizel);
361
22.8k
        }
bool immer::detail::rbts::equals_visitor::rrb::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, unsigned long)
Line
Count
Source
349
13.3k
        {
350
13.3k
            assert(shiftl <= posr.shift());
351
13.3k
            return shiftl == posr.shift()
352
13.3k
                       ? visit_maybe_relaxed_sub(rootl,
353
12.5k
                                                 shiftl,
354
12.5k
                                                 sizel,
355
12.5k
                                                 this_t{},
356
12.5k
                                                 posr,
357
12.5k
                                                 first,
358
12.5k
                                                 size_t{})
359
13.3k
                       : posr.first_sub_inner(
360
864
                             rrb{}, first, rootl, shiftl, sizel);
361
13.3k
        }
bool immer::detail::rbts::equals_visitor::rrb::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, unsigned long)
Line
Count
Source
349
1.12k
        {
350
1.12k
            assert(shiftl <= posr.shift());
351
1.12k
            return shiftl == posr.shift()
352
1.12k
                       ? visit_maybe_relaxed_sub(rootl,
353
864
                                                 shiftl,
354
864
                                                 sizel,
355
864
                                                 this_t{},
356
864
                                                 posr,
357
864
                                                 first,
358
864
                                                 size_t{})
359
1.12k
                       : posr.first_sub_inner(
360
261
                             rrb{}, first, rootl, shiftl, sizel);
361
1.12k
        }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, 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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, 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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, unsigned long)
Line
Count
Source
349
8.40k
        {
350
8.40k
            assert(shiftl <= posr.shift());
351
8.40k
            return shiftl == posr.shift()
352
8.40k
                       ? visit_maybe_relaxed_sub(rootl,
353
8.40k
                                                 shiftl,
354
8.40k
                                                 sizel,
355
8.40k
                                                 this_t{},
356
8.40k
                                                 posr,
357
8.40k
                                                 first,
358
8.40k
                                                 size_t{})
359
8.40k
                       : posr.first_sub_inner(
360
0
                             rrb{}, first, rootl, shiftl, sizel);
361
8.40k
        }
362
    };
363
364
    template <typename Iter>
365
    static auto equal_chunk_p(Iter&& iter)
366
75.3k
    {
367
1.17M
        return [iter](auto f, auto e) mutable {
368
1.17M
            if (f == &*iter) {
369
76.8k
                iter += e - f;
370
76.8k
                return true;
371
76.8k
            }
372
9.35M
            for (; f != e; ++f, ++iter)
373
8.26M
                if (*f != *iter)
374
4.76k
                    return false;
375
1.09M
            return true;
376
1.09M
        };
377
75.3k
    }
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
45.3k
    {
383
45.3k
        auto nl = posl.node();
384
45.3k
        auto nr = posr.node();
385
45.3k
        if (nl == nr)
386
11.2k
            return true;
387
34.0k
        auto cl = posl.count();
388
34.0k
        auto cr = posr.count();
389
34.0k
        assert(cr > 0);
390
34.0k
        auto sbr = size_t{};
391
34.0k
        auto i   = count_t{};
392
34.0k
        auto j   = count_t{};
393
175k
        for (; i < cl; ++i) {
394
156k
            auto sbl = posl.size_before(i);
395
275k
            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
396
118k
                ;
397
156k
            auto res =
398
156k
                sbl == sbr
399
156k
                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
400
156k
                    : posl.nth_sub(i,
401
75.3k
                                   for_each_chunk_p_visitor{},
402
75.3k
                                   this_t::equal_chunk_p(first + (idx + sbl)));
403
156k
            if (!res)
404
15.0k
                return false;
405
156k
        }
406
19.0k
        return true;
407
34.0k
    }
bool immer::detail::rbts::equals_visitor::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
382
34.0k
    {
383
34.0k
        auto nl = posl.node();
384
34.0k
        auto nr = posr.node();
385
34.0k
        if (nl == nr)
386
11.2k
            return true;
387
22.8k
        auto cl = posl.count();
388
22.8k
        auto cr = posr.count();
389
22.8k
        assert(cr > 0);
390
22.8k
        auto sbr = size_t{};
391
22.8k
        auto i   = count_t{};
392
22.8k
        auto j   = count_t{};
393
121k
        for (; i < cl; ++i) {
394
108k
            auto sbl = posl.size_before(i);
395
192k
            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
396
84.1k
                ;
397
108k
            auto res =
398
108k
                sbl == sbr
399
108k
                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
400
108k
                    : posl.nth_sub(i,
401
55.3k
                                   for_each_chunk_p_visitor{},
402
55.3k
                                   this_t::equal_chunk_p(first + (idx + sbl)));
403
108k
            if (!res)
404
9.72k
                return false;
405
108k
        }
406
13.0k
        return true;
407
22.8k
    }
bool immer::detail::rbts::equals_visitor::visit_relaxed<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
382
4.49k
    {
383
4.49k
        auto nl = posl.node();
384
4.49k
        auto nr = posr.node();
385
4.49k
        if (nl == nr)
386
0
            return true;
387
4.49k
        auto cl = posl.count();
388
4.49k
        auto cr = posr.count();
389
4.49k
        assert(cr > 0);
390
4.49k
        auto sbr = size_t{};
391
4.49k
        auto i   = count_t{};
392
4.49k
        auto j   = count_t{};
393
15.4k
        for (; i < cl; ++i) {
394
13.4k
            auto sbl = posl.size_before(i);
395
22.5k
            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
396
9.07k
                ;
397
13.4k
            auto res =
398
13.4k
                sbl == sbr
399
13.4k
                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
400
13.4k
                    : posl.nth_sub(i,
401
5.02k
                                   for_each_chunk_p_visitor{},
402
5.02k
                                   this_t::equal_chunk_p(first + (idx + sbl)));
403
13.4k
            if (!res)
404
2.55k
                return false;
405
13.4k
        }
406
1.94k
        return true;
407
4.49k
    }
bool immer::detail::rbts::equals_visitor::visit_relaxed<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
382
2.16k
    {
383
2.16k
        auto nl = posl.node();
384
2.16k
        auto nr = posr.node();
385
2.16k
        if (nl == nr)
386
0
            return true;
387
2.16k
        auto cl = posl.count();
388
2.16k
        auto cr = posr.count();
389
2.16k
        assert(cr > 0);
390
2.16k
        auto sbr = size_t{};
391
2.16k
        auto i   = count_t{};
392
2.16k
        auto j   = count_t{};
393
15.5k
        for (; i < cl; ++i) {
394
14.1k
            auto sbl = posl.size_before(i);
395
25.0k
            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
396
10.8k
                ;
397
14.1k
            auto res =
398
14.1k
                sbl == sbr
399
14.1k
                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
400
14.1k
                    : posl.nth_sub(i,
401
5.81k
                                   for_each_chunk_p_visitor{},
402
5.81k
                                   this_t::equal_chunk_p(first + (idx + sbl)));
403
14.1k
            if (!res)
404
721
                return false;
405
14.1k
        }
406
1.44k
        return true;
407
2.16k
    }
bool immer::detail::rbts::equals_visitor::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
382
3.32k
    {
383
3.32k
        auto nl = posl.node();
384
3.32k
        auto nr = posr.node();
385
3.32k
        if (nl == nr)
386
0
            return true;
387
3.32k
        auto cl = posl.count();
388
3.32k
        auto cr = posr.count();
389
3.32k
        assert(cr > 0);
390
3.32k
        auto sbr = size_t{};
391
3.32k
        auto i   = count_t{};
392
3.32k
        auto j   = count_t{};
393
13.8k
        for (; i < cl; ++i) {
394
12.2k
            auto sbl = posl.size_before(i);
395
19.6k
            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
396
7.47k
                ;
397
12.2k
            auto res =
398
12.2k
                sbl == sbr
399
12.2k
                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
400
12.2k
                    : posl.nth_sub(i,
401
5.25k
                                   for_each_chunk_p_visitor{},
402
5.25k
                                   this_t::equal_chunk_p(first + (idx + sbl)));
403
12.2k
            if (!res)
404
1.70k
                return false;
405
12.2k
        }
406
1.61k
        return true;
407
3.32k
    }
bool immer::detail::rbts::equals_visitor::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
382
1.25k
    {
383
1.25k
        auto nl = posl.node();
384
1.25k
        auto nr = posr.node();
385
1.25k
        if (nl == nr)
386
0
            return true;
387
1.25k
        auto cl = posl.count();
388
1.25k
        auto cr = posr.count();
389
1.25k
        assert(cr > 0);
390
1.25k
        auto sbr = size_t{};
391
1.25k
        auto i   = count_t{};
392
1.25k
        auto j   = count_t{};
393
9.54k
        for (; i < cl; ++i) {
394
8.63k
            auto sbl = posl.size_before(i);
395
15.7k
            for (; j + 1 < cr && (sbr = posr.size_before(j)) < sbl; ++j)
396
7.07k
                ;
397
8.63k
            auto res =
398
8.63k
                sbl == sbr
399
8.63k
                    ? posr.nth_sub(j, this_aux_t{}, i, posl, first, idx + sbl)
400
8.63k
                    : posl.nth_sub(i,
401
3.83k
                                   for_each_chunk_p_visitor{},
402
3.83k
                                   this_t::equal_chunk_p(first + (idx + sbl)));
403
8.63k
            if (!res)
404
336
                return false;
405
8.63k
        }
406
917
        return true;
407
1.25k
    }
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
6.66k
    {
413
6.66k
        return this_t::visit_relaxed(posl, posr, first, idx);
414
6.66k
    }
std::__1::enable_if<is_relaxed_v<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>, bool>::type immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
412
4.49k
    {
413
4.49k
        return this_t::visit_relaxed(posl, posr, first, idx);
414
4.49k
    }
std::__1::enable_if<is_relaxed_v<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>, bool>::type immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
412
2.16k
    {
413
2.16k
        return this_t::visit_relaxed(posl, posr, first, idx);
414
2.16k
    }
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
11.7k
    {
420
11.7k
        return posl.count() >= posr.count()
421
11.7k
                   ? this_t::visit_regular(posl, posr.node())
422
11.7k
                   : this_t::visit_regular(posr, posl.node());
423
11.7k
    }
std::__1::enable_if<!(is_relaxed_v<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>), bool>::type immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
419
1.62k
    {
420
1.62k
        return posl.count() >= posr.count()
421
1.62k
                   ? this_t::visit_regular(posl, posr.node())
422
1.62k
                   : this_t::visit_regular(posr, posl.node());
423
1.62k
    }
std::__1::enable_if<!(is_relaxed_v<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>), bool>::type immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
419
8.64k
    {
420
8.64k
        return posl.count() >= posr.count()
421
8.64k
                   ? this_t::visit_regular(posl, posr.node())
422
8.64k
                   : this_t::visit_regular(posr, posl.node());
423
8.64k
    }
std::__1::enable_if<!(is_relaxed_v<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>), bool>::type immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
419
1.46k
    {
420
1.46k
        return posl.count() >= posr.count()
421
1.46k
                   ? this_t::visit_regular(posl, posr.node())
422
1.46k
                   : this_t::visit_regular(posr, posl.node());
423
1.46k
    }
424
425
    template <typename PosL, typename PosR, typename Iter>
426
    static bool visit_leaf(PosL&& posl, PosR&& posr, Iter&& first, size_t idx)
427
46.3k
    {
428
46.3k
        if (posl.node() == posr.node())
429
29.8k
            return true;
430
16.4k
        auto cl = posl.count();
431
16.4k
        auto cr = posr.count();
432
16.4k
        auto mp = std::min(cl, cr);
433
16.4k
        return std::equal(posl.node()->leaf(),
434
16.4k
                          posl.node()->leaf() + mp,
435
16.4k
                          posr.node()->leaf()) &&
436
14.0k
               std::equal(posl.node()->leaf() + mp,
437
14.0k
                          posl.node()->leaf() + posl.count(),
438
14.0k
                          first + (idx + mp));
439
46.3k
    }
bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
427
25.8k
    {
428
25.8k
        if (posl.node() == posr.node())
429
15.9k
            return true;
430
9.91k
        auto cl = posl.count();
431
9.91k
        auto cr = posr.count();
432
9.91k
        auto mp = std::min(cl, cr);
433
9.91k
        return std::equal(posl.node()->leaf(),
434
9.91k
                          posl.node()->leaf() + mp,
435
9.91k
                          posr.node()->leaf()) &&
436
8.15k
               std::equal(posl.node()->leaf() + mp,
437
8.15k
                          posl.node()->leaf() + posl.count(),
438
8.15k
                          first + (idx + mp));
439
25.8k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, 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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
427
11.9k
    {
428
11.9k
        if (posl.node() == posr.node())
429
8.09k
            return true;
430
3.86k
        auto cl = posl.count();
431
3.86k
        auto cr = posr.count();
432
3.86k
        auto mp = std::min(cl, cr);
433
3.86k
        return std::equal(posl.node()->leaf(),
434
3.86k
                          posl.node()->leaf() + mp,
435
3.86k
                          posr.node()->leaf()) &&
436
3.51k
               std::equal(posl.node()->leaf() + mp,
437
3.51k
                          posl.node()->leaf() + posl.count(),
438
3.51k
                          first + (idx + mp));
439
11.9k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, 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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, 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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, 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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
Line
Count
Source
427
8.50k
    {
428
8.50k
        if (posl.node() == posr.node())
429
5.77k
            return true;
430
2.72k
        auto cl = posl.count();
431
2.72k
        auto cr = posr.count();
432
2.72k
        auto mp = std::min(cl, cr);
433
2.72k
        return std::equal(posl.node()->leaf(),
434
2.72k
                          posl.node()->leaf() + mp,
435
2.72k
                          posr.node()->leaf()) &&
436
2.35k
               std::equal(posl.node()->leaf() + mp,
437
2.35k
                          posl.node()->leaf() + posl.count(),
438
2.35k
                          first + (idx + mp));
439
8.50k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::rrbtree_iterator<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>&, unsigned long)
440
441
    template <typename Pos, typename NodeT>
442
    static bool visit_regular(Pos&& pos, NodeT* other)
443
25.6k
    {
444
25.6k
        auto node = pos.node();
445
25.6k
        return node == other || pos.each_pred_zip(this_t{}, other);
446
25.6k
    }
bool immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Line
Count
Source
443
12.5k
    {
444
12.5k
        auto node = pos.node();
445
12.5k
        return node == other || pos.each_pred_zip(this_t{}, other);
446
12.5k
    }
bool immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Line
Count
Source
443
10.1k
    {
444
10.1k
        auto node = pos.node();
445
10.1k
        return node == other || pos.each_pred_zip(this_t{}, other);
446
10.1k
    }
bool immer::detail::rbts::equals_visitor::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Line
Count
Source
443
3.06k
    {
444
3.06k
        auto node = pos.node();
445
3.06k
        return node == other || pos.each_pred_zip(this_t{}, other);
446
3.06k
    }
447
448
    template <typename Pos, typename NodeT>
449
    static bool visit_leaf(Pos&& pos, NodeT* other)
450
33.5k
    {
451
33.5k
        auto node = pos.node();
452
33.5k
        return node == other || std::equal(node->leaf(),
453
11.0k
                                           node->leaf() + pos.count(),
454
11.0k
                                           other->leaf());
455
33.5k
    }
bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Line
Count
Source
450
23.5k
    {
451
23.5k
        auto node = pos.node();
452
23.5k
        return node == other || std::equal(node->leaf(),
453
4.45k
                                           node->leaf() + pos.count(),
454
4.45k
                                           other->leaf());
455
23.5k
    }
bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Line
Count
Source
450
3.11k
    {
451
3.11k
        auto node = pos.node();
452
3.11k
        return node == other || std::equal(node->leaf(),
453
1.60k
                                           node->leaf() + pos.count(),
454
1.60k
                                           other->leaf());
455
3.11k
    }
bool immer::detail::rbts::equals_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Line
Count
Source
450
6.82k
    {
451
6.82k
        auto node = pos.node();
452
6.82k
        return node == other || std::equal(node->leaf(),
453
5.01k
                                           node->leaf() + pos.count(),
454
5.01k
                                           other->leaf());
455
6.82k
    }
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
182k
    {
467
182k
        auto offset = pos.index(idx);
468
182k
        auto count  = pos.count();
469
182k
        auto node   = node_t::make_inner_sr_n(count, pos.relaxed());
470
182k
        IMMER_TRY {
471
182k
            auto child = pos.towards_oh(this_t{}, idx, offset, fn);
472
182k
            node_t::do_copy_inner_replace_sr(
473
182k
                node, pos.node(), count, offset, child);
474
182k
            return node;
475
182k
        }
476
182k
        IMMER_CATCH (...) {
477
0
            node_t::delete_inner_r(node, count);
478
0
            IMMER_RETHROW;
479
0
        }
480
182k
    }
481
482
    template <typename Pos, typename Fn>
483
    static node_t* visit_regular(Pos&& pos, size_t idx, Fn&& fn)
484
65.5k
    {
485
65.5k
        auto offset = pos.index(idx);
486
65.5k
        auto count  = pos.count();
487
65.5k
        auto node   = node_t::make_inner_n(count);
488
65.5k
        IMMER_TRY {
489
65.5k
            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
490
65.5k
            node_t::do_copy_inner_replace(
491
65.5k
                node, pos.node(), count, offset, child);
492
65.5k
            return node;
493
65.5k
        }
494
65.5k
        IMMER_CATCH (...) {
495
0
            node_t::delete_inner(node, count);
496
0
            IMMER_RETHROW;
497
0
        }
498
65.5k
    }
flex-vector-bo.cpp:immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::update_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, 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
48.3k
    {
485
48.3k
        auto offset = pos.index(idx);
486
48.3k
        auto count  = pos.count();
487
48.3k
        auto node   = node_t::make_inner_n(count);
488
48.3k
        IMMER_TRY {
489
48.3k
            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
490
48.3k
            node_t::do_copy_inner_replace(
491
48.3k
                node, pos.node(), count, offset, child);
492
48.3k
            return node;
493
48.3k
        }
494
48.3k
        IMMER_CATCH (...) {
495
0
            node_t::delete_inner(node, count);
496
0
            IMMER_RETHROW;
497
0
        }
498
48.3k
    }
flex-vector-bo.cpp:immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::update_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, 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
12.6k
    {
485
12.6k
        auto offset = pos.index(idx);
486
12.6k
        auto count  = pos.count();
487
12.6k
        auto node   = node_t::make_inner_n(count);
488
12.6k
        IMMER_TRY {
489
12.6k
            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
490
12.6k
            node_t::do_copy_inner_replace(
491
12.6k
                node, pos.node(), count, offset, child);
492
12.6k
            return node;
493
12.6k
        }
494
12.6k
        IMMER_CATCH (...) {
495
0
            node_t::delete_inner(node, count);
496
0
            IMMER_RETHROW;
497
0
        }
498
12.6k
    }
flex-vector-bo.cpp:immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::update_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, 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.48k
    {
485
4.48k
        auto offset = pos.index(idx);
486
4.48k
        auto count  = pos.count();
487
4.48k
        auto node   = node_t::make_inner_n(count);
488
4.48k
        IMMER_TRY {
489
4.48k
            auto child = pos.towards_oh_ch(this_t{}, idx, offset, count, fn);
490
4.48k
            node_t::do_copy_inner_replace(
491
4.48k
                node, pos.node(), count, offset, child);
492
4.48k
            return node;
493
4.48k
        }
494
4.48k
        IMMER_CATCH (...) {
495
0
            node_t::delete_inner(node, count);
496
0
            IMMER_RETHROW;
497
0
        }
498
4.48k
    }
499
500
    template <typename Pos, typename Fn>
501
    static node_t* visit_leaf(Pos&& pos, size_t idx, Fn&& fn)
502
163k
    {
503
163k
        auto offset = pos.index(idx);
504
163k
        auto node   = node_t::copy_leaf(pos.node(), pos.count());
505
163k
        IMMER_TRY {
506
163k
            node->leaf()[offset] =
507
163k
                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
508
163k
            return node;
509
163k
        }
510
163k
        IMMER_CATCH (...) {
511
0
            node_t::delete_leaf(node, pos.count());
512
0
            IMMER_RETHROW;
513
0
        }
514
163k
    }
flex-vector-bo.cpp:immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::update_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, 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
115k
    {
503
115k
        auto offset = pos.index(idx);
504
115k
        auto node   = node_t::copy_leaf(pos.node(), pos.count());
505
115k
        IMMER_TRY {
506
115k
            node->leaf()[offset] =
507
115k
                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
508
115k
            return node;
509
115k
        }
510
115k
        IMMER_CATCH (...) {
511
0
            node_t::delete_leaf(node, pos.count());
512
0
            IMMER_RETHROW;
513
0
        }
514
115k
    }
flex-vector-bo.cpp:immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::update_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, 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
14.0k
    {
503
14.0k
        auto offset = pos.index(idx);
504
14.0k
        auto node   = node_t::copy_leaf(pos.node(), pos.count());
505
14.0k
        IMMER_TRY {
506
14.0k
            node->leaf()[offset] =
507
14.0k
                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
508
14.0k
            return node;
509
14.0k
        }
510
14.0k
        IMMER_CATCH (...) {
511
0
            node_t::delete_leaf(node, pos.count());
512
0
            IMMER_RETHROW;
513
0
        }
514
14.0k
    }
flex-vector-bo.cpp:immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::update_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, 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
34.3k
    {
503
34.3k
        auto offset = pos.index(idx);
504
34.3k
        auto node   = node_t::copy_leaf(pos.node(), pos.count());
505
34.3k
        IMMER_TRY {
506
34.3k
            node->leaf()[offset] =
507
34.3k
                std::forward<Fn>(fn)(std::move(node->leaf()[offset]));
508
34.3k
            return node;
509
34.3k
        }
510
34.3k
        IMMER_CATCH (...) {
511
0
            node_t::delete_leaf(node, pos.count());
512
0
            IMMER_RETHROW;
513
0
        }
514
34.3k
    }
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
173M
    {
524
173M
        using node_t = node_type<Pos>;
525
173M
        auto node    = p.node();
526
173M
        if (node->dec()) {
527
34.2M
            p.each(this_t{});
528
34.2M
            node_t::delete_inner_r(node, p.count());
529
34.2M
        }
530
173M
    }
531
532
    template <typename Pos>
533
    static void visit_regular(Pos&& p)
534
21.5M
    {
535
21.5M
        using node_t = node_type<Pos>;
536
21.5M
        auto node    = p.node();
537
21.5M
        if (node->dec()) {
538
1.60M
            p.each(this_t{});
539
1.60M
            node_t::delete_inner(node, p.count());
540
1.60M
        }
541
21.5M
    }
void immer::detail::rbts::dec_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
534
15.6M
    {
535
15.6M
        using node_t = node_type<Pos>;
536
15.6M
        auto node    = p.node();
537
15.6M
        if (node->dec()) {
538
472k
            p.each(this_t{});
539
472k
            node_t::delete_inner(node, p.count());
540
472k
        }
541
15.6M
    }
void immer::detail::rbts::dec_visitor::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
534
3.32M
    {
535
3.32M
        using node_t = node_type<Pos>;
536
3.32M
        auto node    = p.node();
537
3.32M
        if (node->dec()) {
538
96.0k
            p.each(this_t{});
539
96.0k
            node_t::delete_inner(node, p.count());
540
96.0k
        }
541
3.32M
    }
void immer::detail::rbts::dec_visitor::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
534
1.09M
    {
535
1.09M
        using node_t = node_type<Pos>;
536
1.09M
        auto node    = p.node();
537
1.09M
        if (node->dec()) {
538
1.03M
            p.each(this_t{});
539
1.03M
            node_t::delete_inner(node, p.count());
540
1.03M
        }
541
1.09M
    }
void immer::detail::rbts::dec_visitor::visit_regular<immer::detail::rbts::empty_regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::empty_regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
534
1.49M
    {
535
1.49M
        using node_t = node_type<Pos>;
536
1.49M
        auto node    = p.node();
537
1.49M
        if (node->dec()) {
538
0
            p.each(this_t{});
539
0
            node_t::delete_inner(node, p.count());
540
0
        }
541
1.49M
    }
542
543
    template <typename Pos>
544
    static void visit_leaf(Pos&& p)
545
60.6M
    {
546
60.6M
        using node_t = node_type<Pos>;
547
60.6M
        auto node    = p.node();
548
60.6M
        if (node->dec()) {
549
1.67M
            node_t::delete_leaf(node, p.count());
550
1.67M
        }
551
60.6M
    }
void immer::detail::rbts::dec_visitor::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
545
1.80M
    {
546
1.80M
        using node_t = node_type<Pos>;
547
1.80M
        auto node    = p.node();
548
1.80M
        if (node->dec()) {
549
569k
            node_t::delete_leaf(node, p.count());
550
569k
        }
551
1.80M
    }
void immer::detail::rbts::dec_visitor::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
545
431k
    {
546
431k
        using node_t = node_type<Pos>;
547
431k
        auto node    = p.node();
548
431k
        if (node->dec()) {
549
48.0k
            node_t::delete_leaf(node, p.count());
550
48.0k
        }
551
431k
    }
void immer::detail::rbts::dec_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
545
57.0M
    {
546
57.0M
        using node_t = node_type<Pos>;
547
57.0M
        auto node    = p.node();
548
57.0M
        if (node->dec()) {
549
1.05M
            node_t::delete_leaf(node, p.count());
550
1.05M
        }
551
57.0M
    }
void immer::detail::rbts::dec_visitor::visit_leaf<immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
545
1.35M
    {
546
1.35M
        using node_t = node_type<Pos>;
547
1.35M
        auto node    = p.node();
548
1.35M
        if (node->dec()) {
549
0
            node_t::delete_leaf(node, p.count());
550
0
        }
551
1.35M
    }
552
};
553
554
template <typename NodeT>
555
void dec_leaf(NodeT* node, count_t n)
556
38.9k
{
557
38.9k
    make_leaf_sub_pos(node, n).visit(dec_visitor{});
558
38.9k
}
559
560
template <typename NodeT>
561
void dec_inner(NodeT* node, shift_t shift, size_t size)
562
420
{
563
420
    visit_maybe_relaxed_sub(node, shift, size, dec_visitor());
564
420
}
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.30k
{
581
2.30k
    make_empty_regular_pos(node).visit(dec_visitor());
582
2.30k
}
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
112k
    {
596
112k
        auto offset = pos.index(idx);
597
112k
        auto count  = pos.count();
598
112k
        auto node   = pos.node();
599
112k
        if (node->can_mutate(e)) {
600
83.3k
            return pos.towards_oh(
601
83.3k
                this_t{}, idx, offset, e, &node->inner()[offset]);
602
83.3k
        } else {
603
29.5k
            auto new_node = node_t::copy_inner_sr_e(e, node, count);
604
29.5k
            IMMER_TRY {
605
29.5k
                auto& res = pos.towards_oh(
606
29.5k
                    this_t{}, idx, offset, e, &new_node->inner()[offset]);
607
29.5k
                pos.visit(dec_visitor{});
608
29.5k
                *location = new_node;
609
29.5k
                return res;
610
29.5k
            }
611
29.5k
            IMMER_CATCH (...) {
612
0
                dec_relaxed(new_node, pos.shift());
613
0
                IMMER_RETHROW;
614
0
            }
615
29.5k
        }
616
112k
    }
617
618
    template <typename Pos>
619
    static value_t&
620
    visit_regular(Pos&& pos, size_t idx, edit_t e, node_t** location)
621
9.16k
    {
622
9.16k
        assert(pos.node() == *location);
623
9.16k
        auto offset = pos.index(idx);
624
9.16k
        auto count  = pos.count();
625
9.16k
        auto node   = pos.node();
626
9.16k
        if (node->can_mutate(e)) {
627
6.14k
            return pos.towards_oh_ch(
628
6.14k
                this_t{}, idx, offset, count, e, &node->inner()[offset]);
629
6.14k
        } else {
630
3.02k
            auto new_node = node_t::copy_inner_e(e, node, count);
631
3.02k
            IMMER_TRY {
632
3.02k
                auto& res = pos.towards_oh_ch(this_t{},
633
3.02k
                                              idx,
634
3.02k
                                              offset,
635
3.02k
                                              count,
636
3.02k
                                              e,
637
3.02k
                                              &new_node->inner()[offset]);
638
3.02k
                pos.visit(dec_visitor{});
639
3.02k
                *location = new_node;
640
3.02k
                return res;
641
3.02k
            }
642
3.02k
            IMMER_CATCH (...) {
643
0
                dec_regular(new_node, pos.shift(), pos.size());
644
0
                IMMER_RETHROW;
645
0
            }
646
3.02k
        }
647
9.16k
    }
int& immer::detail::rbts::get_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>**)
Line
Count
Source
621
5.22k
    {
622
5.22k
        assert(pos.node() == *location);
623
5.22k
        auto offset = pos.index(idx);
624
5.22k
        auto count  = pos.count();
625
5.22k
        auto node   = pos.node();
626
5.22k
        if (node->can_mutate(e)) {
627
3.55k
            return pos.towards_oh_ch(
628
3.55k
                this_t{}, idx, offset, count, e, &node->inner()[offset]);
629
3.55k
        } else {
630
1.66k
            auto new_node = node_t::copy_inner_e(e, node, count);
631
1.66k
            IMMER_TRY {
632
1.66k
                auto& res = pos.towards_oh_ch(this_t{},
633
1.66k
                                              idx,
634
1.66k
                                              offset,
635
1.66k
                                              count,
636
1.66k
                                              e,
637
1.66k
                                              &new_node->inner()[offset]);
638
1.66k
                pos.visit(dec_visitor{});
639
1.66k
                *location = new_node;
640
1.66k
                return res;
641
1.66k
            }
642
1.66k
            IMMER_CATCH (...) {
643
0
                dec_regular(new_node, pos.shift(), pos.size());
644
0
                IMMER_RETHROW;
645
0
            }
646
1.66k
        }
647
5.22k
    }
int& immer::detail::rbts::get_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>**)
Line
Count
Source
621
2.11k
    {
622
2.11k
        assert(pos.node() == *location);
623
2.11k
        auto offset = pos.index(idx);
624
2.11k
        auto count  = pos.count();
625
2.11k
        auto node   = pos.node();
626
2.11k
        if (node->can_mutate(e)) {
627
1.11k
            return pos.towards_oh_ch(
628
1.11k
                this_t{}, idx, offset, count, e, &node->inner()[offset]);
629
1.11k
        } else {
630
1.00k
            auto new_node = node_t::copy_inner_e(e, node, count);
631
1.00k
            IMMER_TRY {
632
1.00k
                auto& res = pos.towards_oh_ch(this_t{},
633
1.00k
                                              idx,
634
1.00k
                                              offset,
635
1.00k
                                              count,
636
1.00k
                                              e,
637
1.00k
                                              &new_node->inner()[offset]);
638
1.00k
                pos.visit(dec_visitor{});
639
1.00k
                *location = new_node;
640
1.00k
                return res;
641
1.00k
            }
642
1.00k
            IMMER_CATCH (...) {
643
0
                dec_regular(new_node, pos.shift(), pos.size());
644
0
                IMMER_RETHROW;
645
0
            }
646
1.00k
        }
647
2.11k
    }
int& immer::detail::rbts::get_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>**)
Line
Count
Source
621
1.82k
    {
622
1.82k
        assert(pos.node() == *location);
623
1.82k
        auto offset = pos.index(idx);
624
1.82k
        auto count  = pos.count();
625
1.82k
        auto node   = pos.node();
626
1.82k
        if (node->can_mutate(e)) {
627
1.47k
            return pos.towards_oh_ch(
628
1.47k
                this_t{}, idx, offset, count, e, &node->inner()[offset]);
629
1.47k
        } else {
630
345
            auto new_node = node_t::copy_inner_e(e, node, count);
631
345
            IMMER_TRY {
632
345
                auto& res = pos.towards_oh_ch(this_t{},
633
345
                                              idx,
634
345
                                              offset,
635
345
                                              count,
636
345
                                              e,
637
345
                                              &new_node->inner()[offset]);
638
345
                pos.visit(dec_visitor{});
639
345
                *location = new_node;
640
345
                return res;
641
345
            }
642
345
            IMMER_CATCH (...) {
643
0
                dec_regular(new_node, pos.shift(), pos.size());
644
0
                IMMER_RETHROW;
645
0
            }
646
345
        }
647
1.82k
    }
648
649
    template <typename Pos>
650
    static value_t&
651
    visit_leaf(Pos&& pos, size_t idx, edit_t e, node_t** location)
652
22.4k
    {
653
22.4k
        assert(pos.node() == *location);
654
22.4k
        auto node = pos.node();
655
22.4k
        if (node->can_mutate(e)) {
656
4.83k
            return node->leaf()[pos.index(idx)];
657
17.6k
        } else {
658
17.6k
            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
659
17.6k
            pos.visit(dec_visitor{});
660
17.6k
            *location = new_node;
661
17.6k
            return new_node->leaf()[pos.index(idx)];
662
17.6k
        }
663
22.4k
    }
int& immer::detail::rbts::get_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>**)
Line
Count
Source
652
17.2k
    {
653
17.2k
        assert(pos.node() == *location);
654
17.2k
        auto node = pos.node();
655
17.2k
        if (node->can_mutate(e)) {
656
1.78k
            return node->leaf()[pos.index(idx)];
657
15.4k
        } else {
658
15.4k
            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
659
15.4k
            pos.visit(dec_visitor{});
660
15.4k
            *location = new_node;
661
15.4k
            return new_node->leaf()[pos.index(idx)];
662
15.4k
        }
663
17.2k
    }
int& immer::detail::rbts::get_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>**)
Line
Count
Source
652
3.19k
    {
653
3.19k
        assert(pos.node() == *location);
654
3.19k
        auto node = pos.node();
655
3.19k
        if (node->can_mutate(e)) {
656
1.57k
            return node->leaf()[pos.index(idx)];
657
1.61k
        } else {
658
1.61k
            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
659
1.61k
            pos.visit(dec_visitor{});
660
1.61k
            *location = new_node;
661
1.61k
            return new_node->leaf()[pos.index(idx)];
662
1.61k
        }
663
3.19k
    }
int& immer::detail::rbts::get_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>**)
Line
Count
Source
652
2.03k
    {
653
2.03k
        assert(pos.node() == *location);
654
2.03k
        auto node = pos.node();
655
2.03k
        if (node->can_mutate(e)) {
656
1.47k
            return node->leaf()[pos.index(idx)];
657
1.47k
        } else {
658
559
            auto new_node = node_t::copy_leaf_e(e, pos.node(), pos.count());
659
559
            pos.visit(dec_visitor{});
660
559
            *location = new_node;
661
559
            return new_node->leaf()[pos.index(idx)];
662
559
        }
663
2.03k
    }
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
158k
    {
681
158k
        auto node     = pos.node();
682
158k
        auto level    = pos.shift();
683
158k
        auto idx      = pos.count() - 1;
684
158k
        auto children = pos.size(idx);
685
158k
        auto new_idx =
686
158k
            children == size_t{1} << level || level == BL ? idx + 1 : idx;
687
158k
        auto new_child = static_cast<node_t*>(nullptr);
688
158k
        auto mutate    = Mutating && node->can_mutate(e);
689
690
158k
        if (new_idx >= branches<B>)
691
1.49k
            return nullptr;
692
156k
        else if (idx == new_idx) {
693
153k
            new_child =
694
153k
                mutate ? pos.last_oh_csh(this_t{}, idx, children, e, tail, ts)
695
153k
                       : pos.last_oh_csh(
696
7.81k
                             this_no_mut_t{}, idx, children, e, tail, ts);
697
153k
            if (!new_child) {
698
1.89k
                if (++new_idx < branches<B>)
699
734
                    new_child = node_t::make_path_e(e, level - B, tail);
700
1.16k
                else
701
1.16k
                    return nullptr;
702
1.89k
            }
703
153k
        } else
704
3.03k
            new_child = node_t::make_path_e(e, level - B, tail);
705
706
155k
        if (mutate) {
707
147k
            auto count             = new_idx + 1;
708
147k
            auto relaxed           = node->ensure_mutable_relaxed_n(e, new_idx);
709
147k
            node->inner()[new_idx] = new_child;
710
147k
            relaxed->d.sizes[new_idx] = pos.size() + ts;
711
147k
            relaxed->d.count          = count;
712
147k
            assert(relaxed->d.sizes[new_idx]);
713
147k
            return node;
714
147k
        } else {
715
8.31k
            IMMER_TRY {
716
8.31k
                auto count    = new_idx + 1;
717
8.31k
                auto new_node = node_t::copy_inner_r_e(e, pos.node(), new_idx);
718
8.31k
                auto relaxed  = new_node->relaxed();
719
8.31k
                new_node->inner()[new_idx] = new_child;
720
8.31k
                relaxed->d.sizes[new_idx]  = pos.size() + ts;
721
8.31k
                relaxed->d.count           = count;
722
8.31k
                assert(relaxed->d.sizes[new_idx]);
723
8.31k
                if (Mutating)
724
2.56k
                    pos.visit(dec_visitor{});
725
8.31k
                return new_node;
726
8.31k
            }
727
8.31k
            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.31k
        }
737
155k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int)
Line
Count
Source
680
151k
    {
681
151k
        auto node     = pos.node();
682
151k
        auto level    = pos.shift();
683
151k
        auto idx      = pos.count() - 1;
684
151k
        auto children = pos.size(idx);
685
151k
        auto new_idx =
686
151k
            children == size_t{1} << level || level == BL ? idx + 1 : idx;
687
151k
        auto new_child = static_cast<node_t*>(nullptr);
688
151k
        auto mutate    = Mutating && node->can_mutate(e);
689
690
151k
        if (new_idx >= branches<B>)
691
943
            return nullptr;
692
150k
        else if (idx == new_idx) {
693
148k
            new_child =
694
148k
                mutate ? pos.last_oh_csh(this_t{}, idx, children, e, tail, ts)
695
148k
                       : pos.last_oh_csh(
696
2.42k
                             this_no_mut_t{}, idx, children, e, tail, ts);
697
148k
            if (!new_child) {
698
1.13k
                if (++new_idx < branches<B>)
699
364
                    new_child = node_t::make_path_e(e, level - B, tail);
700
766
                else
701
766
                    return nullptr;
702
1.13k
            }
703
148k
        } else
704
2.28k
            new_child = node_t::make_path_e(e, level - B, tail);
705
706
149k
        if (mutate) {
707
147k
            auto count             = new_idx + 1;
708
147k
            auto relaxed           = node->ensure_mutable_relaxed_n(e, new_idx);
709
147k
            node->inner()[new_idx] = new_child;
710
147k
            relaxed->d.sizes[new_idx] = pos.size() + ts;
711
147k
            relaxed->d.count          = count;
712
147k
            assert(relaxed->d.sizes[new_idx]);
713
147k
            return node;
714
147k
        } else {
715
2.56k
            IMMER_TRY {
716
2.56k
                auto count    = new_idx + 1;
717
2.56k
                auto new_node = node_t::copy_inner_r_e(e, pos.node(), new_idx);
718
2.56k
                auto relaxed  = new_node->relaxed();
719
2.56k
                new_node->inner()[new_idx] = new_child;
720
2.56k
                relaxed->d.sizes[new_idx]  = pos.size() + ts;
721
2.56k
                relaxed->d.count           = count;
722
2.56k
                assert(relaxed->d.sizes[new_idx]);
723
2.56k
                if (Mutating)
724
2.56k
                    pos.visit(dec_visitor{});
725
2.56k
                return new_node;
726
2.56k
            }
727
2.56k
            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.56k
        }
737
149k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int)
Line
Count
Source
680
6.69k
    {
681
6.69k
        auto node     = pos.node();
682
6.69k
        auto level    = pos.shift();
683
6.69k
        auto idx      = pos.count() - 1;
684
6.69k
        auto children = pos.size(idx);
685
6.69k
        auto new_idx =
686
6.69k
            children == size_t{1} << level || level == BL ? idx + 1 : idx;
687
6.69k
        auto new_child = static_cast<node_t*>(nullptr);
688
6.69k
        auto mutate    = Mutating && node->can_mutate(e);
689
690
6.69k
        if (new_idx >= branches<B>)
691
550
            return nullptr;
692
6.14k
        else if (idx == new_idx) {
693
5.39k
            new_child =
694
5.39k
                mutate ? pos.last_oh_csh(this_t{}, idx, children, e, tail, ts)
695
5.39k
                       : pos.last_oh_csh(
696
5.39k
                             this_no_mut_t{}, idx, children, e, tail, ts);
697
5.39k
            if (!new_child) {
698
769
                if (++new_idx < branches<B>)
699
370
                    new_child = node_t::make_path_e(e, level - B, tail);
700
399
                else
701
399
                    return nullptr;
702
769
            }
703
5.39k
        } else
704
755
            new_child = node_t::make_path_e(e, level - B, tail);
705
706
5.74k
        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
5.74k
        } else {
715
5.74k
            IMMER_TRY {
716
5.74k
                auto count    = new_idx + 1;
717
5.74k
                auto new_node = node_t::copy_inner_r_e(e, pos.node(), new_idx);
718
5.74k
                auto relaxed  = new_node->relaxed();
719
5.74k
                new_node->inner()[new_idx] = new_child;
720
5.74k
                relaxed->d.sizes[new_idx]  = pos.size() + ts;
721
5.74k
                relaxed->d.count           = count;
722
5.74k
                assert(relaxed->d.sizes[new_idx]);
723
5.74k
                if (Mutating)
724
0
                    pos.visit(dec_visitor{});
725
5.74k
                return new_node;
726
5.74k
            }
727
5.74k
            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
5.74k
        }
737
5.74k
    }
738
739
    template <typename Pos, typename... Args>
740
    static node_t* visit_regular(Pos&& pos, edit_t e, node_t* tail, Args&&...)
741
1.22M
    {
742
1.22M
        assert((pos.size() & mask<BL>) == 0);
743
1.22M
        auto node    = pos.node();
744
1.22M
        auto idx     = pos.index(pos.size() - 1);
745
1.22M
        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
746
1.22M
        auto mutate  = Mutating && node->can_mutate(e);
747
1.22M
        if (mutate) {
748
1.21M
            node->inner()[new_idx] =
749
1.21M
                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
750
                               /* otherwise */
751
1.21M
                               : node_t::make_path_e(e, pos.shift() - B, tail);
752
1.21M
            return node;
753
1.21M
        } else {
754
10.4k
            auto new_parent = node_t::make_inner_e(e);
755
10.4k
            IMMER_TRY {
756
10.4k
                new_parent->inner()[new_idx] =
757
10.4k
                    idx == new_idx
758
10.4k
                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
759
                        /* otherwise */
760
10.4k
                        : node_t::make_path_e(e, pos.shift() - B, tail);
761
10.4k
                node_t::do_copy_inner(new_parent, node, new_idx);
762
10.4k
                if (Mutating)
763
4.11k
                    pos.visit(dec_visitor{});
764
10.4k
                return new_parent;
765
10.4k
            }
766
10.4k
            IMMER_CATCH (...) {
767
0
                node_t::delete_inner_e(new_parent);
768
0
                IMMER_RETHROW;
769
0
            }
770
10.4k
        }
771
1.22M
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int&)
Line
Count
Source
741
135k
    {
742
135k
        assert((pos.size() & mask<BL>) == 0);
743
135k
        auto node    = pos.node();
744
135k
        auto idx     = pos.index(pos.size() - 1);
745
135k
        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
746
135k
        auto mutate  = Mutating && node->can_mutate(e);
747
135k
        if (mutate) {
748
134k
            node->inner()[new_idx] =
749
134k
                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
750
                               /* otherwise */
751
134k
                               : node_t::make_path_e(e, pos.shift() - B, tail);
752
134k
            return node;
753
134k
        } else {
754
1.21k
            auto new_parent = node_t::make_inner_e(e);
755
1.21k
            IMMER_TRY {
756
1.21k
                new_parent->inner()[new_idx] =
757
1.21k
                    idx == new_idx
758
1.21k
                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
759
                        /* otherwise */
760
1.21k
                        : node_t::make_path_e(e, pos.shift() - B, tail);
761
1.21k
                node_t::do_copy_inner(new_parent, node, new_idx);
762
1.21k
                if (Mutating)
763
1.21k
                    pos.visit(dec_visitor{});
764
1.21k
                return new_parent;
765
1.21k
            }
766
1.21k
            IMMER_CATCH (...) {
767
0
                node_t::delete_inner_e(new_parent);
768
0
                IMMER_RETHROW;
769
0
            }
770
1.21k
        }
771
135k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Line
Count
Source
741
911k
    {
742
911k
        assert((pos.size() & mask<BL>) == 0);
743
911k
        auto node    = pos.node();
744
911k
        auto idx     = pos.index(pos.size() - 1);
745
911k
        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
746
911k
        auto mutate  = Mutating && node->can_mutate(e);
747
911k
        if (mutate) {
748
909k
            node->inner()[new_idx] =
749
909k
                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
750
                               /* otherwise */
751
909k
                               : node_t::make_path_e(e, pos.shift() - B, tail);
752
909k
            return node;
753
909k
        } else {
754
2.30k
            auto new_parent = node_t::make_inner_e(e);
755
2.30k
            IMMER_TRY {
756
2.30k
                new_parent->inner()[new_idx] =
757
2.30k
                    idx == new_idx
758
2.30k
                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
759
                        /* otherwise */
760
2.30k
                        : node_t::make_path_e(e, pos.shift() - B, tail);
761
2.30k
                node_t::do_copy_inner(new_parent, node, new_idx);
762
2.30k
                if (Mutating)
763
2.30k
                    pos.visit(dec_visitor{});
764
2.30k
                return new_parent;
765
2.30k
            }
766
2.30k
            IMMER_CATCH (...) {
767
0
                node_t::delete_inner_e(new_parent);
768
0
                IMMER_RETHROW;
769
0
            }
770
2.30k
        }
771
911k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Line
Count
Source
741
5.18k
    {
742
5.18k
        assert((pos.size() & mask<BL>) == 0);
743
5.18k
        auto node    = pos.node();
744
5.18k
        auto idx     = pos.index(pos.size() - 1);
745
5.18k
        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
746
5.18k
        auto mutate  = Mutating && node->can_mutate(e);
747
5.18k
        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
5.18k
        } else {
754
5.18k
            auto new_parent = node_t::make_inner_e(e);
755
5.18k
            IMMER_TRY {
756
5.18k
                new_parent->inner()[new_idx] =
757
5.18k
                    idx == new_idx
758
5.18k
                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
759
                        /* otherwise */
760
5.18k
                        : node_t::make_path_e(e, pos.shift() - B, tail);
761
5.18k
                node_t::do_copy_inner(new_parent, node, new_idx);
762
5.18k
                if (Mutating)
763
0
                    pos.visit(dec_visitor{});
764
5.18k
                return new_parent;
765
5.18k
            }
766
5.18k
            IMMER_CATCH (...) {
767
0
                node_t::delete_inner_e(new_parent);
768
0
                IMMER_RETHROW;
769
0
            }
770
5.18k
        }
771
5.18k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, 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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Line
Count
Source
741
167k
    {
742
167k
        assert((pos.size() & mask<BL>) == 0);
743
167k
        auto node    = pos.node();
744
167k
        auto idx     = pos.index(pos.size() - 1);
745
167k
        auto new_idx = pos.index(pos.size() + branches<BL> - 1);
746
167k
        auto mutate  = Mutating && node->can_mutate(e);
747
167k
        if (mutate) {
748
167k
            node->inner()[new_idx] =
749
167k
                idx == new_idx ? pos.last_oh(this_t{}, idx, e, tail)
750
                               /* otherwise */
751
167k
                               : node_t::make_path_e(e, pos.shift() - B, tail);
752
167k
            return node;
753
167k
        } else {
754
599
            auto new_parent = node_t::make_inner_e(e);
755
599
            IMMER_TRY {
756
599
                new_parent->inner()[new_idx] =
757
599
                    idx == new_idx
758
599
                        ? pos.last_oh(this_no_mut_t{}, idx, e, tail)
759
                        /* otherwise */
760
599
                        : node_t::make_path_e(e, pos.shift() - B, tail);
761
599
                node_t::do_copy_inner(new_parent, node, new_idx);
762
599
                if (Mutating)
763
599
                    pos.visit(dec_visitor{});
764
599
                return new_parent;
765
599
            }
766
599
            IMMER_CATCH (...) {
767
0
                node_t::delete_inner_e(new_parent);
768
0
                IMMER_RETHROW;
769
0
            }
770
599
        }
771
167k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int&)
Unexecuted instantiation: immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Unexecuted instantiation: immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Unexecuted instantiation: immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, 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
219k
    {
792
219k
        auto level    = pos.shift();
793
219k
        auto idx      = pos.count() - 1;
794
219k
        auto children = pos.size(idx);
795
219k
        auto new_idx =
796
219k
            children == size_t{1} << level || level == BL ? idx + 1 : idx;
797
219k
        auto new_child = static_cast<node_t*>(nullptr);
798
219k
        if (new_idx >= branches<B>)
799
4.00k
            return nullptr;
800
215k
        else if (idx == new_idx) {
801
205k
            new_child = pos.last_oh_csh(this_t{}, idx, children, tail, ts);
802
205k
            if (!new_child) {
803
4.65k
                if (++new_idx < branches<B>)
804
2.13k
                    new_child = node_t::make_path(level - B, tail);
805
2.51k
                else
806
2.51k
                    return nullptr;
807
4.65k
            }
808
205k
        } else
809
10.2k
            new_child = node_t::make_path(level - B, tail);
810
213k
        IMMER_TRY {
811
213k
            auto count = new_idx + 1;
812
213k
            auto new_parent =
813
213k
                node_t::copy_inner_r_n(count, pos.node(), new_idx);
814
213k
            auto new_relaxed              = new_parent->relaxed();
815
213k
            new_parent->inner()[new_idx]  = new_child;
816
213k
            new_relaxed->d.sizes[new_idx] = pos.size() + ts;
817
213k
            new_relaxed->d.count          = count;
818
213k
            assert(new_relaxed->d.sizes[new_idx]);
819
213k
            return new_parent;
820
213k
        }
821
213k
        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
213k
    }
831
832
    template <typename Pos, typename... Args>
833
    static node_t* visit_regular(Pos&& pos, node_t* tail, Args&&...)
834
1.37M
    {
835
1.37M
        assert((pos.size() & mask<BL>) == 0);
836
1.37M
        auto idx        = pos.index(pos.size() - 1);
837
1.37M
        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
838
1.37M
        auto count      = new_idx + 1;
839
1.37M
        auto new_parent = node_t::make_inner_n(count);
840
1.37M
        IMMER_TRY {
841
1.37M
            new_parent->inner()[new_idx] =
842
1.37M
                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
843
                               /* otherwise */
844
1.37M
                               : node_t::make_path(pos.shift() - B, tail);
845
1.37M
        }
846
1.37M
        IMMER_CATCH (...) {
847
0
            node_t::delete_inner(new_parent, count);
848
0
            IMMER_RETHROW;
849
0
        }
850
1.37M
        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
851
1.37M
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int&)
Line
Count
Source
834
49.1k
    {
835
49.1k
        assert((pos.size() & mask<BL>) == 0);
836
49.1k
        auto idx        = pos.index(pos.size() - 1);
837
49.1k
        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
838
49.1k
        auto count      = new_idx + 1;
839
49.1k
        auto new_parent = node_t::make_inner_n(count);
840
49.1k
        IMMER_TRY {
841
49.1k
            new_parent->inner()[new_idx] =
842
49.1k
                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
843
                               /* otherwise */
844
49.1k
                               : node_t::make_path(pos.shift() - B, tail);
845
49.1k
        }
846
49.1k
        IMMER_CATCH (...) {
847
0
            node_t::delete_inner(new_parent, count);
848
0
            IMMER_RETHROW;
849
0
        }
850
49.1k
        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
851
49.1k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Line
Count
Source
834
994k
    {
835
994k
        assert((pos.size() & mask<BL>) == 0);
836
994k
        auto idx        = pos.index(pos.size() - 1);
837
994k
        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
838
994k
        auto count      = new_idx + 1;
839
994k
        auto new_parent = node_t::make_inner_n(count);
840
994k
        IMMER_TRY {
841
994k
            new_parent->inner()[new_idx] =
842
994k
                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
843
                               /* otherwise */
844
994k
                               : node_t::make_path(pos.shift() - B, tail);
845
994k
        }
846
994k
        IMMER_CATCH (...) {
847
0
            node_t::delete_inner(new_parent, count);
848
0
            IMMER_RETHROW;
849
0
        }
850
994k
        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
851
994k
    }
immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
Line
Count
Source
834
329k
    {
835
329k
        assert((pos.size() & mask<BL>) == 0);
836
329k
        auto idx        = pos.index(pos.size() - 1);
837
329k
        auto new_idx    = pos.index(pos.size() + branches<BL> - 1);
838
329k
        auto count      = new_idx + 1;
839
329k
        auto new_parent = node_t::make_inner_n(count);
840
329k
        IMMER_TRY {
841
329k
            new_parent->inner()[new_idx] =
842
329k
                idx == new_idx ? pos.last_oh(this_t{}, idx, tail)
843
                               /* otherwise */
844
329k
                               : node_t::make_path(pos.shift() - B, tail);
845
329k
        }
846
329k
        IMMER_CATCH (...) {
847
0
            node_t::delete_inner(new_parent, count);
848
0
            IMMER_RETHROW;
849
0
        }
850
329k
        return node_t::do_copy_inner(new_parent, pos.node(), new_idx);
851
329k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int&)
Unexecuted instantiation: immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>* immer::detail::rbts::push_tail_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*)
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
23.6k
    {
868
23.6k
        using node_t = node_type<Pos>;
869
23.6k
        auto node    = p.node();
870
23.6k
        if (node->dec()) {
871
18.9k
            p.each_right(dec_t{}, idx);
872
18.9k
            node_t::delete_inner_r(node, p.count());
873
18.9k
        }
874
23.6k
    }
875
876
    template <typename Pos>
877
    static void visit_regular(Pos&& p, count_t idx)
878
15.4k
    {
879
15.4k
        using node_t = node_type<Pos>;
880
15.4k
        auto node    = p.node();
881
15.4k
        if (node->dec()) {
882
10.7k
            p.each_right(dec_t{}, idx);
883
10.7k
            node_t::delete_inner(node, p.count());
884
10.7k
        }
885
15.4k
    }
void immer::detail::rbts::dec_right_visitor::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int)
Line
Count
Source
878
3.43k
    {
879
3.43k
        using node_t = node_type<Pos>;
880
3.43k
        auto node    = p.node();
881
3.43k
        if (node->dec()) {
882
2.14k
            p.each_right(dec_t{}, idx);
883
2.14k
            node_t::delete_inner(node, p.count());
884
2.14k
        }
885
3.43k
    }
void immer::detail::rbts::dec_right_visitor::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int)
Line
Count
Source
878
1.53k
    {
879
1.53k
        using node_t = node_type<Pos>;
880
1.53k
        auto node    = p.node();
881
1.53k
        if (node->dec()) {
882
1.33k
            p.each_right(dec_t{}, idx);
883
1.33k
            node_t::delete_inner(node, p.count());
884
1.33k
        }
885
1.53k
    }
void immer::detail::rbts::dec_right_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int)
Line
Count
Source
878
10.4k
    {
879
10.4k
        using node_t = node_type<Pos>;
880
10.4k
        auto node    = p.node();
881
10.4k
        if (node->dec()) {
882
7.28k
            p.each_right(dec_t{}, idx);
883
7.28k
            node_t::delete_inner(node, p.count());
884
7.28k
        }
885
10.4k
    }
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
49.9k
    {
914
49.9k
        auto idx    = pos.index(last);
915
49.9k
        auto node   = pos.node();
916
49.9k
        auto mutate = Mutating && node->can_mutate(e);
917
49.9k
        if (Collapse && idx == 0) {
918
29.0k
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
919
29.0k
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
920
29.0k
            if (Mutating)
921
20.5k
                pos.visit(dec_right_visitor{}, count_t{1});
922
29.0k
            return res;
923
29.0k
        } else {
924
20.9k
            using std::get;
925
20.9k
            auto subs =
926
20.9k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
927
20.9k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
928
20.9k
            auto next = get<1>(subs);
929
20.9k
            auto ts   = get<2>(subs);
930
20.9k
            auto tail = get<3>(subs);
931
20.9k
            IMMER_TRY {
932
20.9k
                if (next) {
933
11.2k
                    if (mutate) {
934
6.47k
                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
935
6.47k
                        pos.each_right(dec_visitor{}, idx + 1);
936
6.47k
                        node->inner()[idx] = next;
937
6.47k
                        nodr->d.sizes[idx] = last + 1 - ts;
938
6.47k
                        nodr->d.count      = idx + 1;
939
6.47k
                        assert(nodr->d.sizes[idx]);
940
6.47k
                        return std::make_tuple(pos.shift(), node, ts, tail);
941
6.47k
                    } else {
942
4.81k
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
943
4.81k
                        auto newr = newn->relaxed();
944
4.81k
                        newn->inner()[idx] = next;
945
4.81k
                        newr->d.sizes[idx] = last + 1 - ts;
946
4.81k
                        newr->d.count      = idx + 1;
947
4.81k
                        assert(newr->d.sizes[idx]);
948
4.81k
                        if (Mutating)
949
3.64k
                            pos.visit(dec_visitor{});
950
4.81k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
951
4.81k
                    }
952
11.2k
                } else if (idx == 0) {
953
1.64k
                    if (Mutating)
954
684
                        pos.visit(dec_right_visitor{}, count_t{1});
955
1.64k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
956
8.02k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
957
2.73k
                    auto newn = pos.node()->inner()[0];
958
2.73k
                    if (!mutate)
959
1.17k
                        newn->inc();
960
2.73k
                    if (Mutating)
961
2.40k
                        pos.visit(dec_right_visitor{}, count_t{2});
962
2.73k
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
963
5.28k
                } else {
964
5.28k
                    if (mutate) {
965
1.74k
                        pos.each_right(dec_visitor{}, idx + 1);
966
1.74k
                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
967
1.74k
                        return std::make_tuple(pos.shift(), node, ts, tail);
968
3.53k
                    } else {
969
3.53k
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
970
3.53k
                        if (Mutating)
971
1.13k
                            pos.visit(dec_visitor{});
972
3.53k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
973
3.53k
                    }
974
5.28k
                }
975
20.9k
            }
976
20.9k
            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
20.9k
        }
987
49.9k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, true>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
913
33.3k
    {
914
33.3k
        auto idx    = pos.index(last);
915
33.3k
        auto node   = pos.node();
916
33.3k
        auto mutate = Mutating && node->can_mutate(e);
917
33.3k
        if (Collapse && idx == 0) {
918
20.5k
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
919
20.5k
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
920
20.5k
            if (Mutating)
921
20.5k
                pos.visit(dec_right_visitor{}, count_t{1});
922
20.5k
            return res;
923
20.5k
        } else {
924
12.8k
            using std::get;
925
12.8k
            auto subs =
926
12.8k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
927
12.8k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
928
12.8k
            auto next = get<1>(subs);
929
12.8k
            auto ts   = get<2>(subs);
930
12.8k
            auto tail = get<3>(subs);
931
12.8k
            IMMER_TRY {
932
12.8k
                if (next) {
933
9.03k
                    if (mutate) {
934
5.89k
                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
935
5.89k
                        pos.each_right(dec_visitor{}, idx + 1);
936
5.89k
                        node->inner()[idx] = next;
937
5.89k
                        nodr->d.sizes[idx] = last + 1 - ts;
938
5.89k
                        nodr->d.count      = idx + 1;
939
5.89k
                        assert(nodr->d.sizes[idx]);
940
5.89k
                        return std::make_tuple(pos.shift(), node, ts, tail);
941
5.89k
                    } else {
942
3.14k
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
943
3.14k
                        auto newr = newn->relaxed();
944
3.14k
                        newn->inner()[idx] = next;
945
3.14k
                        newr->d.sizes[idx] = last + 1 - ts;
946
3.14k
                        newr->d.count      = idx + 1;
947
3.14k
                        assert(newr->d.sizes[idx]);
948
3.14k
                        if (Mutating)
949
3.14k
                            pos.visit(dec_visitor{});
950
3.14k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
951
3.14k
                    }
952
9.03k
                } 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
3.76k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
957
2.40k
                    auto newn = pos.node()->inner()[0];
958
2.40k
                    if (!mutate)
959
844
                        newn->inc();
960
2.40k
                    if (Mutating)
961
2.40k
                        pos.visit(dec_right_visitor{}, count_t{2});
962
2.40k
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
963
2.40k
                } else {
964
1.36k
                    if (mutate) {
965
911
                        pos.each_right(dec_visitor{}, idx + 1);
966
911
                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
967
911
                        return std::make_tuple(pos.shift(), node, ts, tail);
968
911
                    } else {
969
452
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
970
452
                        if (Mutating)
971
452
                            pos.visit(dec_visitor{});
972
452
                        return std::make_tuple(pos.shift(), newn, ts, tail);
973
452
                    }
974
1.36k
                }
975
12.8k
            }
976
12.8k
            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
12.8k
        }
987
33.3k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, false>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
913
10.0k
    {
914
10.0k
        auto idx    = pos.index(last);
915
10.0k
        auto node   = pos.node();
916
10.0k
        auto mutate = Mutating && node->can_mutate(e);
917
10.0k
        if (Collapse && idx == 0) {
918
8.50k
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
919
8.50k
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
920
8.50k
            if (Mutating)
921
0
                pos.visit(dec_right_visitor{}, count_t{1});
922
8.50k
            return res;
923
8.50k
        } else {
924
1.55k
            using std::get;
925
1.55k
            auto subs =
926
1.55k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
927
1.55k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
928
1.55k
            auto next = get<1>(subs);
929
1.55k
            auto ts   = get<2>(subs);
930
1.55k
            auto tail = get<3>(subs);
931
1.55k
            IMMER_TRY {
932
1.55k
                if (next) {
933
595
                    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
595
                    } else {
942
595
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
943
595
                        auto newr = newn->relaxed();
944
595
                        newn->inner()[idx] = next;
945
595
                        newr->d.sizes[idx] = last + 1 - ts;
946
595
                        newr->d.count      = idx + 1;
947
595
                        assert(newr->d.sizes[idx]);
948
595
                        if (Mutating)
949
0
                            pos.visit(dec_visitor{});
950
595
                        return std::make_tuple(pos.shift(), newn, ts, tail);
951
595
                    }
952
960
                } 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
960
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
957
332
                    auto newn = pos.node()->inner()[0];
958
332
                    if (!mutate)
959
332
                        newn->inc();
960
332
                    if (Mutating)
961
0
                        pos.visit(dec_right_visitor{}, count_t{2});
962
332
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
963
628
                } else {
964
628
                    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
628
                    } else {
969
628
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
970
628
                        if (Mutating)
971
0
                            pos.visit(dec_visitor{});
972
628
                        return std::make_tuple(pos.shift(), newn, ts, tail);
973
628
                    }
974
628
                }
975
1.55k
            }
976
1.55k
            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.55k
        }
987
10.0k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, true>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
913
3.28k
    {
914
3.28k
        auto idx    = pos.index(last);
915
3.28k
        auto node   = pos.node();
916
3.28k
        auto mutate = Mutating && node->can_mutate(e);
917
3.28k
        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
3.28k
        } else {
924
3.28k
            using std::get;
925
3.28k
            auto subs =
926
3.28k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
927
3.28k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
928
3.28k
            auto next = get<1>(subs);
929
3.28k
            auto ts   = get<2>(subs);
930
3.28k
            auto tail = get<3>(subs);
931
3.28k
            IMMER_TRY {
932
3.28k
                if (next) {
933
1.08k
                    if (mutate) {
934
585
                        auto nodr = node->ensure_mutable_relaxed_n(e, idx);
935
585
                        pos.each_right(dec_visitor{}, idx + 1);
936
585
                        node->inner()[idx] = next;
937
585
                        nodr->d.sizes[idx] = last + 1 - ts;
938
585
                        nodr->d.count      = idx + 1;
939
585
                        assert(nodr->d.sizes[idx]);
940
585
                        return std::make_tuple(pos.shift(), node, ts, tail);
941
585
                    } else {
942
497
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
943
497
                        auto newr = newn->relaxed();
944
497
                        newn->inner()[idx] = next;
945
497
                        newr->d.sizes[idx] = last + 1 - ts;
946
497
                        newr->d.count      = idx + 1;
947
497
                        assert(newr->d.sizes[idx]);
948
497
                        if (Mutating)
949
497
                            pos.visit(dec_visitor{});
950
497
                        return std::make_tuple(pos.shift(), newn, ts, tail);
951
497
                    }
952
2.20k
                } else if (idx == 0) {
953
684
                    if (Mutating)
954
684
                        pos.visit(dec_right_visitor{}, count_t{1});
955
684
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
956
1.52k
                } 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.52k
                } else {
964
1.52k
                    if (mutate) {
965
837
                        pos.each_right(dec_visitor{}, idx + 1);
966
837
                        node->ensure_mutable_relaxed_n(e, idx)->d.count = idx;
967
837
                        return std::make_tuple(pos.shift(), node, ts, tail);
968
837
                    } else {
969
685
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
970
685
                        if (Mutating)
971
685
                            pos.visit(dec_visitor{});
972
685
                        return std::make_tuple(pos.shift(), newn, ts, tail);
973
685
                    }
974
1.52k
                }
975
3.28k
            }
976
3.28k
            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
3.28k
        }
987
3.28k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, false>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
913
3.31k
    {
914
3.31k
        auto idx    = pos.index(last);
915
3.31k
        auto node   = pos.node();
916
3.31k
        auto mutate = Mutating && node->can_mutate(e);
917
3.31k
        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
3.31k
        } else {
924
3.31k
            using std::get;
925
3.31k
            auto subs =
926
3.31k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
927
3.31k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
928
3.31k
            auto next = get<1>(subs);
929
3.31k
            auto ts   = get<2>(subs);
930
3.31k
            auto tail = get<3>(subs);
931
3.31k
            IMMER_TRY {
932
3.31k
                if (next) {
933
577
                    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
577
                    } else {
942
577
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
943
577
                        auto newr = newn->relaxed();
944
577
                        newn->inner()[idx] = next;
945
577
                        newr->d.sizes[idx] = last + 1 - ts;
946
577
                        newr->d.count      = idx + 1;
947
577
                        assert(newr->d.sizes[idx]);
948
577
                        if (Mutating)
949
0
                            pos.visit(dec_visitor{});
950
577
                        return std::make_tuple(pos.shift(), newn, ts, tail);
951
577
                    }
952
2.73k
                } else if (idx == 0) {
953
965
                    if (Mutating)
954
0
                        pos.visit(dec_right_visitor{}, count_t{1});
955
965
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
956
1.77k
                } 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.77k
                } else {
964
1.77k
                    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.77k
                    } else {
969
1.77k
                        auto newn = node_t::copy_inner_r_e(e, node, idx);
970
1.77k
                        if (Mutating)
971
0
                            pos.visit(dec_visitor{});
972
1.77k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
973
1.77k
                    }
974
1.77k
                }
975
3.31k
            }
976
3.31k
            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
3.31k
        }
987
3.31k
    }
988
989
    template <typename PosT>
990
    static result_t visit_regular(PosT&& pos, size_t last, edit_t e)
991
43.0k
    {
992
43.0k
        auto idx    = pos.index(last);
993
43.0k
        auto node   = pos.node();
994
43.0k
        auto mutate = Mutating && node->can_mutate(e);
995
43.0k
        if (Collapse && idx == 0) {
996
10.4k
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
10.4k
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
10.4k
            if (Mutating)
999
9.22k
                pos.visit(dec_right_visitor{}, count_t{1});
1000
10.4k
            return res;
1001
32.6k
        } else {
1002
32.6k
            using std::get;
1003
32.6k
            auto subs =
1004
32.6k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
32.6k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
32.6k
            auto next = get<1>(subs);
1007
32.6k
            auto ts   = get<2>(subs);
1008
32.6k
            auto tail = get<3>(subs);
1009
32.6k
            IMMER_TRY {
1010
32.6k
                if (next) {
1011
11.8k
                    if (mutate) {
1012
5.09k
                        node->inner()[idx] = next;
1013
5.09k
                        pos.each_right(dec_visitor{}, idx + 1);
1014
5.09k
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
6.77k
                    } else {
1016
6.77k
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
6.77k
                        newn->inner()[idx] = next;
1018
6.77k
                        if (Mutating)
1019
2.36k
                            pos.visit(dec_visitor{});
1020
6.77k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
6.77k
                    }
1022
20.7k
                } else if (idx == 0) {
1023
5.84k
                    if (Mutating)
1024
3.68k
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
5.84k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
14.9k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
2.88k
                    auto newn = pos.node()->inner()[0];
1028
2.88k
                    if (!mutate)
1029
1.09k
                        newn->inc();
1030
2.88k
                    if (Mutating)
1031
2.49k
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
2.88k
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
12.0k
                } else {
1034
12.0k
                    if (mutate) {
1035
2.55k
                        pos.each_right(dec_visitor{}, idx + 1);
1036
2.55k
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
9.47k
                    } else {
1038
9.47k
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
9.47k
                        if (Mutating)
1040
3.14k
                            pos.visit(dec_visitor{});
1041
9.47k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
9.47k
                    }
1043
12.0k
                }
1044
32.6k
            }
1045
32.6k
            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
32.6k
        }
1055
43.0k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, false>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
991
1.32k
    {
992
1.32k
        auto idx    = pos.index(last);
993
1.32k
        auto node   = pos.node();
994
1.32k
        auto mutate = Mutating && node->can_mutate(e);
995
1.32k
        if (Collapse && idx == 0) {
996
426
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
426
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
426
            if (Mutating)
999
0
                pos.visit(dec_right_visitor{}, count_t{1});
1000
426
            return res;
1001
901
        } else {
1002
901
            using std::get;
1003
901
            auto subs =
1004
901
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
901
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
901
            auto next = get<1>(subs);
1007
901
            auto ts   = get<2>(subs);
1008
901
            auto tail = get<3>(subs);
1009
901
            IMMER_TRY {
1010
901
                if (next) {
1011
263
                    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
263
                    } else {
1016
263
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
263
                        newn->inner()[idx] = next;
1018
263
                        if (Mutating)
1019
0
                            pos.visit(dec_visitor{});
1020
263
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
263
                    }
1022
638
                } 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
638
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
196
                    auto newn = pos.node()->inner()[0];
1028
196
                    if (!mutate)
1029
196
                        newn->inc();
1030
196
                    if (Mutating)
1031
0
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
196
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
442
                } else {
1034
442
                    if (mutate) {
1035
0
                        pos.each_right(dec_visitor{}, idx + 1);
1036
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
442
                    } else {
1038
442
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
442
                        if (Mutating)
1040
0
                            pos.visit(dec_visitor{});
1041
442
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
442
                    }
1043
442
                }
1044
901
            }
1045
901
            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
901
        }
1055
1.32k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, false>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
991
1.79k
    {
992
1.79k
        auto idx    = pos.index(last);
993
1.79k
        auto node   = pos.node();
994
1.79k
        auto mutate = Mutating && node->can_mutate(e);
995
1.79k
        if (Collapse && idx == 0) {
996
808
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
808
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
808
            if (Mutating)
999
0
                pos.visit(dec_right_visitor{}, count_t{1});
1000
808
            return res;
1001
988
        } else {
1002
988
            using std::get;
1003
988
            auto subs =
1004
988
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
988
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
988
            auto next = get<1>(subs);
1007
988
            auto ts   = get<2>(subs);
1008
988
            auto tail = get<3>(subs);
1009
988
            IMMER_TRY {
1010
988
                if (next) {
1011
285
                    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
285
                    } else {
1016
285
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
285
                        newn->inner()[idx] = next;
1018
285
                        if (Mutating)
1019
0
                            pos.visit(dec_visitor{});
1020
285
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
285
                    }
1022
703
                } 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
703
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
196
                    auto newn = pos.node()->inner()[0];
1028
196
                    if (!mutate)
1029
196
                        newn->inc();
1030
196
                    if (Mutating)
1031
0
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
196
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
507
                } else {
1034
507
                    if (mutate) {
1035
0
                        pos.each_right(dec_visitor{}, idx + 1);
1036
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
507
                    } else {
1038
507
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
507
                        if (Mutating)
1040
0
                            pos.visit(dec_visitor{});
1041
507
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
507
                    }
1043
507
                }
1044
988
            }
1045
988
            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
988
        }
1055
1.79k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, true>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
991
3.77k
    {
992
3.77k
        auto idx    = pos.index(last);
993
3.77k
        auto node   = pos.node();
994
3.77k
        auto mutate = Mutating && node->can_mutate(e);
995
3.77k
        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.77k
        } else {
1002
3.77k
            using std::get;
1003
3.77k
            auto subs =
1004
3.77k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
3.77k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
3.77k
            auto next = get<1>(subs);
1007
3.77k
            auto ts   = get<2>(subs);
1008
3.77k
            auto tail = get<3>(subs);
1009
3.77k
            IMMER_TRY {
1010
3.77k
                if (next) {
1011
1.00k
                    if (mutate) {
1012
438
                        node->inner()[idx] = next;
1013
438
                        pos.each_right(dec_visitor{}, idx + 1);
1014
438
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
563
                    } else {
1016
563
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
563
                        newn->inner()[idx] = next;
1018
563
                        if (Mutating)
1019
563
                            pos.visit(dec_visitor{});
1020
563
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
563
                    }
1022
2.77k
                } else if (idx == 0) {
1023
982
                    if (Mutating)
1024
982
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
982
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
1.79k
                } 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.79k
                } else {
1034
1.79k
                    if (mutate) {
1035
379
                        pos.each_right(dec_visitor{}, idx + 1);
1036
379
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
1.41k
                    } else {
1038
1.41k
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
1.41k
                        if (Mutating)
1040
1.41k
                            pos.visit(dec_visitor{});
1041
1.41k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
1.41k
                    }
1043
1.79k
                }
1044
3.77k
            }
1045
3.77k
            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.77k
        }
1055
3.77k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, false>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
991
5.11k
    {
992
5.11k
        auto idx    = pos.index(last);
993
5.11k
        auto node   = pos.node();
994
5.11k
        auto mutate = Mutating && node->can_mutate(e);
995
5.11k
        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
5.11k
        } else {
1002
5.11k
            using std::get;
1003
5.11k
            auto subs =
1004
5.11k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
5.11k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
5.11k
            auto next = get<1>(subs);
1007
5.11k
            auto ts   = get<2>(subs);
1008
5.11k
            auto tail = get<3>(subs);
1009
5.11k
            IMMER_TRY {
1010
5.11k
                if (next) {
1011
796
                    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
796
                    } else {
1016
796
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
796
                        newn->inner()[idx] = next;
1018
796
                        if (Mutating)
1019
0
                            pos.visit(dec_visitor{});
1020
796
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
796
                    }
1022
4.31k
                } else if (idx == 0) {
1023
832
                    if (Mutating)
1024
0
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
832
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
3.48k
                } 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.48k
                } else {
1034
3.48k
                    if (mutate) {
1035
0
                        pos.each_right(dec_visitor{}, idx + 1);
1036
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
3.48k
                    } else {
1038
3.48k
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
3.48k
                        if (Mutating)
1040
0
                            pos.visit(dec_visitor{});
1041
3.48k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
3.48k
                    }
1043
3.48k
                }
1044
5.11k
            }
1045
5.11k
            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.11k
        }
1055
5.11k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, false>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, true>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
991
3.83k
    {
992
3.83k
        auto idx    = pos.index(last);
993
3.83k
        auto node   = pos.node();
994
3.83k
        auto mutate = Mutating && node->can_mutate(e);
995
3.83k
        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.83k
        } else {
1002
3.83k
            using std::get;
1003
3.83k
            auto subs =
1004
3.83k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
3.83k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
3.83k
            auto next = get<1>(subs);
1007
3.83k
            auto ts   = get<2>(subs);
1008
3.83k
            auto tail = get<3>(subs);
1009
3.83k
            IMMER_TRY {
1010
3.83k
                if (next) {
1011
1.49k
                    if (mutate) {
1012
1.03k
                        node->inner()[idx] = next;
1013
1.03k
                        pos.each_right(dec_visitor{}, idx + 1);
1014
1.03k
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
1.03k
                    } else {
1016
463
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
463
                        newn->inner()[idx] = next;
1018
463
                        if (Mutating)
1019
463
                            pos.visit(dec_visitor{});
1020
463
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
463
                    }
1022
2.34k
                } else if (idx == 0) {
1023
1.53k
                    if (Mutating)
1024
1.53k
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
1.53k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
1.53k
                } 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
806
                } else {
1034
806
                    if (mutate) {
1035
556
                        pos.each_right(dec_visitor{}, idx + 1);
1036
556
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
556
                    } else {
1038
250
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
250
                        if (Mutating)
1040
250
                            pos.visit(dec_visitor{});
1041
250
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
250
                    }
1043
806
                }
1044
3.83k
            }
1045
3.83k
            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.83k
        }
1055
3.83k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, false>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
991
3.16k
    {
992
3.16k
        auto idx    = pos.index(last);
993
3.16k
        auto node   = pos.node();
994
3.16k
        auto mutate = Mutating && node->can_mutate(e);
995
3.16k
        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.16k
        } else {
1002
3.16k
            using std::get;
1003
3.16k
            auto subs =
1004
3.16k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
3.16k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
3.16k
            auto next = get<1>(subs);
1007
3.16k
            auto ts   = get<2>(subs);
1008
3.16k
            auto tail = get<3>(subs);
1009
3.16k
            IMMER_TRY {
1010
3.16k
                if (next) {
1011
940
                    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
940
                    } else {
1016
940
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
940
                        newn->inner()[idx] = next;
1018
940
                        if (Mutating)
1019
0
                            pos.visit(dec_visitor{});
1020
940
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
940
                    }
1022
2.22k
                } else if (idx == 0) {
1023
665
                    if (Mutating)
1024
0
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
665
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
1.55k
                } 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.55k
                } else {
1034
1.55k
                    if (mutate) {
1035
0
                        pos.each_right(dec_visitor{}, idx + 1);
1036
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
1.55k
                    } else {
1038
1.55k
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
1.55k
                        if (Mutating)
1040
0
                            pos.visit(dec_visitor{});
1041
1.55k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
1.55k
                    }
1043
1.55k
                }
1044
3.16k
            }
1045
3.16k
            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.16k
        }
1055
3.16k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
991
5.04k
    {
992
5.04k
        auto idx    = pos.index(last);
993
5.04k
        auto node   = pos.node();
994
5.04k
        auto mutate = Mutating && node->can_mutate(e);
995
5.04k
        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
5.04k
        } 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
3.29k
                    if (mutate) {
1012
2.75k
                        node->inner()[idx] = next;
1013
2.75k
                        pos.each_right(dec_visitor{}, idx + 1);
1014
2.75k
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
2.75k
                    } else {
1016
539
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
539
                        newn->inner()[idx] = next;
1018
539
                        if (Mutating)
1019
539
                            pos.visit(dec_visitor{});
1020
539
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
539
                    }
1022
3.29k
                } else if (idx == 0) {
1023
1.17k
                    if (Mutating)
1024
1.17k
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
1.17k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
1.17k
                } 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
578
                } else {
1034
578
                    if (mutate) {
1035
205
                        pos.each_right(dec_visitor{}, idx + 1);
1036
205
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
373
                    } else {
1038
373
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
373
                        if (Mutating)
1040
373
                            pos.visit(dec_visitor{});
1041
373
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
373
                    }
1043
578
                }
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
5.04k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, false>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
991
3.12k
    {
992
3.12k
        auto idx    = pos.index(last);
993
3.12k
        auto node   = pos.node();
994
3.12k
        auto mutate = Mutating && node->can_mutate(e);
995
3.12k
        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.12k
        } else {
1002
3.12k
            using std::get;
1003
3.12k
            auto subs =
1004
3.12k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
3.12k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
3.12k
            auto next = get<1>(subs);
1007
3.12k
            auto ts   = get<2>(subs);
1008
3.12k
            auto tail = get<3>(subs);
1009
3.12k
            IMMER_TRY {
1010
3.12k
                if (next) {
1011
2.12k
                    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
2.12k
                    } else {
1016
2.12k
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
2.12k
                        newn->inner()[idx] = next;
1018
2.12k
                        if (Mutating)
1019
0
                            pos.visit(dec_visitor{});
1020
2.12k
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
2.12k
                    }
1022
2.12k
                } else if (idx == 0) {
1023
662
                    if (Mutating)
1024
0
                        pos.visit(dec_right_visitor{}, count_t{1});
1025
662
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1026
662
                } 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
335
                } else {
1034
335
                    if (mutate) {
1035
0
                        pos.each_right(dec_visitor{}, idx + 1);
1036
0
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
335
                    } else {
1038
335
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
335
                        if (Mutating)
1040
0
                            pos.visit(dec_visitor{});
1041
335
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
335
                    }
1043
335
                }
1044
3.12k
            }
1045
3.12k
            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.12k
        }
1055
3.12k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
991
12.2k
    {
992
12.2k
        auto idx    = pos.index(last);
993
12.2k
        auto node   = pos.node();
994
12.2k
        auto mutate = Mutating && node->can_mutate(e);
995
12.2k
        if (Collapse && idx == 0) {
996
7.22k
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
7.22k
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
7.22k
            if (Mutating)
999
7.22k
                pos.visit(dec_right_visitor{}, count_t{1});
1000
7.22k
            return res;
1001
7.22k
        } else {
1002
4.98k
            using std::get;
1003
4.98k
            auto subs =
1004
4.98k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
4.98k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
4.98k
            auto next = get<1>(subs);
1007
4.98k
            auto ts   = get<2>(subs);
1008
4.98k
            auto tail = get<3>(subs);
1009
4.98k
            IMMER_TRY {
1010
4.98k
                if (next) {
1011
1.20k
                    if (mutate) {
1012
670
                        node->inner()[idx] = next;
1013
670
                        pos.each_right(dec_visitor{}, idx + 1);
1014
670
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
670
                    } else {
1016
537
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
537
                        newn->inner()[idx] = next;
1018
537
                        if (Mutating)
1019
537
                            pos.visit(dec_visitor{});
1020
537
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
537
                    }
1022
3.77k
                } 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.77k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
2.04k
                    auto newn = pos.node()->inner()[0];
1028
2.04k
                    if (!mutate)
1029
513
                        newn->inc();
1030
2.04k
                    if (Mutating)
1031
2.04k
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
2.04k
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
2.04k
                } else {
1034
1.73k
                    if (mutate) {
1035
1.10k
                        pos.each_right(dec_visitor{}, idx + 1);
1036
1.10k
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
1.10k
                    } else {
1038
626
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
626
                        if (Mutating)
1040
626
                            pos.visit(dec_visitor{});
1041
626
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
626
                    }
1043
1.73k
                }
1044
4.98k
            }
1045
4.98k
            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.98k
        }
1055
12.2k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, true>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
991
3.71k
    {
992
3.71k
        auto idx    = pos.index(last);
993
3.71k
        auto node   = pos.node();
994
3.71k
        auto mutate = Mutating && node->can_mutate(e);
995
3.71k
        if (Collapse && idx == 0) {
996
2.00k
            auto res = mutate ? pos.towards_oh(this_t{}, last, idx, e)
997
2.00k
                              : pos.towards_oh(no_mut_t{}, last, idx, e);
998
2.00k
            if (Mutating)
999
2.00k
                pos.visit(dec_right_visitor{}, count_t{1});
1000
2.00k
            return res;
1001
2.00k
        } else {
1002
1.71k
            using std::get;
1003
1.71k
            auto subs =
1004
1.71k
                mutate ? pos.towards_oh(no_collapse_t{}, last, idx, e)
1005
1.71k
                       : pos.towards_oh(no_collapse_no_mut_t{}, last, idx, e);
1006
1.71k
            auto next = get<1>(subs);
1007
1.71k
            auto ts   = get<2>(subs);
1008
1.71k
            auto tail = get<3>(subs);
1009
1.71k
            IMMER_TRY {
1010
1.71k
                if (next) {
1011
462
                    if (mutate) {
1012
200
                        node->inner()[idx] = next;
1013
200
                        pos.each_right(dec_visitor{}, idx + 1);
1014
200
                        return std::make_tuple(pos.shift(), node, ts, tail);
1015
262
                    } else {
1016
262
                        auto newn          = node_t::copy_inner_e(e, node, idx);
1017
262
                        newn->inner()[idx] = next;
1018
262
                        if (Mutating)
1019
262
                            pos.visit(dec_visitor{});
1020
262
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1021
262
                    }
1022
1.24k
                } 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.24k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1027
452
                    auto newn = pos.node()->inner()[0];
1028
452
                    if (!mutate)
1029
194
                        newn->inc();
1030
452
                    if (Mutating)
1031
452
                        pos.visit(dec_right_visitor{}, count_t{2});
1032
452
                    return std::make_tuple(pos.shift() - B, newn, ts, tail);
1033
797
                } else {
1034
797
                    if (mutate) {
1035
312
                        pos.each_right(dec_visitor{}, idx + 1);
1036
312
                        return std::make_tuple(pos.shift(), node, ts, tail);
1037
485
                    } else {
1038
485
                        auto newn = node_t::copy_inner_e(e, node, idx);
1039
485
                        if (Mutating)
1040
485
                            pos.visit(dec_visitor{});
1041
485
                        return std::make_tuple(pos.shift(), newn, ts, tail);
1042
485
                    }
1043
797
                }
1044
1.71k
            }
1045
1.71k
            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.71k
        }
1055
3.71k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, true>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
1056
1057
    template <typename PosT>
1058
    static result_t visit_leaf(PosT&& pos, size_t last, edit_t e)
1059
29.6k
    {
1060
29.6k
        auto old_tail_size = pos.count();
1061
29.6k
        auto new_tail_size = pos.index(last) + 1;
1062
29.6k
        auto node          = pos.node();
1063
29.6k
        auto mutate        = Mutating && node->can_mutate(e);
1064
29.6k
        if (new_tail_size == old_tail_size) {
1065
9.69k
            if (!Mutating)
1066
6.88k
                node->inc();
1067
9.69k
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
19.9k
        } else if (mutate) {
1069
1.95k
            detail::destroy_n(node->leaf() + new_tail_size,
1070
1.95k
                              old_tail_size - new_tail_size);
1071
1.95k
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
17.9k
        } else {
1073
17.9k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
17.9k
            if (Mutating)
1075
5.20k
                pos.visit(dec_visitor{});
1076
17.9k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
17.9k
        }
1078
29.6k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1059
1.02k
    {
1060
1.02k
        auto old_tail_size = pos.count();
1061
1.02k
        auto new_tail_size = pos.index(last) + 1;
1062
1.02k
        auto node          = pos.node();
1063
1.02k
        auto mutate        = Mutating && node->can_mutate(e);
1064
1.02k
        if (new_tail_size == old_tail_size) {
1065
206
            if (!Mutating)
1066
0
                node->inc();
1067
206
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
822
        } else if (mutate) {
1069
296
            detail::destroy_n(node->leaf() + new_tail_size,
1070
296
                              old_tail_size - new_tail_size);
1071
296
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
526
        } else {
1073
526
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
526
            if (Mutating)
1075
526
                pos.visit(dec_visitor{});
1076
526
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
526
        }
1078
1.02k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1059
699
    {
1060
699
        auto old_tail_size = pos.count();
1061
699
        auto new_tail_size = pos.index(last) + 1;
1062
699
        auto node          = pos.node();
1063
699
        auto mutate        = Mutating && node->can_mutate(e);
1064
699
        if (new_tail_size == old_tail_size) {
1065
360
            if (!Mutating)
1066
360
                node->inc();
1067
360
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
360
        } 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
339
        } else {
1073
339
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
339
            if (Mutating)
1075
0
                pos.visit(dec_visitor{});
1076
339
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
339
        }
1078
699
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, false>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1059
2.06k
    {
1060
2.06k
        auto old_tail_size = pos.count();
1061
2.06k
        auto new_tail_size = pos.index(last) + 1;
1062
2.06k
        auto node          = pos.node();
1063
2.06k
        auto mutate        = Mutating && node->can_mutate(e);
1064
2.06k
        if (new_tail_size == old_tail_size) {
1065
1.41k
            if (!Mutating)
1066
1.41k
                node->inc();
1067
1.41k
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
1.41k
        } 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
651
        } else {
1073
651
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
651
            if (Mutating)
1075
0
                pos.visit(dec_visitor{});
1076
651
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
651
        }
1078
2.06k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, true>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1059
3.08k
    {
1060
3.08k
        auto old_tail_size = pos.count();
1061
3.08k
        auto new_tail_size = pos.index(last) + 1;
1062
3.08k
        auto node          = pos.node();
1063
3.08k
        auto mutate        = Mutating && node->can_mutate(e);
1064
3.08k
        if (new_tail_size == old_tail_size) {
1065
1.35k
            if (!Mutating)
1066
0
                node->inc();
1067
1.35k
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
1.73k
        } else if (mutate) {
1069
265
            detail::destroy_n(node->leaf() + new_tail_size,
1070
265
                              old_tail_size - new_tail_size);
1071
265
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
1.46k
        } else {
1073
1.46k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
1.46k
            if (Mutating)
1075
1.46k
                pos.visit(dec_visitor{});
1076
1.46k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
1.46k
        }
1078
3.08k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, false>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1059
9.29k
    {
1060
9.29k
        auto old_tail_size = pos.count();
1061
9.29k
        auto new_tail_size = pos.index(last) + 1;
1062
9.29k
        auto node          = pos.node();
1063
9.29k
        auto mutate        = Mutating && node->can_mutate(e);
1064
9.29k
        if (new_tail_size == old_tail_size) {
1065
3.69k
            if (!Mutating)
1066
3.69k
                node->inc();
1067
3.69k
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
5.59k
        } 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
5.59k
        } else {
1073
5.59k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
5.59k
            if (Mutating)
1075
0
                pos.visit(dec_visitor{});
1076
5.59k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
5.59k
        }
1078
9.29k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, false>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1059
537
    {
1060
537
        auto old_tail_size = pos.count();
1061
537
        auto new_tail_size = pos.index(last) + 1;
1062
537
        auto node          = pos.node();
1063
537
        auto mutate        = Mutating && node->can_mutate(e);
1064
537
        if (new_tail_size == old_tail_size) {
1065
194
            if (!Mutating)
1066
194
                node->inc();
1067
194
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
343
        } 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
343
        } else {
1073
343
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
343
            if (Mutating)
1075
0
                pos.visit(dec_visitor{});
1076
343
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
343
        }
1078
537
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, true>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1059
1.66k
    {
1060
1.66k
        auto old_tail_size = pos.count();
1061
1.66k
        auto new_tail_size = pos.index(last) + 1;
1062
1.66k
        auto node          = pos.node();
1063
1.66k
        auto mutate        = Mutating && node->can_mutate(e);
1064
1.66k
        if (new_tail_size == old_tail_size) {
1065
388
            if (!Mutating)
1066
0
                node->inc();
1067
388
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
1.27k
        } else if (mutate) {
1069
200
            detail::destroy_n(node->leaf() + new_tail_size,
1070
200
                              old_tail_size - new_tail_size);
1071
200
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
1.07k
        } else {
1073
1.07k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
1.07k
            if (Mutating)
1075
1.07k
                pos.visit(dec_visitor{});
1076
1.07k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
1.07k
        }
1078
1.66k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, false>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1059
2.70k
    {
1060
2.70k
        auto old_tail_size = pos.count();
1061
2.70k
        auto new_tail_size = pos.index(last) + 1;
1062
2.70k
        auto node          = pos.node();
1063
2.70k
        auto mutate        = Mutating && node->can_mutate(e);
1064
2.70k
        if (new_tail_size == old_tail_size) {
1065
580
            if (!Mutating)
1066
580
                node->inc();
1067
580
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
2.12k
        } 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
2.12k
        } else {
1073
2.12k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
2.12k
            if (Mutating)
1075
0
                pos.visit(dec_visitor{});
1076
2.12k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
2.12k
        }
1078
2.70k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1059
1.85k
    {
1060
1.85k
        auto old_tail_size = pos.count();
1061
1.85k
        auto new_tail_size = pos.index(last) + 1;
1062
1.85k
        auto node          = pos.node();
1063
1.85k
        auto mutate        = Mutating && node->can_mutate(e);
1064
1.85k
        if (new_tail_size == old_tail_size) {
1065
436
            if (!Mutating)
1066
0
                node->inc();
1067
436
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
1.41k
        } else if (mutate) {
1069
310
            detail::destroy_n(node->leaf() + new_tail_size,
1070
310
                              old_tail_size - new_tail_size);
1071
310
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
1.10k
        } else {
1073
1.10k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
1.10k
            if (Mutating)
1075
1.10k
                pos.visit(dec_visitor{});
1076
1.10k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
1.10k
        }
1078
1.85k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1059
4.33k
    {
1060
4.33k
        auto old_tail_size = pos.count();
1061
4.33k
        auto new_tail_size = pos.index(last) + 1;
1062
4.33k
        auto node          = pos.node();
1063
4.33k
        auto mutate        = Mutating && node->can_mutate(e);
1064
4.33k
        if (new_tail_size == old_tail_size) {
1065
644
            if (!Mutating)
1066
644
                node->inc();
1067
644
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
3.69k
        } 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.69k
        } else {
1073
3.69k
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
3.69k
            if (Mutating)
1075
0
                pos.visit(dec_visitor{});
1076
3.69k
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
3.69k
        }
1078
4.33k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, true>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1059
1.51k
    {
1060
1.51k
        auto old_tail_size = pos.count();
1061
1.51k
        auto new_tail_size = pos.index(last) + 1;
1062
1.51k
        auto node          = pos.node();
1063
1.51k
        auto mutate        = Mutating && node->can_mutate(e);
1064
1.51k
        if (new_tail_size == old_tail_size) {
1065
236
            if (!Mutating)
1066
0
                node->inc();
1067
236
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
1.27k
        } else if (mutate) {
1069
646
            detail::destroy_n(node->leaf() + new_tail_size,
1070
646
                              old_tail_size - new_tail_size);
1071
646
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
646
        } else {
1073
628
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
628
            if (Mutating)
1075
628
                pos.visit(dec_visitor{});
1076
628
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
628
        }
1078
1.51k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, true>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1059
842
    {
1060
842
        auto old_tail_size = pos.count();
1061
842
        auto new_tail_size = pos.index(last) + 1;
1062
842
        auto node          = pos.node();
1063
842
        auto mutate        = Mutating && node->can_mutate(e);
1064
842
        if (new_tail_size == old_tail_size) {
1065
196
            if (!Mutating)
1066
0
                node->inc();
1067
196
            return std::make_tuple(0, nullptr, new_tail_size, node);
1068
646
        } else if (mutate) {
1069
241
            detail::destroy_n(node->leaf() + new_tail_size,
1070
241
                              old_tail_size - new_tail_size);
1071
241
            return std::make_tuple(0, nullptr, new_tail_size, node);
1072
405
        } else {
1073
405
            auto new_tail = node_t::copy_leaf_e(e, node, new_tail_size);
1074
405
            if (Mutating)
1075
405
                pos.visit(dec_visitor{});
1076
405
            return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1077
405
        }
1078
842
    }
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
43.2k
    {
1097
43.2k
        auto idx = pos.index(last);
1098
43.2k
        if (Collapse && idx == 0) {
1099
30.5k
            return pos.towards_oh(this_t{}, last, idx);
1100
30.5k
        } else {
1101
12.6k
            using std::get;
1102
12.6k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1103
12.6k
            auto next = get<1>(subs);
1104
12.6k
            auto ts   = get<2>(subs);
1105
12.6k
            auto tail = get<3>(subs);
1106
12.6k
            IMMER_TRY {
1107
12.6k
                if (next) {
1108
5.98k
                    auto count = idx + 1;
1109
5.98k
                    auto newn  = node_t::copy_inner_r_n(count, pos.node(), idx);
1110
5.98k
                    auto newr  = newn->relaxed();
1111
5.98k
                    newn->inner()[idx] = next;
1112
5.98k
                    newr->d.sizes[idx] = last + 1 - ts;
1113
5.98k
                    newr->d.count      = count;
1114
5.98k
                    assert(newr->d.sizes[idx]);
1115
5.98k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1116
6.68k
                } else if (idx == 0) {
1117
1.22k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1118
5.46k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1119
1.24k
                    auto newn = pos.node()->inner()[0];
1120
1.24k
                    return std::make_tuple(
1121
1.24k
                        pos.shift() - B, newn->inc(), ts, tail);
1122
4.21k
                } else {
1123
4.21k
                    auto newn = node_t::copy_inner_r(pos.node(), idx);
1124
4.21k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1125
4.21k
                }
1126
12.6k
            }
1127
12.6k
            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.6k
        }
1138
43.2k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1096
39.0k
    {
1097
39.0k
        auto idx = pos.index(last);
1098
39.0k
        if (Collapse && idx == 0) {
1099
30.5k
            return pos.towards_oh(this_t{}, last, idx);
1100
30.5k
        } else {
1101
8.42k
            using std::get;
1102
8.42k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1103
8.42k
            auto next = get<1>(subs);
1104
8.42k
            auto ts   = get<2>(subs);
1105
8.42k
            auto tail = get<3>(subs);
1106
8.42k
            IMMER_TRY {
1107
8.42k
                if (next) {
1108
5.22k
                    auto count = idx + 1;
1109
5.22k
                    auto newn  = node_t::copy_inner_r_n(count, pos.node(), idx);
1110
5.22k
                    auto newr  = newn->relaxed();
1111
5.22k
                    newn->inner()[idx] = next;
1112
5.22k
                    newr->d.sizes[idx] = last + 1 - ts;
1113
5.22k
                    newr->d.count      = count;
1114
5.22k
                    assert(newr->d.sizes[idx]);
1115
5.22k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1116
5.22k
                } else if (idx == 0) {
1117
0
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1118
3.19k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1119
1.24k
                    auto newn = pos.node()->inner()[0];
1120
1.24k
                    return std::make_tuple(
1121
1.24k
                        pos.shift() - B, newn->inc(), ts, tail);
1122
1.94k
                } else {
1123
1.94k
                    auto newn = node_t::copy_inner_r(pos.node(), idx);
1124
1.94k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1125
1.94k
                }
1126
8.42k
            }
1127
8.42k
            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
8.42k
        }
1138
39.0k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1096
4.25k
    {
1097
4.25k
        auto idx = pos.index(last);
1098
4.25k
        if (Collapse && idx == 0) {
1099
0
            return pos.towards_oh(this_t{}, last, idx);
1100
4.25k
        } else {
1101
4.25k
            using std::get;
1102
4.25k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1103
4.25k
            auto next = get<1>(subs);
1104
4.25k
            auto ts   = get<2>(subs);
1105
4.25k
            auto tail = get<3>(subs);
1106
4.25k
            IMMER_TRY {
1107
4.25k
                if (next) {
1108
757
                    auto count = idx + 1;
1109
757
                    auto newn  = node_t::copy_inner_r_n(count, pos.node(), idx);
1110
757
                    auto newr  = newn->relaxed();
1111
757
                    newn->inner()[idx] = next;
1112
757
                    newr->d.sizes[idx] = last + 1 - ts;
1113
757
                    newr->d.count      = count;
1114
757
                    assert(newr->d.sizes[idx]);
1115
757
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1116
3.49k
                } else if (idx == 0) {
1117
1.22k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1118
2.27k
                } 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.27k
                } else {
1123
2.27k
                    auto newn = node_t::copy_inner_r(pos.node(), idx);
1124
2.27k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1125
2.27k
                }
1126
4.25k
            }
1127
4.25k
            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
4.25k
        }
1138
4.25k
    }
1139
1140
    template <typename PosT>
1141
    static result_t visit_regular(PosT&& pos, size_t last)
1142
23.6k
    {
1143
23.6k
        auto idx = pos.index(last);
1144
23.6k
        if (Collapse && idx == 0) {
1145
7.63k
            return pos.towards_oh(this_t{}, last, idx);
1146
16.0k
        } else {
1147
16.0k
            using std::get;
1148
16.0k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1149
16.0k
            auto next = get<1>(subs);
1150
16.0k
            auto ts   = get<2>(subs);
1151
16.0k
            auto tail = get<3>(subs);
1152
16.0k
            IMMER_TRY {
1153
16.0k
                if (next) {
1154
4.89k
                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
1155
4.89k
                    newn->inner()[idx] = next;
1156
4.89k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1157
11.1k
                } else if (idx == 0) {
1158
2.44k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1159
8.70k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1160
992
                    auto newn = pos.node()->inner()[0];
1161
992
                    return std::make_tuple(
1162
992
                        pos.shift() - B, newn->inc(), ts, tail);
1163
7.70k
                } else {
1164
7.70k
                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
1165
7.70k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1166
7.70k
                }
1167
16.0k
            }
1168
16.0k
            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.0k
        }
1177
23.6k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1142
3.83k
    {
1143
3.83k
        auto idx = pos.index(last);
1144
3.83k
        if (Collapse && idx == 0) {
1145
0
            return pos.towards_oh(this_t{}, last, idx);
1146
3.83k
        } else {
1147
3.83k
            using std::get;
1148
3.83k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1149
3.83k
            auto next = get<1>(subs);
1150
3.83k
            auto ts   = get<2>(subs);
1151
3.83k
            auto tail = get<3>(subs);
1152
3.83k
            IMMER_TRY {
1153
3.83k
                if (next) {
1154
2.20k
                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
1155
2.20k
                    newn->inner()[idx] = next;
1156
2.20k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1157
2.20k
                } else if (idx == 0) {
1158
878
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1159
878
                } 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
746
                } else {
1164
746
                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
1165
746
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1166
746
                }
1167
3.83k
            }
1168
3.83k
            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.83k
        }
1177
3.83k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1142
3.19k
    {
1143
3.19k
        auto idx = pos.index(last);
1144
3.19k
        if (Collapse && idx == 0) {
1145
0
            return pos.towards_oh(this_t{}, last, idx);
1146
3.19k
        } else {
1147
3.19k
            using std::get;
1148
3.19k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1149
3.19k
            auto next = get<1>(subs);
1150
3.19k
            auto ts   = get<2>(subs);
1151
3.19k
            auto tail = get<3>(subs);
1152
3.19k
            IMMER_TRY {
1153
3.19k
                if (next) {
1154
665
                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
1155
665
                    newn->inner()[idx] = next;
1156
665
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1157
2.52k
                } else if (idx == 0) {
1158
565
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1159
1.96k
                } 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.96k
                } else {
1164
1.96k
                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
1165
1.96k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1166
1.96k
                }
1167
3.19k
            }
1168
3.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
3.19k
        }
1177
3.19k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1142
3.26k
    {
1143
3.26k
        auto idx = pos.index(last);
1144
3.26k
        if (Collapse && idx == 0) {
1145
0
            return pos.towards_oh(this_t{}, last, idx);
1146
3.26k
        } else {
1147
3.26k
            using std::get;
1148
3.26k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1149
3.26k
            auto next = get<1>(subs);
1150
3.26k
            auto ts   = get<2>(subs);
1151
3.26k
            auto tail = get<3>(subs);
1152
3.26k
            IMMER_TRY {
1153
3.26k
                if (next) {
1154
857
                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
1155
857
                    newn->inner()[idx] = next;
1156
857
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1157
2.41k
                } else if (idx == 0) {
1158
1.00k
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1159
1.41k
                } 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.41k
                } else {
1164
1.41k
                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
1165
1.41k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1166
1.41k
                }
1167
3.26k
            }
1168
3.26k
            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.26k
        }
1177
3.26k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1142
8.16k
    {
1143
8.16k
        auto idx = pos.index(last);
1144
8.16k
        if (Collapse && idx == 0) {
1145
5.36k
            return pos.towards_oh(this_t{}, last, idx);
1146
5.36k
        } else {
1147
2.79k
            using std::get;
1148
2.79k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1149
2.79k
            auto next = get<1>(subs);
1150
2.79k
            auto ts   = get<2>(subs);
1151
2.79k
            auto tail = get<3>(subs);
1152
2.79k
            IMMER_TRY {
1153
2.79k
                if (next) {
1154
708
                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
1155
708
                    newn->inner()[idx] = next;
1156
708
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1157
2.08k
                } else if (idx == 0) {
1158
0
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1159
2.08k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1160
794
                    auto newn = pos.node()->inner()[0];
1161
794
                    return std::make_tuple(
1162
794
                        pos.shift() - B, newn->inc(), ts, tail);
1163
1.29k
                } else {
1164
1.29k
                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
1165
1.29k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1166
1.29k
                }
1167
2.79k
            }
1168
2.79k
            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.79k
        }
1177
8.16k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1142
5.21k
    {
1143
5.21k
        auto idx = pos.index(last);
1144
5.21k
        if (Collapse && idx == 0) {
1145
2.26k
            return pos.towards_oh(this_t{}, last, idx);
1146
2.95k
        } else {
1147
2.95k
            using std::get;
1148
2.95k
            auto subs = pos.towards_oh(no_collapse_t{}, last, idx);
1149
2.95k
            auto next = get<1>(subs);
1150
2.95k
            auto ts   = get<2>(subs);
1151
2.95k
            auto tail = get<3>(subs);
1152
2.95k
            IMMER_TRY {
1153
2.95k
                if (next) {
1154
456
                    auto newn = node_t::copy_inner_n(idx + 1, pos.node(), idx);
1155
456
                    newn->inner()[idx] = next;
1156
456
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1157
2.49k
                } else if (idx == 0) {
1158
0
                    return std::make_tuple(pos.shift(), nullptr, ts, tail);
1159
2.49k
                } else if (Collapse && idx == 1 && pos.shift() > BL) {
1160
198
                    auto newn = pos.node()->inner()[0];
1161
198
                    return std::make_tuple(
1162
198
                        pos.shift() - B, newn->inc(), ts, tail);
1163
2.30k
                } else {
1164
2.30k
                    auto newn = node_t::copy_inner_n(idx, pos.node(), idx);
1165
2.30k
                    return std::make_tuple(pos.shift(), newn, ts, tail);
1166
2.30k
                }
1167
2.95k
            }
1168
2.95k
            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.95k
        }
1177
5.21k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_regular<immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
1178
1179
    template <typename PosT>
1180
    static result_t visit_leaf(PosT&& pos, size_t last)
1181
18.2k
    {
1182
18.2k
        auto old_tail_size = pos.count();
1183
18.2k
        auto new_tail_size = pos.index(last) + 1;
1184
18.2k
        auto new_tail      = new_tail_size == old_tail_size
1185
18.2k
                                 ? pos.node()->inc()
1186
18.2k
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
18.2k
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
18.2k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1181
1.71k
    {
1182
1.71k
        auto old_tail_size = pos.count();
1183
1.71k
        auto new_tail_size = pos.index(last) + 1;
1184
1.71k
        auto new_tail      = new_tail_size == old_tail_size
1185
1.71k
                                 ? pos.node()->inc()
1186
1.71k
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
1.71k
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
1.71k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1181
4.58k
    {
1182
4.58k
        auto old_tail_size = pos.count();
1183
4.58k
        auto new_tail_size = pos.index(last) + 1;
1184
4.58k
        auto new_tail      = new_tail_size == old_tail_size
1185
4.58k
                                 ? pos.node()->inc()
1186
4.58k
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
4.58k
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
4.58k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1181
7.01k
    {
1182
7.01k
        auto old_tail_size = pos.count();
1183
7.01k
        auto new_tail_size = pos.index(last) + 1;
1184
7.01k
        auto new_tail      = new_tail_size == old_tail_size
1185
7.01k
                                 ? pos.node()->inc()
1186
7.01k
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
7.01k
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
7.01k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1181
2.56k
    {
1182
2.56k
        auto old_tail_size = pos.count();
1183
2.56k
        auto new_tail_size = pos.index(last) + 1;
1184
2.56k
        auto new_tail      = new_tail_size == old_tail_size
1185
2.56k
                                 ? pos.node()->inc()
1186
2.56k
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
2.56k
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
2.56k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1181
1.54k
    {
1182
1.54k
        auto old_tail_size = pos.count();
1183
1.54k
        auto new_tail_size = pos.index(last) + 1;
1184
1.54k
        auto new_tail      = new_tail_size == old_tail_size
1185
1.54k
                                 ? pos.node()->inc()
1186
1.54k
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
1.54k
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
1.54k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*, unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_leaf<immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1181
869
    {
1182
869
        auto old_tail_size = pos.count();
1183
869
        auto new_tail_size = pos.index(last) + 1;
1184
869
        auto new_tail      = new_tail_size == old_tail_size
1185
869
                                 ? pos.node()->inc()
1186
869
                                 : node_t::copy_leaf(pos.node(), new_tail_size);
1187
869
        return std::make_tuple(0, nullptr, new_tail_size, new_tail);
1188
869
    }
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
1.41k
    {
1199
1.41k
        using node_t = node_type<Pos>;
1200
1.41k
        auto node    = p.node();
1201
1.41k
        if (node->dec()) {
1202
1.41k
            p.each_left(dec_t{}, idx);
1203
1.41k
            node_t::delete_inner_r(node, p.count());
1204
1.41k
        }
1205
1.41k
    }
1206
1207
    template <typename Pos>
1208
    static void visit_regular(Pos&& p, count_t idx)
1209
0
    {
1210
0
        using node_t = node_type<Pos>;
1211
0
        auto node    = p.node();
1212
0
        if (node->dec()) {
1213
0
            p.each_left(dec_t{}, idx);
1214
0
            node_t::delete_inner(node, p.count());
1215
0
        }
1216
0
    }
Unexecuted instantiation: void immer::detail::rbts::dec_left_visitor::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int)
Unexecuted instantiation: void immer::detail::rbts::dec_left_visitor::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned int)
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
299k
    {
1247
299k
        auto idx                = pos.subindex(first);
1248
299k
        auto count              = pos.count();
1249
299k
        auto node               = pos.node();
1250
299k
        auto mutate             = Mutating && node->can_mutate(e);
1251
299k
        auto left_size          = pos.size_before(idx);
1252
299k
        auto child_size         = pos.size_sbh(idx, left_size);
1253
299k
        auto dropped_size       = first;
1254
299k
        auto child_dropped_size = dropped_size - left_size;
1255
299k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1256
5.18k
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1257
5.18k
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1258
5.18k
            if (mutate)
1259
1.41k
                pos.visit(dec_left_visitor{}, idx);
1260
3.77k
            else if (Mutating)
1261
3.00k
                pos.visit(dec_visitor{});
1262
5.18k
            return r;
1263
294k
        } else {
1264
294k
            using std::get;
1265
294k
            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
1266
294k
                                   : node_t::make_inner_r_e(e);
1267
294k
            auto newr     = newn->relaxed();
1268
294k
            auto newcount = count - idx;
1269
294k
            auto new_child_size = child_size - child_dropped_size;
1270
294k
            IMMER_TRY {
1271
294k
                auto subs =
1272
294k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1273
294k
                           : pos.towards_sub_oh(
1274
102k
                                 no_collapse_no_mut_t{}, first, idx, e);
1275
294k
                if (mutate)
1276
191k
                    pos.each_left(dec_visitor{}, idx);
1277
294k
                pos.copy_sizes(
1278
294k
                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
1279
294k
                std::copy(node->inner() + idx + 1,
1280
294k
                          node->inner() + count,
1281
294k
                          newn->inner() + 1);
1282
294k
                newn->inner()[0] = get<1>(subs);
1283
294k
                newr->d.sizes[0] = new_child_size;
1284
294k
                newr->d.count    = newcount;
1285
294k
                assert(new_child_size);
1286
294k
                if (!mutate) {
1287
102k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1288
102k
                    if (Mutating)
1289
46.3k
                        pos.visit(dec_visitor{});
1290
102k
                }
1291
294k
                return std::make_tuple(pos.shift(), newn);
1292
294k
            }
1293
294k
            IMMER_CATCH (...) {
1294
0
                if (!mutate)
1295
0
                    node_t::delete_inner_r_e(newn);
1296
0
                IMMER_RETHROW;
1297
0
            }
1298
294k
        }
1299
299k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, true>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1246
57.3k
    {
1247
57.3k
        auto idx                = pos.subindex(first);
1248
57.3k
        auto count              = pos.count();
1249
57.3k
        auto node               = pos.node();
1250
57.3k
        auto mutate             = Mutating && node->can_mutate(e);
1251
57.3k
        auto left_size          = pos.size_before(idx);
1252
57.3k
        auto child_size         = pos.size_sbh(idx, left_size);
1253
57.3k
        auto dropped_size       = first;
1254
57.3k
        auto child_dropped_size = dropped_size - left_size;
1255
57.3k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1256
4.41k
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1257
4.41k
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1258
4.41k
            if (mutate)
1259
1.41k
                pos.visit(dec_left_visitor{}, idx);
1260
3.00k
            else if (Mutating)
1261
3.00k
                pos.visit(dec_visitor{});
1262
4.41k
            return r;
1263
52.9k
        } else {
1264
52.9k
            using std::get;
1265
52.9k
            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
1266
52.9k
                                   : node_t::make_inner_r_e(e);
1267
52.9k
            auto newr     = newn->relaxed();
1268
52.9k
            auto newcount = count - idx;
1269
52.9k
            auto new_child_size = child_size - child_dropped_size;
1270
52.9k
            IMMER_TRY {
1271
52.9k
                auto subs =
1272
52.9k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1273
52.9k
                           : pos.towards_sub_oh(
1274
6.18k
                                 no_collapse_no_mut_t{}, first, idx, e);
1275
52.9k
                if (mutate)
1276
46.7k
                    pos.each_left(dec_visitor{}, idx);
1277
52.9k
                pos.copy_sizes(
1278
52.9k
                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
1279
52.9k
                std::copy(node->inner() + idx + 1,
1280
52.9k
                          node->inner() + count,
1281
52.9k
                          newn->inner() + 1);
1282
52.9k
                newn->inner()[0] = get<1>(subs);
1283
52.9k
                newr->d.sizes[0] = new_child_size;
1284
52.9k
                newr->d.count    = newcount;
1285
52.9k
                assert(new_child_size);
1286
52.9k
                if (!mutate) {
1287
6.18k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1288
6.18k
                    if (Mutating)
1289
6.18k
                        pos.visit(dec_visitor{});
1290
6.18k
                }
1291
52.9k
                return std::make_tuple(pos.shift(), newn);
1292
52.9k
            }
1293
52.9k
            IMMER_CATCH (...) {
1294
0
                if (!mutate)
1295
0
                    node_t::delete_inner_r_e(newn);
1296
0
                IMMER_RETHROW;
1297
0
            }
1298
52.9k
        }
1299
57.3k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, false>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1246
2.31k
    {
1247
2.31k
        auto idx                = pos.subindex(first);
1248
2.31k
        auto count              = pos.count();
1249
2.31k
        auto node               = pos.node();
1250
2.31k
        auto mutate             = Mutating && node->can_mutate(e);
1251
2.31k
        auto left_size          = pos.size_before(idx);
1252
2.31k
        auto child_size         = pos.size_sbh(idx, left_size);
1253
2.31k
        auto dropped_size       = first;
1254
2.31k
        auto child_dropped_size = dropped_size - left_size;
1255
2.31k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1256
773
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1257
773
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1258
773
            if (mutate)
1259
0
                pos.visit(dec_left_visitor{}, idx);
1260
773
            else if (Mutating)
1261
0
                pos.visit(dec_visitor{});
1262
773
            return r;
1263
1.54k
        } else {
1264
1.54k
            using std::get;
1265
1.54k
            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
1266
1.54k
                                   : node_t::make_inner_r_e(e);
1267
1.54k
            auto newr     = newn->relaxed();
1268
1.54k
            auto newcount = count - idx;
1269
1.54k
            auto new_child_size = child_size - child_dropped_size;
1270
1.54k
            IMMER_TRY {
1271
1.54k
                auto subs =
1272
1.54k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1273
1.54k
                           : pos.towards_sub_oh(
1274
1.54k
                                 no_collapse_no_mut_t{}, first, idx, e);
1275
1.54k
                if (mutate)
1276
0
                    pos.each_left(dec_visitor{}, idx);
1277
1.54k
                pos.copy_sizes(
1278
1.54k
                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
1279
1.54k
                std::copy(node->inner() + idx + 1,
1280
1.54k
                          node->inner() + count,
1281
1.54k
                          newn->inner() + 1);
1282
1.54k
                newn->inner()[0] = get<1>(subs);
1283
1.54k
                newr->d.sizes[0] = new_child_size;
1284
1.54k
                newr->d.count    = newcount;
1285
1.54k
                assert(new_child_size);
1286
1.54k
                if (!mutate) {
1287
1.54k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1288
1.54k
                    if (Mutating)
1289
0
                        pos.visit(dec_visitor{});
1290
1.54k
                }
1291
1.54k
                return std::make_tuple(pos.shift(), newn);
1292
1.54k
            }
1293
1.54k
            IMMER_CATCH (...) {
1294
0
                if (!mutate)
1295
0
                    node_t::delete_inner_r_e(newn);
1296
0
                IMMER_RETHROW;
1297
0
            }
1298
1.54k
        }
1299
2.31k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, true>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1246
185k
    {
1247
185k
        auto idx                = pos.subindex(first);
1248
185k
        auto count              = pos.count();
1249
185k
        auto node               = pos.node();
1250
185k
        auto mutate             = Mutating && node->can_mutate(e);
1251
185k
        auto left_size          = pos.size_before(idx);
1252
185k
        auto child_size         = pos.size_sbh(idx, left_size);
1253
185k
        auto dropped_size       = first;
1254
185k
        auto child_dropped_size = dropped_size - left_size;
1255
185k
        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
185k
        } else {
1264
185k
            using std::get;
1265
185k
            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
1266
185k
                                   : node_t::make_inner_r_e(e);
1267
185k
            auto newr     = newn->relaxed();
1268
185k
            auto newcount = count - idx;
1269
185k
            auto new_child_size = child_size - child_dropped_size;
1270
185k
            IMMER_TRY {
1271
185k
                auto subs =
1272
185k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1273
185k
                           : pos.towards_sub_oh(
1274
40.2k
                                 no_collapse_no_mut_t{}, first, idx, e);
1275
185k
                if (mutate)
1276
144k
                    pos.each_left(dec_visitor{}, idx);
1277
185k
                pos.copy_sizes(
1278
185k
                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
1279
185k
                std::copy(node->inner() + idx + 1,
1280
185k
                          node->inner() + count,
1281
185k
                          newn->inner() + 1);
1282
185k
                newn->inner()[0] = get<1>(subs);
1283
185k
                newr->d.sizes[0] = new_child_size;
1284
185k
                newr->d.count    = newcount;
1285
185k
                assert(new_child_size);
1286
185k
                if (!mutate) {
1287
40.2k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1288
40.2k
                    if (Mutating)
1289
40.2k
                        pos.visit(dec_visitor{});
1290
40.2k
                }
1291
185k
                return std::make_tuple(pos.shift(), newn);
1292
185k
            }
1293
185k
            IMMER_CATCH (...) {
1294
0
                if (!mutate)
1295
0
                    node_t::delete_inner_r_e(newn);
1296
0
                IMMER_RETHROW;
1297
0
            }
1298
185k
        }
1299
185k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, false>::visit_relaxed<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1246
54.4k
    {
1247
54.4k
        auto idx                = pos.subindex(first);
1248
54.4k
        auto count              = pos.count();
1249
54.4k
        auto node               = pos.node();
1250
54.4k
        auto mutate             = Mutating && node->can_mutate(e);
1251
54.4k
        auto left_size          = pos.size_before(idx);
1252
54.4k
        auto child_size         = pos.size_sbh(idx, left_size);
1253
54.4k
        auto dropped_size       = first;
1254
54.4k
        auto child_dropped_size = dropped_size - left_size;
1255
54.4k
        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
54.4k
        } else {
1264
54.4k
            using std::get;
1265
54.4k
            auto newn     = mutate ? (node->ensure_mutable_relaxed(e), node)
1266
54.4k
                                   : node_t::make_inner_r_e(e);
1267
54.4k
            auto newr     = newn->relaxed();
1268
54.4k
            auto newcount = count - idx;
1269
54.4k
            auto new_child_size = child_size - child_dropped_size;
1270
54.4k
            IMMER_TRY {
1271
54.4k
                auto subs =
1272
54.4k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1273
54.4k
                           : pos.towards_sub_oh(
1274
54.4k
                                 no_collapse_no_mut_t{}, first, idx, e);
1275
54.4k
                if (mutate)
1276
0
                    pos.each_left(dec_visitor{}, idx);
1277
54.4k
                pos.copy_sizes(
1278
54.4k
                    idx + 1, newcount - 1, new_child_size, newr->d.sizes + 1);
1279
54.4k
                std::copy(node->inner() + idx + 1,
1280
54.4k
                          node->inner() + count,
1281
54.4k
                          newn->inner() + 1);
1282
54.4k
                newn->inner()[0] = get<1>(subs);
1283
54.4k
                newr->d.sizes[0] = new_child_size;
1284
54.4k
                newr->d.count    = newcount;
1285
54.4k
                assert(new_child_size);
1286
54.4k
                if (!mutate) {
1287
54.4k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1288
54.4k
                    if (Mutating)
1289
0
                        pos.visit(dec_visitor{});
1290
54.4k
                }
1291
54.4k
                return std::make_tuple(pos.shift(), newn);
1292
54.4k
            }
1293
54.4k
            IMMER_CATCH (...) {
1294
0
                if (!mutate)
1295
0
                    node_t::delete_inner_r_e(newn);
1296
0
                IMMER_RETHROW;
1297
0
            }
1298
54.4k
        }
1299
54.4k
    }
1300
1301
    template <typename PosT>
1302
    static result_t visit_regular(PosT&& pos, size_t first, edit_t e)
1303
12.6k
    {
1304
12.6k
        auto idx    = pos.subindex(first);
1305
12.6k
        auto count  = pos.count();
1306
12.6k
        auto node   = pos.node();
1307
12.6k
        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
12.6k
        auto left_size          = pos.size_before(idx);
1313
12.6k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
12.6k
        auto dropped_size       = first;
1315
12.6k
        auto child_dropped_size = dropped_size - left_size;
1316
12.6k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1317
1.69k
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1318
1.69k
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1319
1.69k
            if (mutate)
1320
0
                pos.visit(dec_left_visitor{}, idx);
1321
1.69k
            else if (Mutating)
1322
888
                pos.visit(dec_visitor{});
1323
1.69k
            return r;
1324
10.9k
        } else {
1325
10.9k
            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
10.9k
            auto newcount = count - idx;
1330
10.9k
            auto newn =
1331
10.9k
                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
10.9k
                       : node_t::make_inner_r_e(e);
1336
10.9k
            auto newr = newn->relaxed();
1337
10.9k
            IMMER_TRY {
1338
10.9k
                auto subs =
1339
10.9k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
10.9k
                           : pos.towards_sub_oh(
1341
10.9k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
10.9k
                if (mutate)
1343
0
                    pos.each_left(dec_visitor{}, idx);
1344
10.9k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
10.9k
                assert(newr->d.sizes[0]);
1346
10.9k
                pos.copy_sizes(
1347
10.9k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
10.9k
                newr->d.count    = newcount;
1349
10.9k
                newn->inner()[0] = get<1>(subs);
1350
10.9k
                std::copy(node->inner() + idx + 1,
1351
10.9k
                          node->inner() + count,
1352
10.9k
                          newn->inner() + 1);
1353
10.9k
                if (!mutate) {
1354
10.9k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
10.9k
                    if (Mutating)
1356
3.83k
                        pos.visit(dec_visitor{});
1357
10.9k
                }
1358
10.9k
                return std::make_tuple(pos.shift(), newn);
1359
10.9k
            }
1360
10.9k
            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
10.9k
        }
1373
12.6k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, false>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1303
2.46k
    {
1304
2.46k
        auto idx    = pos.subindex(first);
1305
2.46k
        auto count  = pos.count();
1306
2.46k
        auto node   = pos.node();
1307
2.46k
        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.46k
        auto left_size          = pos.size_before(idx);
1313
2.46k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
2.46k
        auto dropped_size       = first;
1315
2.46k
        auto child_dropped_size = dropped_size - left_size;
1316
2.46k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1317
809
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1318
809
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1319
809
            if (mutate)
1320
0
                pos.visit(dec_left_visitor{}, idx);
1321
809
            else if (Mutating)
1322
0
                pos.visit(dec_visitor{});
1323
809
            return r;
1324
1.65k
        } else {
1325
1.65k
            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.65k
            auto newcount = count - idx;
1330
1.65k
            auto newn =
1331
1.65k
                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.65k
                       : node_t::make_inner_r_e(e);
1336
1.65k
            auto newr = newn->relaxed();
1337
1.65k
            IMMER_TRY {
1338
1.65k
                auto subs =
1339
1.65k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
1.65k
                           : pos.towards_sub_oh(
1341
1.65k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
1.65k
                if (mutate)
1343
0
                    pos.each_left(dec_visitor{}, idx);
1344
1.65k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
1.65k
                assert(newr->d.sizes[0]);
1346
1.65k
                pos.copy_sizes(
1347
1.65k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
1.65k
                newr->d.count    = newcount;
1349
1.65k
                newn->inner()[0] = get<1>(subs);
1350
1.65k
                std::copy(node->inner() + idx + 1,
1351
1.65k
                          node->inner() + count,
1352
1.65k
                          newn->inner() + 1);
1353
1.65k
                if (!mutate) {
1354
1.65k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
1.65k
                    if (Mutating)
1356
0
                        pos.visit(dec_visitor{});
1357
1.65k
                }
1358
1.65k
                return std::make_tuple(pos.shift(), newn);
1359
1.65k
            }
1360
1.65k
            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.65k
        }
1373
2.46k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, false>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1303
695
    {
1304
695
        auto idx    = pos.subindex(first);
1305
695
        auto count  = pos.count();
1306
695
        auto node   = pos.node();
1307
695
        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
695
        auto left_size          = pos.size_before(idx);
1313
695
        auto child_size         = pos.size_sbh(idx, left_size);
1314
695
        auto dropped_size       = first;
1315
695
        auto child_dropped_size = dropped_size - left_size;
1316
695
        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
695
        } else {
1325
695
            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
695
            auto newcount = count - idx;
1330
695
            auto newn =
1331
695
                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
695
                       : node_t::make_inner_r_e(e);
1336
695
            auto newr = newn->relaxed();
1337
695
            IMMER_TRY {
1338
695
                auto subs =
1339
695
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
695
                           : pos.towards_sub_oh(
1341
695
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
695
                if (mutate)
1343
0
                    pos.each_left(dec_visitor{}, idx);
1344
695
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
695
                assert(newr->d.sizes[0]);
1346
695
                pos.copy_sizes(
1347
695
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
695
                newr->d.count    = newcount;
1349
695
                newn->inner()[0] = get<1>(subs);
1350
695
                std::copy(node->inner() + idx + 1,
1351
695
                          node->inner() + count,
1352
695
                          newn->inner() + 1);
1353
695
                if (!mutate) {
1354
695
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
695
                    if (Mutating)
1356
0
                        pos.visit(dec_visitor{});
1357
695
                }
1358
695
                return std::make_tuple(pos.shift(), newn);
1359
695
            }
1360
695
            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
695
        }
1373
695
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, true>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, false>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1303
1.61k
    {
1304
1.61k
        auto idx    = pos.subindex(first);
1305
1.61k
        auto count  = pos.count();
1306
1.61k
        auto node   = pos.node();
1307
1.61k
        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
1.61k
        auto left_size          = pos.size_before(idx);
1313
1.61k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
1.61k
        auto dropped_size       = first;
1315
1.61k
        auto child_dropped_size = dropped_size - left_size;
1316
1.61k
        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.61k
        } else {
1325
1.61k
            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.61k
            auto newcount = count - idx;
1330
1.61k
            auto newn =
1331
1.61k
                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.61k
                       : node_t::make_inner_r_e(e);
1336
1.61k
            auto newr = newn->relaxed();
1337
1.61k
            IMMER_TRY {
1338
1.61k
                auto subs =
1339
1.61k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
1.61k
                           : pos.towards_sub_oh(
1341
1.61k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
1.61k
                if (mutate)
1343
0
                    pos.each_left(dec_visitor{}, idx);
1344
1.61k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
1.61k
                assert(newr->d.sizes[0]);
1346
1.61k
                pos.copy_sizes(
1347
1.61k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
1.61k
                newr->d.count    = newcount;
1349
1.61k
                newn->inner()[0] = get<1>(subs);
1350
1.61k
                std::copy(node->inner() + idx + 1,
1351
1.61k
                          node->inner() + count,
1352
1.61k
                          newn->inner() + 1);
1353
1.61k
                if (!mutate) {
1354
1.61k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
1.61k
                    if (Mutating)
1356
0
                        pos.visit(dec_visitor{});
1357
1.61k
                }
1358
1.61k
                return std::make_tuple(pos.shift(), newn);
1359
1.61k
            }
1360
1.61k
            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.61k
        }
1373
1.61k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1303
2.20k
    {
1304
2.20k
        auto idx    = pos.subindex(first);
1305
2.20k
        auto count  = pos.count();
1306
2.20k
        auto node   = pos.node();
1307
2.20k
        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.20k
        auto left_size          = pos.size_before(idx);
1313
2.20k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
2.20k
        auto dropped_size       = first;
1315
2.20k
        auto child_dropped_size = dropped_size - left_size;
1316
2.20k
        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.20k
        } else {
1325
2.20k
            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.20k
            auto newcount = count - idx;
1330
2.20k
            auto newn =
1331
2.20k
                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.20k
                       : node_t::make_inner_r_e(e);
1336
2.20k
            auto newr = newn->relaxed();
1337
2.20k
            IMMER_TRY {
1338
2.20k
                auto subs =
1339
2.20k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
2.20k
                           : pos.towards_sub_oh(
1341
2.20k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
2.20k
                if (mutate)
1343
0
                    pos.each_left(dec_visitor{}, idx);
1344
2.20k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
2.20k
                assert(newr->d.sizes[0]);
1346
2.20k
                pos.copy_sizes(
1347
2.20k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
2.20k
                newr->d.count    = newcount;
1349
2.20k
                newn->inner()[0] = get<1>(subs);
1350
2.20k
                std::copy(node->inner() + idx + 1,
1351
2.20k
                          node->inner() + count,
1352
2.20k
                          newn->inner() + 1);
1353
2.20k
                if (!mutate) {
1354
2.20k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
2.20k
                    if (Mutating)
1356
2.20k
                        pos.visit(dec_visitor{});
1357
2.20k
                }
1358
2.20k
                return std::make_tuple(pos.shift(), newn);
1359
2.20k
            }
1360
2.20k
            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.20k
        }
1373
2.20k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, false>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1303
3.13k
    {
1304
3.13k
        auto idx    = pos.subindex(first);
1305
3.13k
        auto count  = pos.count();
1306
3.13k
        auto node   = pos.node();
1307
3.13k
        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.13k
        auto left_size          = pos.size_before(idx);
1313
3.13k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
3.13k
        auto dropped_size       = first;
1315
3.13k
        auto child_dropped_size = dropped_size - left_size;
1316
3.13k
        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.13k
        } else {
1325
3.13k
            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.13k
            auto newcount = count - idx;
1330
3.13k
            auto newn =
1331
3.13k
                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.13k
                       : node_t::make_inner_r_e(e);
1336
3.13k
            auto newr = newn->relaxed();
1337
3.13k
            IMMER_TRY {
1338
3.13k
                auto subs =
1339
3.13k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
3.13k
                           : pos.towards_sub_oh(
1341
3.13k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
3.13k
                if (mutate)
1343
0
                    pos.each_left(dec_visitor{}, idx);
1344
3.13k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
3.13k
                assert(newr->d.sizes[0]);
1346
3.13k
                pos.copy_sizes(
1347
3.13k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
3.13k
                newr->d.count    = newcount;
1349
3.13k
                newn->inner()[0] = get<1>(subs);
1350
3.13k
                std::copy(node->inner() + idx + 1,
1351
3.13k
                          node->inner() + count,
1352
3.13k
                          newn->inner() + 1);
1353
3.13k
                if (!mutate) {
1354
3.13k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
3.13k
                    if (Mutating)
1356
0
                        pos.visit(dec_visitor{});
1357
3.13k
                }
1358
3.13k
                return std::make_tuple(pos.shift(), newn);
1359
3.13k
            }
1360
3.13k
            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.13k
        }
1373
3.13k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, true>::visit_regular<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1303
2.51k
    {
1304
2.51k
        auto idx    = pos.subindex(first);
1305
2.51k
        auto count  = pos.count();
1306
2.51k
        auto node   = pos.node();
1307
2.51k
        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.51k
        auto left_size          = pos.size_before(idx);
1313
2.51k
        auto child_size         = pos.size_sbh(idx, left_size);
1314
2.51k
        auto dropped_size       = first;
1315
2.51k
        auto child_dropped_size = dropped_size - left_size;
1316
2.51k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1317
888
            auto r = mutate ? pos.towards_sub_oh(this_t{}, first, idx, e)
1318
888
                            : pos.towards_sub_oh(no_mut_t{}, first, idx, e);
1319
888
            if (mutate)
1320
0
                pos.visit(dec_left_visitor{}, idx);
1321
888
            else if (Mutating)
1322
888
                pos.visit(dec_visitor{});
1323
888
            return r;
1324
1.62k
        } else {
1325
1.62k
            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.62k
            auto newcount = count - idx;
1330
1.62k
            auto newn =
1331
1.62k
                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.62k
                       : node_t::make_inner_r_e(e);
1336
1.62k
            auto newr = newn->relaxed();
1337
1.62k
            IMMER_TRY {
1338
1.62k
                auto subs =
1339
1.62k
                    mutate ? pos.towards_sub_oh(no_collapse_t{}, first, idx, e)
1340
1.62k
                           : pos.towards_sub_oh(
1341
1.62k
                                 no_collapse_no_mut_t{}, first, idx, e);
1342
1.62k
                if (mutate)
1343
0
                    pos.each_left(dec_visitor{}, idx);
1344
1.62k
                newr->d.sizes[0] = child_size - child_dropped_size;
1345
1.62k
                assert(newr->d.sizes[0]);
1346
1.62k
                pos.copy_sizes(
1347
1.62k
                    idx + 1, newcount - 1, newr->d.sizes[0], newr->d.sizes + 1);
1348
1.62k
                newr->d.count    = newcount;
1349
1.62k
                newn->inner()[0] = get<1>(subs);
1350
1.62k
                std::copy(node->inner() + idx + 1,
1351
1.62k
                          node->inner() + count,
1352
1.62k
                          newn->inner() + 1);
1353
1.62k
                if (!mutate) {
1354
1.62k
                    node_t::inc_nodes(newn->inner() + 1, newcount - 1);
1355
1.62k
                    if (Mutating)
1356
1.62k
                        pos.visit(dec_visitor{});
1357
1.62k
                }
1358
1.62k
                return std::make_tuple(pos.shift(), newn);
1359
1.62k
            }
1360
1.62k
            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.62k
        }
1373
2.51k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, true>::visit_regular<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
1374
1375
    template <typename PosT>
1376
    static result_t visit_leaf(PosT&& pos, size_t first, edit_t e)
1377
59.1k
    {
1378
59.1k
        auto node   = pos.node();
1379
59.1k
        auto idx    = pos.index(first);
1380
59.1k
        auto count  = pos.count();
1381
59.1k
        auto mutate = Mutating &&
1382
0
                      std::is_nothrow_move_constructible<value_t>::value &&
1383
5.08k
                      node->can_mutate(e);
1384
59.1k
        if (mutate) {
1385
2.51k
            auto data     = node->leaf();
1386
2.51k
            auto newcount = count - idx;
1387
2.51k
            std::move(data + idx, data + count, data);
1388
2.51k
            detail::destroy_n(data + newcount, idx);
1389
2.51k
            return std::make_tuple(0, node);
1390
56.6k
        } else {
1391
56.6k
            auto newn = node_t::copy_leaf_e(e, node, idx, count);
1392
56.6k
            if (Mutating)
1393
2.56k
                pos.visit(dec_visitor{});
1394
56.6k
            return std::make_tuple(0, newn);
1395
56.6k
        }
1396
59.1k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1377
746
    {
1378
746
        auto node   = pos.node();
1379
746
        auto idx    = pos.index(first);
1380
746
        auto count  = pos.count();
1381
746
        auto mutate = Mutating &&
1382
0
                      std::is_nothrow_move_constructible<value_t>::value &&
1383
746
                      node->can_mutate(e);
1384
746
        if (mutate) {
1385
495
            auto data     = node->leaf();
1386
495
            auto newcount = count - idx;
1387
495
            std::move(data + idx, data + count, data);
1388
495
            detail::destroy_n(data + newcount, idx);
1389
495
            return std::make_tuple(0, node);
1390
495
        } else {
1391
251
            auto newn = node_t::copy_leaf_e(e, node, idx, count);
1392
251
            if (Mutating)
1393
251
                pos.visit(dec_visitor{});
1394
251
            return std::make_tuple(0, newn);
1395
251
        }
1396
746
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, false>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, true>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, false>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1377
9.32k
    {
1378
9.32k
        auto node   = pos.node();
1379
9.32k
        auto idx    = pos.index(first);
1380
9.32k
        auto count  = pos.count();
1381
9.32k
        auto mutate = Mutating &&
1382
0
                      std::is_nothrow_move_constructible<value_t>::value &&
1383
0
                      node->can_mutate(e);
1384
9.32k
        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
9.32k
        } else {
1391
9.32k
            auto newn = node_t::copy_leaf_e(e, node, idx, count);
1392
9.32k
            if (Mutating)
1393
0
                pos.visit(dec_visitor{});
1394
9.32k
            return std::make_tuple(0, newn);
1395
9.32k
        }
1396
9.32k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1377
4.33k
    {
1378
4.33k
        auto node   = pos.node();
1379
4.33k
        auto idx    = pos.index(first);
1380
4.33k
        auto count  = pos.count();
1381
4.33k
        auto mutate = Mutating &&
1382
0
                      std::is_nothrow_move_constructible<value_t>::value &&
1383
4.33k
                      node->can_mutate(e);
1384
4.33k
        if (mutate) {
1385
2.01k
            auto data     = node->leaf();
1386
2.01k
            auto newcount = count - idx;
1387
2.01k
            std::move(data + idx, data + count, data);
1388
2.01k
            detail::destroy_n(data + newcount, idx);
1389
2.01k
            return std::make_tuple(0, node);
1390
2.31k
        } else {
1391
2.31k
            auto newn = node_t::copy_leaf_e(e, node, idx, count);
1392
2.31k
            if (Mutating)
1393
2.31k
                pos.visit(dec_visitor{});
1394
2.31k
            return std::make_tuple(0, newn);
1395
2.31k
        }
1396
4.33k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Line
Count
Source
1377
44.7k
    {
1378
44.7k
        auto node   = pos.node();
1379
44.7k
        auto idx    = pos.index(first);
1380
44.7k
        auto count  = pos.count();
1381
44.7k
        auto mutate = Mutating &&
1382
0
                      std::is_nothrow_move_constructible<value_t>::value &&
1383
0
                      node->can_mutate(e);
1384
44.7k
        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
44.7k
        } else {
1391
44.7k
            auto newn = node_t::copy_leaf_e(e, node, idx, count);
1392
44.7k
            if (Mutating)
1393
0
                pos.visit(dec_visitor{});
1394
44.7k
            return std::make_tuple(0, newn);
1395
44.7k
        }
1396
44.7k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true, true>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::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
147k
    {
1415
147k
        auto idx                = pos.subindex(first);
1416
147k
        auto count              = pos.count();
1417
147k
        auto left_size          = pos.size_before(idx);
1418
147k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
147k
        auto dropped_size       = first;
1420
147k
        auto child_dropped_size = dropped_size - left_size;
1421
147k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
7.12k
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
140k
        } else {
1424
140k
            using std::get;
1425
140k
            auto n    = pos.node();
1426
140k
            auto newc = count - idx;
1427
140k
            auto newn = node_t::make_inner_r_n(newc);
1428
140k
            IMMER_TRY {
1429
140k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
140k
                auto newr     = newn->relaxed();
1431
140k
                newr->d.count = count - idx;
1432
140k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
140k
                assert(newr->d.sizes[0]);
1434
140k
                pos.copy_sizes(idx + 1,
1435
140k
                               newr->d.count - 1,
1436
140k
                               newr->d.sizes[0],
1437
140k
                               newr->d.sizes + 1);
1438
140k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
140k
                       pos.size() - dropped_size);
1440
140k
                newn->inner()[0] = get<1>(subs);
1441
140k
                std::copy(n->inner() + idx + 1,
1442
140k
                          n->inner() + count,
1443
140k
                          newn->inner() + 1);
1444
140k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
140k
                return std::make_tuple(pos.shift(), newn);
1446
140k
            }
1447
140k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
140k
        }
1452
147k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1414
25.7k
    {
1415
25.7k
        auto idx                = pos.subindex(first);
1416
25.7k
        auto count              = pos.count();
1417
25.7k
        auto left_size          = pos.size_before(idx);
1418
25.7k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
25.7k
        auto dropped_size       = first;
1420
25.7k
        auto child_dropped_size = dropped_size - left_size;
1421
25.7k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
4.53k
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
21.1k
        } else {
1424
21.1k
            using std::get;
1425
21.1k
            auto n    = pos.node();
1426
21.1k
            auto newc = count - idx;
1427
21.1k
            auto newn = node_t::make_inner_r_n(newc);
1428
21.1k
            IMMER_TRY {
1429
21.1k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
21.1k
                auto newr     = newn->relaxed();
1431
21.1k
                newr->d.count = count - idx;
1432
21.1k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
21.1k
                assert(newr->d.sizes[0]);
1434
21.1k
                pos.copy_sizes(idx + 1,
1435
21.1k
                               newr->d.count - 1,
1436
21.1k
                               newr->d.sizes[0],
1437
21.1k
                               newr->d.sizes + 1);
1438
21.1k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
21.1k
                       pos.size() - dropped_size);
1440
21.1k
                newn->inner()[0] = get<1>(subs);
1441
21.1k
                std::copy(n->inner() + idx + 1,
1442
21.1k
                          n->inner() + count,
1443
21.1k
                          newn->inner() + 1);
1444
21.1k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
21.1k
                return std::make_tuple(pos.shift(), newn);
1446
21.1k
            }
1447
21.1k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
21.1k
        }
1452
25.7k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1414
99.8k
    {
1415
99.8k
        auto idx                = pos.subindex(first);
1416
99.8k
        auto count              = pos.count();
1417
99.8k
        auto left_size          = pos.size_before(idx);
1418
99.8k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
99.8k
        auto dropped_size       = first;
1420
99.8k
        auto child_dropped_size = dropped_size - left_size;
1421
99.8k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
0
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
99.8k
        } else {
1424
99.8k
            using std::get;
1425
99.8k
            auto n    = pos.node();
1426
99.8k
            auto newc = count - idx;
1427
99.8k
            auto newn = node_t::make_inner_r_n(newc);
1428
99.8k
            IMMER_TRY {
1429
99.8k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
99.8k
                auto newr     = newn->relaxed();
1431
99.8k
                newr->d.count = count - idx;
1432
99.8k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
99.8k
                assert(newr->d.sizes[0]);
1434
99.8k
                pos.copy_sizes(idx + 1,
1435
99.8k
                               newr->d.count - 1,
1436
99.8k
                               newr->d.sizes[0],
1437
99.8k
                               newr->d.sizes + 1);
1438
99.8k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
99.8k
                       pos.size() - dropped_size);
1440
99.8k
                newn->inner()[0] = get<1>(subs);
1441
99.8k
                std::copy(n->inner() + idx + 1,
1442
99.8k
                          n->inner() + count,
1443
99.8k
                          newn->inner() + 1);
1444
99.8k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
99.8k
                return std::make_tuple(pos.shift(), newn);
1446
99.8k
            }
1447
99.8k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
99.8k
        }
1452
99.8k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1414
1.76k
    {
1415
1.76k
        auto idx                = pos.subindex(first);
1416
1.76k
        auto count              = pos.count();
1417
1.76k
        auto left_size          = pos.size_before(idx);
1418
1.76k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
1.76k
        auto dropped_size       = first;
1420
1.76k
        auto child_dropped_size = dropped_size - left_size;
1421
1.76k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
0
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
1.76k
        } else {
1424
1.76k
            using std::get;
1425
1.76k
            auto n    = pos.node();
1426
1.76k
            auto newc = count - idx;
1427
1.76k
            auto newn = node_t::make_inner_r_n(newc);
1428
1.76k
            IMMER_TRY {
1429
1.76k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
1.76k
                auto newr     = newn->relaxed();
1431
1.76k
                newr->d.count = count - idx;
1432
1.76k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
1.76k
                assert(newr->d.sizes[0]);
1434
1.76k
                pos.copy_sizes(idx + 1,
1435
1.76k
                               newr->d.count - 1,
1436
1.76k
                               newr->d.sizes[0],
1437
1.76k
                               newr->d.sizes + 1);
1438
1.76k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
1.76k
                       pos.size() - dropped_size);
1440
1.76k
                newn->inner()[0] = get<1>(subs);
1441
1.76k
                std::copy(n->inner() + idx + 1,
1442
1.76k
                          n->inner() + count,
1443
1.76k
                          newn->inner() + 1);
1444
1.76k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
1.76k
                return std::make_tuple(pos.shift(), newn);
1446
1.76k
            }
1447
1.76k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
1.76k
        }
1452
1.76k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1414
8.42k
    {
1415
8.42k
        auto idx                = pos.subindex(first);
1416
8.42k
        auto count              = pos.count();
1417
8.42k
        auto left_size          = pos.size_before(idx);
1418
8.42k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
8.42k
        auto dropped_size       = first;
1420
8.42k
        auto child_dropped_size = dropped_size - left_size;
1421
8.42k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
0
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
8.42k
        } else {
1424
8.42k
            using std::get;
1425
8.42k
            auto n    = pos.node();
1426
8.42k
            auto newc = count - idx;
1427
8.42k
            auto newn = node_t::make_inner_r_n(newc);
1428
8.42k
            IMMER_TRY {
1429
8.42k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
8.42k
                auto newr     = newn->relaxed();
1431
8.42k
                newr->d.count = count - idx;
1432
8.42k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
8.42k
                assert(newr->d.sizes[0]);
1434
8.42k
                pos.copy_sizes(idx + 1,
1435
8.42k
                               newr->d.count - 1,
1436
8.42k
                               newr->d.sizes[0],
1437
8.42k
                               newr->d.sizes + 1);
1438
8.42k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
8.42k
                       pos.size() - dropped_size);
1440
8.42k
                newn->inner()[0] = get<1>(subs);
1441
8.42k
                std::copy(n->inner() + idx + 1,
1442
8.42k
                          n->inner() + count,
1443
8.42k
                          newn->inner() + 1);
1444
8.42k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
8.42k
                return std::make_tuple(pos.shift(), newn);
1446
8.42k
            }
1447
8.42k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
8.42k
        }
1452
8.42k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1414
10.7k
    {
1415
10.7k
        auto idx                = pos.subindex(first);
1416
10.7k
        auto count              = pos.count();
1417
10.7k
        auto left_size          = pos.size_before(idx);
1418
10.7k
        auto child_size         = pos.size_sbh(idx, left_size);
1419
10.7k
        auto dropped_size       = first;
1420
10.7k
        auto child_dropped_size = dropped_size - left_size;
1421
10.7k
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
2.59k
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
8.20k
        } else {
1424
8.20k
            using std::get;
1425
8.20k
            auto n    = pos.node();
1426
8.20k
            auto newc = count - idx;
1427
8.20k
            auto newn = node_t::make_inner_r_n(newc);
1428
8.20k
            IMMER_TRY {
1429
8.20k
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
8.20k
                auto newr     = newn->relaxed();
1431
8.20k
                newr->d.count = count - idx;
1432
8.20k
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
8.20k
                assert(newr->d.sizes[0]);
1434
8.20k
                pos.copy_sizes(idx + 1,
1435
8.20k
                               newr->d.count - 1,
1436
8.20k
                               newr->d.sizes[0],
1437
8.20k
                               newr->d.sizes + 1);
1438
8.20k
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
8.20k
                       pos.size() - dropped_size);
1440
8.20k
                newn->inner()[0] = get<1>(subs);
1441
8.20k
                std::copy(n->inner() + idx + 1,
1442
8.20k
                          n->inner() + count,
1443
8.20k
                          newn->inner() + 1);
1444
8.20k
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
8.20k
                return std::make_tuple(pos.shift(), newn);
1446
8.20k
            }
1447
8.20k
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
8.20k
        }
1452
10.7k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1414
737
    {
1415
737
        auto idx                = pos.subindex(first);
1416
737
        auto count              = pos.count();
1417
737
        auto left_size          = pos.size_before(idx);
1418
737
        auto child_size         = pos.size_sbh(idx, left_size);
1419
737
        auto dropped_size       = first;
1420
737
        auto child_dropped_size = dropped_size - left_size;
1421
737
        if (Collapse && pos.shift() > BL && idx == pos.count() - 1) {
1422
0
            return pos.towards_sub_oh(this_t{}, first, idx);
1423
737
        } else {
1424
737
            using std::get;
1425
737
            auto n    = pos.node();
1426
737
            auto newc = count - idx;
1427
737
            auto newn = node_t::make_inner_r_n(newc);
1428
737
            IMMER_TRY {
1429
737
                auto subs     = pos.towards_sub_oh(no_collapse_t{}, first, idx);
1430
737
                auto newr     = newn->relaxed();
1431
737
                newr->d.count = count - idx;
1432
737
                newr->d.sizes[0] = child_size - child_dropped_size;
1433
737
                assert(newr->d.sizes[0]);
1434
737
                pos.copy_sizes(idx + 1,
1435
737
                               newr->d.count - 1,
1436
737
                               newr->d.sizes[0],
1437
737
                               newr->d.sizes + 1);
1438
737
                assert(newr->d.sizes[newr->d.count - 1] ==
1439
737
                       pos.size() - dropped_size);
1440
737
                newn->inner()[0] = get<1>(subs);
1441
737
                std::copy(n->inner() + idx + 1,
1442
737
                          n->inner() + count,
1443
737
                          newn->inner() + 1);
1444
737
                node_t::inc_nodes(newn->inner() + 1, newr->d.count - 1);
1445
737
                return std::make_tuple(pos.shift(), newn);
1446
737
            }
1447
737
            IMMER_CATCH (...) {
1448
0
                node_t::delete_inner_r(newn, newc);
1449
0
                IMMER_RETHROW;
1450
0
            }
1451
737
        }
1452
737
    }
1453
1454
    template <typename PosT>
1455
    static result_t visit_leaf(PosT&& pos, size_t first)
1456
30.1k
    {
1457
30.1k
        auto n = node_t::copy_leaf(pos.node(), pos.index(first), pos.count());
1458
30.1k
        return std::make_tuple(0, n);
1459
30.1k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1456
19.4k
    {
1457
19.4k
        auto n = node_t::copy_leaf(pos.node(), pos.index(first), pos.count());
1458
19.4k
        return std::make_tuple(0, n);
1459
19.4k
    }
std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, false>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, unsigned long)
Line
Count
Source
1456
10.6k
    {
1457
10.6k
        auto n = node_t::copy_leaf(pos.node(), pos.index(first), pos.count());
1458
10.6k
        return std::make_tuple(0, n);
1459
10.6k
    }
Unexecuted instantiation: std::__1::tuple<unsigned int, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*> immer::detail::rbts::slice_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, true>::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, 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
26.4M
    auto shift() const { return shift_; }
1479
1480
    concat_center_pos(shift_t s, Node* n0, size_t s0)
1481
13.2M
        : shift_{s}
1482
13.2M
        , count_{1}
1483
13.2M
        , nodes_{n0}
1484
13.2M
        , sizes_{s0}
1485
13.2M
    {
1486
13.2M
    }
1487
1488
    concat_center_pos(shift_t s, Node* n0, size_t s0, Node* n1, size_t s1)
1489
8.56k
        : shift_{s}
1490
8.56k
        , count_{2}
1491
8.56k
        , nodes_{n0, n1}
1492
8.56k
        , sizes_{s0, s0 + s1}
1493
8.56k
    {
1494
8.56k
    }
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
1.06M
        : shift_{s}
1504
1.06M
        , count_{3}
1505
1.06M
        , nodes_{n0, n1, n2}
1506
1.06M
        , sizes_{s0, s0 + s1, s0 + s1 + s2}
1507
1.06M
    {
1508
1.06M
    }
1509
1510
    template <typename Visitor, typename... Args>
1511
    void each_sub(Visitor v, Args&&... args)
1512
39.6M
    {
1513
39.6M
        if (shift_ == BL) {
1514
3.22M
            auto s = size_t{};
1515
12.8M
            for (auto i = count_t{0}; i < count_; ++i) {
1516
9.66M
                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
1517
9.66M
                s = sizes_[i];
1518
9.66M
            }
1519
36.3M
        } else {
1520
98.0M
            for (auto i = count_t{0}; i < count_; ++i)
1521
61.6M
                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
1522
61.6M
                    .visit(v, args...);
1523
36.3M
        }
1524
39.6M
    }
void immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::each_sub<immer::detail::rbts::concat_rebalance_plan_fill_visitor, immer::detail::rbts::concat_rebalance_plan<3u, 3u>&>(immer::detail::rbts::concat_rebalance_plan_fill_visitor, immer::detail::rbts::concat_rebalance_plan<3u, 3u>&)
Line
Count
Source
1512
13.2M
    {
1513
13.2M
        if (shift_ == BL) {
1514
1.07M
            auto s = size_t{};
1515
4.29M
            for (auto i = count_t{0}; i < count_; ++i) {
1516
3.22M
                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
1517
3.22M
                s = sizes_[i];
1518
3.22M
            }
1519
12.1M
        } else {
1520
32.6M
            for (auto i = count_t{0}; i < count_; ++i)
1521
20.5M
                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
1522
20.5M
                    .visit(v, args...);
1523
12.1M
        }
1524
13.2M
    }
void immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::each_sub<immer::detail::rbts::concat_merger_visitor, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::concat_merger_visitor, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1512
13.2M
    {
1513
13.2M
        if (shift_ == BL) {
1514
1.07M
            auto s = size_t{};
1515
4.29M
            for (auto i = count_t{0}; i < count_; ++i) {
1516
3.22M
                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
1517
3.22M
                s = sizes_[i];
1518
3.22M
            }
1519
12.1M
        } else {
1520
32.6M
            for (auto i = count_t{0}; i < count_; ++i)
1521
20.5M
                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
1522
20.5M
                    .visit(v, args...);
1523
12.1M
        }
1524
13.2M
    }
void immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::each_sub<immer::detail::rbts::dec_visitor>(immer::detail::rbts::dec_visitor)
Line
Count
Source
1512
13.2M
    {
1513
13.2M
        if (shift_ == BL) {
1514
1.07M
            auto s = size_t{};
1515
4.29M
            for (auto i = count_t{0}; i < count_; ++i) {
1516
3.22M
                make_leaf_sub_pos(nodes_[i], sizes_[i] - s).visit(v, args...);
1517
3.22M
                s = sizes_[i];
1518
3.22M
            }
1519
12.1M
        } else {
1520
32.6M
            for (auto i = count_t{0}; i < count_; ++i)
1521
20.5M
                make_relaxed_pos(nodes_[i], shift_ - B, nodes_[i]->relaxed())
1522
20.5M
                    .visit(v, args...);
1523
12.1M
        }
1524
13.2M
    }
Unexecuted instantiation: void immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::each_sub<immer::detail::rbts::concat_merger_mut_visitor, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit&>(immer::detail::rbts::concat_merger_mut_visitor, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit&)
1525
1526
    relaxed_pos<Node> realize() &&
1527
1.07M
    {
1528
1.07M
        if (count_ > 1) {
1529
47.1k
            IMMER_TRY {
1530
47.1k
                auto result = node_t::make_inner_r_n(count_);
1531
47.1k
                auto r      = result->relaxed();
1532
47.1k
                r->d.count  = count_;
1533
47.1k
                std::copy(nodes_, nodes_ + count_, result->inner());
1534
47.1k
                std::copy(sizes_, sizes_ + count_, r->d.sizes);
1535
47.1k
                return {result, shift_, r};
1536
47.1k
            }
1537
47.1k
            IMMER_CATCH (...) {
1538
0
                each_sub(dec_visitor{});
1539
0
                IMMER_RETHROW;
1540
0
            }
1541
1.02M
        } else {
1542
1.02M
            assert(shift_ >= B + BL);
1543
1.02M
            return {nodes_[0], shift_ - B, nodes_[0]->relaxed()};
1544
1.02M
        }
1545
1.07M
    }
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
13.2M
        : curr_{counts}
1578
13.2M
        , n_{n}
1579
13.2M
        , result_{
1580
13.2M
              shift + B, node_t::make_inner_r_n(std::min(n_, branches<B>)), 0}
1581
13.2M
    {
1582
13.2M
    }
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
126M
    {
1590
126M
        assert(size);
1591
126M
        ++curr_;
1592
126M
        auto parent  = result_.nodes_[result_.count_ - 1];
1593
126M
        auto relaxed = parent->relaxed();
1594
126M
        if (relaxed->d.count == branches<B>) {
1595
8.48M
            assert(result_.count_ < result_t::max_children);
1596
8.48M
            n_ -= branches<B>;
1597
8.48M
            parent  = node_t::make_inner_r_n(std::min(n_, branches<B>));
1598
8.48M
            relaxed = parent->relaxed();
1599
8.48M
            result_.nodes_[result_.count_] = parent;
1600
8.48M
            result_.sizes_[result_.count_] = result_.sizes_[result_.count_ - 1];
1601
8.48M
            assert(result_.sizes_[result_.count_]);
1602
8.48M
            ++result_.count_;
1603
8.48M
        }
1604
126M
        auto idx = relaxed->d.count++;
1605
126M
        result_.sizes_[result_.count_ - 1] += size;
1606
126M
        assert(result_.sizes_[result_.count_ - 1]);
1607
126M
        relaxed->d.sizes[idx] = size + (idx ? relaxed->d.sizes[idx - 1] : 0);
1608
126M
        assert(relaxed->d.sizes[idx]);
1609
126M
        parent->inner()[idx] = p;
1610
126M
    };
1611
1612
    template <typename Pos>
1613
    void merge_leaf(Pos&& p)
1614
13.1M
    {
1615
13.1M
        auto from       = p.node();
1616
13.1M
        auto from_size  = p.size();
1617
13.1M
        auto from_count = p.count();
1618
13.1M
        assert(from_size);
1619
13.1M
        if (!to_ && *curr_ == from_count) {
1620
12.9M
            add_child(from, from_size);
1621
12.9M
            from->inc();
1622
12.9M
        } else {
1623
245k
            auto from_offset = count_t{};
1624
245k
            auto from_data   = from->leaf();
1625
339k
            do {
1626
339k
                if (!to_) {
1627
168k
                    to_        = node_t::make_leaf_n(*curr_);
1628
168k
                    to_offset_ = 0;
1629
168k
                }
1630
339k
                auto data = to_->leaf();
1631
339k
                auto to_copy =
1632
339k
                    std::min(from_count - from_offset, *curr_ - to_offset_);
1633
339k
                detail::uninitialized_copy(from_data + from_offset,
1634
339k
                                           from_data + from_offset + to_copy,
1635
339k
                                           data + to_offset_);
1636
339k
                to_offset_ += to_copy;
1637
339k
                from_offset += to_copy;
1638
339k
                if (*curr_ == to_offset_) {
1639
168k
                    add_child(to_, to_offset_);
1640
168k
                    to_ = nullptr;
1641
168k
                }
1642
339k
            } while (from_offset != from_count);
1643
245k
        }
1644
13.1M
    }
void immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::merge_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1614
8.16M
    {
1615
8.16M
        auto from       = p.node();
1616
8.16M
        auto from_size  = p.size();
1617
8.16M
        auto from_count = p.count();
1618
8.16M
        assert(from_size);
1619
8.16M
        if (!to_ && *curr_ == from_count) {
1620
7.91M
            add_child(from, from_size);
1621
7.91M
            from->inc();
1622
7.91M
        } else {
1623
245k
            auto from_offset = count_t{};
1624
245k
            auto from_data   = from->leaf();
1625
339k
            do {
1626
339k
                if (!to_) {
1627
168k
                    to_        = node_t::make_leaf_n(*curr_);
1628
168k
                    to_offset_ = 0;
1629
168k
                }
1630
339k
                auto data = to_->leaf();
1631
339k
                auto to_copy =
1632
339k
                    std::min(from_count - from_offset, *curr_ - to_offset_);
1633
339k
                detail::uninitialized_copy(from_data + from_offset,
1634
339k
                                           from_data + from_offset + to_copy,
1635
339k
                                           data + to_offset_);
1636
339k
                to_offset_ += to_copy;
1637
339k
                from_offset += to_copy;
1638
339k
                if (*curr_ == to_offset_) {
1639
168k
                    add_child(to_, to_offset_);
1640
168k
                    to_ = nullptr;
1641
168k
                }
1642
339k
            } while (from_offset != from_count);
1643
245k
        }
1644
8.16M
    }
void immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::merge_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1614
5.01M
    {
1615
5.01M
        auto from       = p.node();
1616
5.01M
        auto from_size  = p.size();
1617
5.01M
        auto from_count = p.count();
1618
5.01M
        assert(from_size);
1619
5.01M
        if (!to_ && *curr_ == from_count) {
1620
5.01M
            add_child(from, from_size);
1621
5.01M
            from->inc();
1622
5.01M
        } 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
5.01M
    }
1645
1646
    template <typename Pos>
1647
    void merge_inner(Pos&& p)
1648
116M
    {
1649
116M
        auto from       = p.node();
1650
116M
        auto from_size  = p.size();
1651
116M
        auto from_count = p.count();
1652
116M
        assert(from_size);
1653
116M
        if (!to_ && *curr_ == from_count) {
1654
101M
            add_child(from, from_size);
1655
101M
            from->inc();
1656
101M
        } else {
1657
15.0M
            auto from_offset = count_t{};
1658
15.0M
            auto from_data   = from->inner();
1659
24.2M
            do {
1660
24.2M
                if (!to_) {
1661
11.8M
                    to_        = node_t::make_inner_r_n(*curr_);
1662
11.8M
                    to_offset_ = 0;
1663
11.8M
                    to_size_   = 0;
1664
11.8M
                }
1665
24.2M
                auto data = to_->inner();
1666
24.2M
                auto to_copy =
1667
24.2M
                    std::min(from_count - from_offset, *curr_ - to_offset_);
1668
24.2M
                std::copy(from_data + from_offset,
1669
24.2M
                          from_data + from_offset + to_copy,
1670
24.2M
                          data + to_offset_);
1671
24.2M
                node_t::inc_nodes(from_data + from_offset, to_copy);
1672
24.2M
                auto sizes = to_->relaxed()->d.sizes;
1673
24.2M
                p.copy_sizes(
1674
24.2M
                    from_offset, to_copy, to_size_, sizes + to_offset_);
1675
24.2M
                to_offset_ += to_copy;
1676
24.2M
                from_offset += to_copy;
1677
24.2M
                to_size_ = sizes[to_offset_ - 1];
1678
24.2M
                assert(to_size_);
1679
24.2M
                if (*curr_ == to_offset_) {
1680
11.8M
                    to_->relaxed()->d.count = to_offset_;
1681
11.8M
                    add_child(to_, to_size_);
1682
11.8M
                    to_ = nullptr;
1683
11.8M
                }
1684
24.2M
            } while (from_offset != from_count);
1685
15.0M
        }
1686
116M
    }
void immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::merge_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1648
111M
    {
1649
111M
        auto from       = p.node();
1650
111M
        auto from_size  = p.size();
1651
111M
        auto from_count = p.count();
1652
111M
        assert(from_size);
1653
111M
        if (!to_ && *curr_ == from_count) {
1654
98.4M
            add_child(from, from_size);
1655
98.4M
            from->inc();
1656
98.4M
        } else {
1657
13.4M
            auto from_offset = count_t{};
1658
13.4M
            auto from_data   = from->inner();
1659
21.0M
            do {
1660
21.0M
                if (!to_) {
1661
10.2M
                    to_        = node_t::make_inner_r_n(*curr_);
1662
10.2M
                    to_offset_ = 0;
1663
10.2M
                    to_size_   = 0;
1664
10.2M
                }
1665
21.0M
                auto data = to_->inner();
1666
21.0M
                auto to_copy =
1667
21.0M
                    std::min(from_count - from_offset, *curr_ - to_offset_);
1668
21.0M
                std::copy(from_data + from_offset,
1669
21.0M
                          from_data + from_offset + to_copy,
1670
21.0M
                          data + to_offset_);
1671
21.0M
                node_t::inc_nodes(from_data + from_offset, to_copy);
1672
21.0M
                auto sizes = to_->relaxed()->d.sizes;
1673
21.0M
                p.copy_sizes(
1674
21.0M
                    from_offset, to_copy, to_size_, sizes + to_offset_);
1675
21.0M
                to_offset_ += to_copy;
1676
21.0M
                from_offset += to_copy;
1677
21.0M
                to_size_ = sizes[to_offset_ - 1];
1678
21.0M
                assert(to_size_);
1679
21.0M
                if (*curr_ == to_offset_) {
1680
10.2M
                    to_->relaxed()->d.count = to_offset_;
1681
10.2M
                    add_child(to_, to_size_);
1682
10.2M
                    to_ = nullptr;
1683
10.2M
                }
1684
21.0M
            } while (from_offset != from_count);
1685
13.4M
        }
1686
111M
    }
void immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::merge_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1648
520k
    {
1649
520k
        auto from       = p.node();
1650
520k
        auto from_size  = p.size();
1651
520k
        auto from_count = p.count();
1652
520k
        assert(from_size);
1653
520k
        if (!to_ && *curr_ == from_count) {
1654
520k
            add_child(from, from_size);
1655
520k
            from->inc();
1656
520k
        } 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
520k
    }
void immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::merge_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1648
3.77M
    {
1649
3.77M
        auto from       = p.node();
1650
3.77M
        auto from_size  = p.size();
1651
3.77M
        auto from_count = p.count();
1652
3.77M
        assert(from_size);
1653
3.77M
        if (!to_ && *curr_ == from_count) {
1654
2.16M
            add_child(from, from_size);
1655
2.16M
            from->inc();
1656
2.16M
        } else {
1657
1.61M
            auto from_offset = count_t{};
1658
1.61M
            auto from_data   = from->inner();
1659
3.22M
            do {
1660
3.22M
                if (!to_) {
1661
1.61M
                    to_        = node_t::make_inner_r_n(*curr_);
1662
1.61M
                    to_offset_ = 0;
1663
1.61M
                    to_size_   = 0;
1664
1.61M
                }
1665
3.22M
                auto data = to_->inner();
1666
3.22M
                auto to_copy =
1667
3.22M
                    std::min(from_count - from_offset, *curr_ - to_offset_);
1668
3.22M
                std::copy(from_data + from_offset,
1669
3.22M
                          from_data + from_offset + to_copy,
1670
3.22M
                          data + to_offset_);
1671
3.22M
                node_t::inc_nodes(from_data + from_offset, to_copy);
1672
3.22M
                auto sizes = to_->relaxed()->d.sizes;
1673
3.22M
                p.copy_sizes(
1674
3.22M
                    from_offset, to_copy, to_size_, sizes + to_offset_);
1675
3.22M
                to_offset_ += to_copy;
1676
3.22M
                from_offset += to_copy;
1677
3.22M
                to_size_ = sizes[to_offset_ - 1];
1678
3.22M
                assert(to_size_);
1679
3.22M
                if (*curr_ == to_offset_) {
1680
1.61M
                    to_->relaxed()->d.count = to_offset_;
1681
1.61M
                    add_child(to_, to_size_);
1682
1.61M
                    to_ = nullptr;
1683
1.61M
                }
1684
3.22M
            } while (from_offset != from_count);
1685
1.61M
        }
1686
3.77M
    }
1687
1688
    concat_center_pos<Node> finish() const
1689
13.2M
    {
1690
13.2M
        assert(!to_);
1691
13.2M
        return result_;
1692
13.2M
    }
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
116M
    {
1716
116M
        merger.merge_inner(p);
1717
116M
    }
void immer::detail::rbts::concat_merger_visitor::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > >(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1715
111M
    {
1716
111M
        merger.merge_inner(p);
1717
111M
    }
void immer::detail::rbts::concat_merger_visitor::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > >(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1715
520k
    {
1716
520k
        merger.merge_inner(p);
1717
520k
    }
void immer::detail::rbts::concat_merger_visitor::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > >(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1715
3.77M
    {
1716
3.77M
        merger.merge_inner(p);
1717
3.77M
    }
1718
1719
    template <typename Pos, typename Merger>
1720
    static void visit_leaf(Pos&& p, Merger& merger)
1721
13.1M
    {
1722
13.1M
        merger.merge_leaf(p);
1723
13.1M
    }
void immer::detail::rbts::concat_merger_visitor::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > >(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1721
8.16M
    {
1722
8.16M
        merger.merge_leaf(p);
1723
8.16M
    }
void immer::detail::rbts::concat_merger_visitor::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > >(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1721
5.01M
    {
1722
5.01M
        merger.merge_leaf(p);
1723
5.01M
    }
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
129M
    {
1734
129M
        auto count = p.count();
1735
129M
        assert(plan.n < Plan::max_children);
1736
129M
        plan.counts[plan.n++] = count;
1737
129M
        plan.total += count;
1738
129M
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_rebalance_plan<3u, 3u> >(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_rebalance_plan<3u, 3u>&)
Line
Count
Source
1733
8.16M
    {
1734
8.16M
        auto count = p.count();
1735
8.16M
        assert(plan.n < Plan::max_children);
1736
8.16M
        plan.counts[plan.n++] = count;
1737
8.16M
        plan.total += count;
1738
8.16M
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_rebalance_plan<3u, 3u> >(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_rebalance_plan<3u, 3u>&)
Line
Count
Source
1733
111M
    {
1734
111M
        auto count = p.count();
1735
111M
        assert(plan.n < Plan::max_children);
1736
111M
        plan.counts[plan.n++] = count;
1737
111M
        plan.total += count;
1738
111M
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_rebalance_plan<3u, 3u> >(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_rebalance_plan<3u, 3u>&)
Line
Count
Source
1733
5.01M
    {
1734
5.01M
        auto count = p.count();
1735
5.01M
        assert(plan.n < Plan::max_children);
1736
5.01M
        plan.counts[plan.n++] = count;
1737
5.01M
        plan.total += count;
1738
5.01M
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_rebalance_plan<3u, 3u> >(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_rebalance_plan<3u, 3u>&)
Line
Count
Source
1733
520k
    {
1734
520k
        auto count = p.count();
1735
520k
        assert(plan.n < Plan::max_children);
1736
520k
        plan.counts[plan.n++] = count;
1737
520k
        plan.total += count;
1738
520k
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_rebalance_plan<3u, 3u> >(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_rebalance_plan<3u, 3u>&)
Line
Count
Source
1733
3.77M
    {
1734
3.77M
        auto count = p.count();
1735
3.77M
        assert(plan.n < Plan::max_children);
1736
3.77M
        plan.counts[plan.n++] = count;
1737
3.77M
        plan.total += count;
1738
3.77M
    }
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
13.2M
    {
1753
13.2M
        assert(n == 0u);
1754
13.2M
        assert(total == 0u);
1755
13.2M
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
13.2M
        lpos.each_left_sub(visitor_t{}, *this);
1757
13.2M
        cpos.each_sub(visitor_t{}, *this);
1758
13.2M
        rpos.each_right_sub(visitor_t{}, *this);
1759
13.2M
    }
Unexecuted instantiation: void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&)
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1752
780
    {
1753
780
        assert(n == 0u);
1754
780
        assert(total == 0u);
1755
780
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
780
        lpos.each_left_sub(visitor_t{}, *this);
1757
780
        cpos.each_sub(visitor_t{}, *this);
1758
780
        rpos.each_right_sub(visitor_t{}, *this);
1759
780
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1752
719
    {
1753
719
        assert(n == 0u);
1754
719
        assert(total == 0u);
1755
719
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
719
        lpos.each_left_sub(visitor_t{}, *this);
1757
719
        cpos.each_sub(visitor_t{}, *this);
1758
719
        rpos.each_right_sub(visitor_t{}, *this);
1759
719
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1752
1.87k
    {
1753
1.87k
        assert(n == 0u);
1754
1.87k
        assert(total == 0u);
1755
1.87k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
1.87k
        lpos.each_left_sub(visitor_t{}, *this);
1757
1.87k
        cpos.each_sub(visitor_t{}, *this);
1758
1.87k
        rpos.each_right_sub(visitor_t{}, *this);
1759
1.87k
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1752
1.97k
    {
1753
1.97k
        assert(n == 0u);
1754
1.97k
        assert(total == 0u);
1755
1.97k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
1.97k
        lpos.each_left_sub(visitor_t{}, *this);
1757
1.97k
        cpos.each_sub(visitor_t{}, *this);
1758
1.97k
        rpos.each_right_sub(visitor_t{}, *this);
1759
1.97k
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1752
71.9k
    {
1753
71.9k
        assert(n == 0u);
1754
71.9k
        assert(total == 0u);
1755
71.9k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
71.9k
        lpos.each_left_sub(visitor_t{}, *this);
1757
71.9k
        cpos.each_sub(visitor_t{}, *this);
1758
71.9k
        rpos.each_right_sub(visitor_t{}, *this);
1759
71.9k
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1752
5.87k
    {
1753
5.87k
        assert(n == 0u);
1754
5.87k
        assert(total == 0u);
1755
5.87k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
5.87k
        lpos.each_left_sub(visitor_t{}, *this);
1757
5.87k
        cpos.each_sub(visitor_t{}, *this);
1758
5.87k
        rpos.each_right_sub(visitor_t{}, *this);
1759
5.87k
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&)
Line
Count
Source
1752
3.35k
    {
1753
3.35k
        assert(n == 0u);
1754
3.35k
        assert(total == 0u);
1755
3.35k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
3.35k
        lpos.each_left_sub(visitor_t{}, *this);
1757
3.35k
        cpos.each_sub(visitor_t{}, *this);
1758
3.35k
        rpos.each_right_sub(visitor_t{}, *this);
1759
3.35k
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1752
15.0k
    {
1753
15.0k
        assert(n == 0u);
1754
15.0k
        assert(total == 0u);
1755
15.0k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
15.0k
        lpos.each_left_sub(visitor_t{}, *this);
1757
15.0k
        cpos.each_sub(visitor_t{}, *this);
1758
15.0k
        rpos.each_right_sub(visitor_t{}, *this);
1759
15.0k
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1752
329k
    {
1753
329k
        assert(n == 0u);
1754
329k
        assert(total == 0u);
1755
329k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
329k
        lpos.each_left_sub(visitor_t{}, *this);
1757
329k
        cpos.each_sub(visitor_t{}, *this);
1758
329k
        rpos.each_right_sub(visitor_t{}, *this);
1759
329k
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1752
1.13M
    {
1753
1.13M
        assert(n == 0u);
1754
1.13M
        assert(total == 0u);
1755
1.13M
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
1.13M
        lpos.each_left_sub(visitor_t{}, *this);
1757
1.13M
        cpos.each_sub(visitor_t{}, *this);
1758
1.13M
        rpos.each_right_sub(visitor_t{}, *this);
1759
1.13M
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&)
Line
Count
Source
1752
3.18M
    {
1753
3.18M
        assert(n == 0u);
1754
3.18M
        assert(total == 0u);
1755
3.18M
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
3.18M
        lpos.each_left_sub(visitor_t{}, *this);
1757
3.18M
        cpos.each_sub(visitor_t{}, *this);
1758
3.18M
        rpos.each_right_sub(visitor_t{}, *this);
1759
3.18M
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1752
1.98k
    {
1753
1.98k
        assert(n == 0u);
1754
1.98k
        assert(total == 0u);
1755
1.98k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
1.98k
        lpos.each_left_sub(visitor_t{}, *this);
1757
1.98k
        cpos.each_sub(visitor_t{}, *this);
1758
1.98k
        rpos.each_right_sub(visitor_t{}, *this);
1759
1.98k
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1752
7.41k
    {
1753
7.41k
        assert(n == 0u);
1754
7.41k
        assert(total == 0u);
1755
7.41k
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
7.41k
        lpos.each_left_sub(visitor_t{}, *this);
1757
7.41k
        cpos.each_sub(visitor_t{}, *this);
1758
7.41k
        rpos.each_right_sub(visitor_t{}, *this);
1759
7.41k
    }
void immer::detail::rbts::concat_rebalance_plan<3u, 3u>::fill<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1752
8.44M
    {
1753
8.44M
        assert(n == 0u);
1754
8.44M
        assert(total == 0u);
1755
8.44M
        using visitor_t = concat_rebalance_plan_fill_visitor;
1756
8.44M
        lpos.each_left_sub(visitor_t{}, *this);
1757
8.44M
        cpos.each_sub(visitor_t{}, *this);
1758
8.44M
        rpos.each_right_sub(visitor_t{}, *this);
1759
8.44M
    }
1760
1761
    void shuffle(shift_t shift)
1762
13.2M
    {
1763
        // gcc seems to not really understand this code... :(
1764
13.2M
#if !defined(_MSC_VER)
1765
13.2M
#pragma GCC diagnostic push
1766
13.2M
#pragma GCC diagnostic ignored "-Warray-bounds"
1767
13.2M
#endif
1768
13.2M
        constexpr count_t rrb_extras    = 2;
1769
13.2M
        constexpr count_t rrb_invariant = 1;
1770
13.2M
        const auto bits                 = shift == BL ? BL : B;
1771
13.2M
        const auto branches             = count_t{1} << bits;
1772
13.2M
        const auto optimal              = ((total - 1) >> bits) + 1;
1773
13.2M
        count_t i                       = 0;
1774
16.4M
        while (n >= optimal + rrb_extras) {
1775
            // skip ok nodes
1776
7.32M
            while (counts[i] > branches - rrb_invariant)
1777
4.04M
                i++;
1778
3.28M
            assert(i < n);
1779
            // short node, redistribute
1780
3.28M
            auto remaining = counts[i];
1781
12.5M
            do {
1782
12.5M
                auto next  = counts[i + 1];
1783
12.5M
                auto count = std::min(remaining + next, branches);
1784
12.5M
                counts[i]  = count;
1785
12.5M
                assert(counts[i]);
1786
12.5M
                remaining += next - count;
1787
12.5M
                ++i;
1788
12.5M
            } while (remaining > 0);
1789
            // remove node
1790
3.28M
            std::move(counts + i + 1, counts + n, counts + i);
1791
3.28M
            --n;
1792
3.28M
            --i;
1793
3.28M
        }
1794
13.2M
#if !defined(_MSC_VER)
1795
13.2M
#pragma GCC diagnostic pop
1796
13.2M
#endif
1797
13.2M
    }
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
13.2M
    {
1803
13.2M
        using node_t    = node_type<CPos>;
1804
13.2M
        using merger_t  = concat_merger<node_t>;
1805
13.2M
        using visitor_t = concat_merger_visitor;
1806
13.2M
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
13.2M
        IMMER_TRY {
1808
13.2M
            lpos.each_left_sub(visitor_t{}, merger);
1809
13.2M
            cpos.each_sub(visitor_t{}, merger);
1810
13.2M
            rpos.each_right_sub(visitor_t{}, merger);
1811
13.2M
            cpos.each_sub(dec_visitor{});
1812
13.2M
            return merger.finish();
1813
13.2M
        }
1814
13.2M
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
13.2M
    }
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, 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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1802
780
    {
1803
780
        using node_t    = node_type<CPos>;
1804
780
        using merger_t  = concat_merger<node_t>;
1805
780
        using visitor_t = concat_merger_visitor;
1806
780
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
780
        IMMER_TRY {
1808
780
            lpos.each_left_sub(visitor_t{}, merger);
1809
780
            cpos.each_sub(visitor_t{}, merger);
1810
780
            rpos.each_right_sub(visitor_t{}, merger);
1811
780
            cpos.each_sub(dec_visitor{});
1812
780
            return merger.finish();
1813
780
        }
1814
780
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
780
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1802
719
    {
1803
719
        using node_t    = node_type<CPos>;
1804
719
        using merger_t  = concat_merger<node_t>;
1805
719
        using visitor_t = concat_merger_visitor;
1806
719
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
719
        IMMER_TRY {
1808
719
            lpos.each_left_sub(visitor_t{}, merger);
1809
719
            cpos.each_sub(visitor_t{}, merger);
1810
719
            rpos.each_right_sub(visitor_t{}, merger);
1811
719
            cpos.each_sub(dec_visitor{});
1812
719
            return merger.finish();
1813
719
        }
1814
719
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
719
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1802
1.87k
    {
1803
1.87k
        using node_t    = node_type<CPos>;
1804
1.87k
        using merger_t  = concat_merger<node_t>;
1805
1.87k
        using visitor_t = concat_merger_visitor;
1806
1.87k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
1.87k
        IMMER_TRY {
1808
1.87k
            lpos.each_left_sub(visitor_t{}, merger);
1809
1.87k
            cpos.each_sub(visitor_t{}, merger);
1810
1.87k
            rpos.each_right_sub(visitor_t{}, merger);
1811
1.87k
            cpos.each_sub(dec_visitor{});
1812
1.87k
            return merger.finish();
1813
1.87k
        }
1814
1.87k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
1.87k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1802
1.97k
    {
1803
1.97k
        using node_t    = node_type<CPos>;
1804
1.97k
        using merger_t  = concat_merger<node_t>;
1805
1.97k
        using visitor_t = concat_merger_visitor;
1806
1.97k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
1.97k
        IMMER_TRY {
1808
1.97k
            lpos.each_left_sub(visitor_t{}, merger);
1809
1.97k
            cpos.each_sub(visitor_t{}, merger);
1810
1.97k
            rpos.each_right_sub(visitor_t{}, merger);
1811
1.97k
            cpos.each_sub(dec_visitor{});
1812
1.97k
            return merger.finish();
1813
1.97k
        }
1814
1.97k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
1.97k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1802
71.9k
    {
1803
71.9k
        using node_t    = node_type<CPos>;
1804
71.9k
        using merger_t  = concat_merger<node_t>;
1805
71.9k
        using visitor_t = concat_merger_visitor;
1806
71.9k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
71.9k
        IMMER_TRY {
1808
71.9k
            lpos.each_left_sub(visitor_t{}, merger);
1809
71.9k
            cpos.each_sub(visitor_t{}, merger);
1810
71.9k
            rpos.each_right_sub(visitor_t{}, merger);
1811
71.9k
            cpos.each_sub(dec_visitor{});
1812
71.9k
            return merger.finish();
1813
71.9k
        }
1814
71.9k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
71.9k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1802
5.87k
    {
1803
5.87k
        using node_t    = node_type<CPos>;
1804
5.87k
        using merger_t  = concat_merger<node_t>;
1805
5.87k
        using visitor_t = concat_merger_visitor;
1806
5.87k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
5.87k
        IMMER_TRY {
1808
5.87k
            lpos.each_left_sub(visitor_t{}, merger);
1809
5.87k
            cpos.each_sub(visitor_t{}, merger);
1810
5.87k
            rpos.each_right_sub(visitor_t{}, merger);
1811
5.87k
            cpos.each_sub(dec_visitor{});
1812
5.87k
            return merger.finish();
1813
5.87k
        }
1814
5.87k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
5.87k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&)
Line
Count
Source
1802
3.35k
    {
1803
3.35k
        using node_t    = node_type<CPos>;
1804
3.35k
        using merger_t  = concat_merger<node_t>;
1805
3.35k
        using visitor_t = concat_merger_visitor;
1806
3.35k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
3.35k
        IMMER_TRY {
1808
3.35k
            lpos.each_left_sub(visitor_t{}, merger);
1809
3.35k
            cpos.each_sub(visitor_t{}, merger);
1810
3.35k
            rpos.each_right_sub(visitor_t{}, merger);
1811
3.35k
            cpos.each_sub(dec_visitor{});
1812
3.35k
            return merger.finish();
1813
3.35k
        }
1814
3.35k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
3.35k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1802
15.0k
    {
1803
15.0k
        using node_t    = node_type<CPos>;
1804
15.0k
        using merger_t  = concat_merger<node_t>;
1805
15.0k
        using visitor_t = concat_merger_visitor;
1806
15.0k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
15.0k
        IMMER_TRY {
1808
15.0k
            lpos.each_left_sub(visitor_t{}, merger);
1809
15.0k
            cpos.each_sub(visitor_t{}, merger);
1810
15.0k
            rpos.each_right_sub(visitor_t{}, merger);
1811
15.0k
            cpos.each_sub(dec_visitor{});
1812
15.0k
            return merger.finish();
1813
15.0k
        }
1814
15.0k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
15.0k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1802
329k
    {
1803
329k
        using node_t    = node_type<CPos>;
1804
329k
        using merger_t  = concat_merger<node_t>;
1805
329k
        using visitor_t = concat_merger_visitor;
1806
329k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
329k
        IMMER_TRY {
1808
329k
            lpos.each_left_sub(visitor_t{}, merger);
1809
329k
            cpos.each_sub(visitor_t{}, merger);
1810
329k
            rpos.each_right_sub(visitor_t{}, merger);
1811
329k
            cpos.each_sub(dec_visitor{});
1812
329k
            return merger.finish();
1813
329k
        }
1814
329k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
329k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1802
1.13M
    {
1803
1.13M
        using node_t    = node_type<CPos>;
1804
1.13M
        using merger_t  = concat_merger<node_t>;
1805
1.13M
        using visitor_t = concat_merger_visitor;
1806
1.13M
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
1.13M
        IMMER_TRY {
1808
1.13M
            lpos.each_left_sub(visitor_t{}, merger);
1809
1.13M
            cpos.each_sub(visitor_t{}, merger);
1810
1.13M
            rpos.each_right_sub(visitor_t{}, merger);
1811
1.13M
            cpos.each_sub(dec_visitor{});
1812
1.13M
            return merger.finish();
1813
1.13M
        }
1814
1.13M
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
1.13M
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&)
Line
Count
Source
1802
3.18M
    {
1803
3.18M
        using node_t    = node_type<CPos>;
1804
3.18M
        using merger_t  = concat_merger<node_t>;
1805
3.18M
        using visitor_t = concat_merger_visitor;
1806
3.18M
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
3.18M
        IMMER_TRY {
1808
3.18M
            lpos.each_left_sub(visitor_t{}, merger);
1809
3.18M
            cpos.each_sub(visitor_t{}, merger);
1810
3.18M
            rpos.each_right_sub(visitor_t{}, merger);
1811
3.18M
            cpos.each_sub(dec_visitor{});
1812
3.18M
            return merger.finish();
1813
3.18M
        }
1814
3.18M
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
3.18M
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1802
1.98k
    {
1803
1.98k
        using node_t    = node_type<CPos>;
1804
1.98k
        using merger_t  = concat_merger<node_t>;
1805
1.98k
        using visitor_t = concat_merger_visitor;
1806
1.98k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
1.98k
        IMMER_TRY {
1808
1.98k
            lpos.each_left_sub(visitor_t{}, merger);
1809
1.98k
            cpos.each_sub(visitor_t{}, merger);
1810
1.98k
            rpos.each_right_sub(visitor_t{}, merger);
1811
1.98k
            cpos.each_sub(dec_visitor{});
1812
1.98k
            return merger.finish();
1813
1.98k
        }
1814
1.98k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
1.98k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1802
7.41k
    {
1803
7.41k
        using node_t    = node_type<CPos>;
1804
7.41k
        using merger_t  = concat_merger<node_t>;
1805
7.41k
        using visitor_t = concat_merger_visitor;
1806
7.41k
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
7.41k
        IMMER_TRY {
1808
7.41k
            lpos.each_left_sub(visitor_t{}, merger);
1809
7.41k
            cpos.each_sub(visitor_t{}, merger);
1810
7.41k
            rpos.each_right_sub(visitor_t{}, merger);
1811
7.41k
            cpos.each_sub(dec_visitor{});
1812
7.41k
            return merger.finish();
1813
7.41k
        }
1814
7.41k
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
7.41k
    }
immer::detail::rbts::concat_center_pos<std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan<3u, 3u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1802
8.44M
    {
1803
8.44M
        using node_t    = node_type<CPos>;
1804
8.44M
        using merger_t  = concat_merger<node_t>;
1805
8.44M
        using visitor_t = concat_merger_visitor;
1806
8.44M
        auto merger     = merger_t{cpos.shift(), counts, n};
1807
8.44M
        IMMER_TRY {
1808
8.44M
            lpos.each_left_sub(visitor_t{}, merger);
1809
8.44M
            cpos.each_sub(visitor_t{}, merger);
1810
8.44M
            rpos.each_right_sub(visitor_t{}, merger);
1811
8.44M
            cpos.each_sub(dec_visitor{});
1812
8.44M
            return merger.finish();
1813
8.44M
        }
1814
8.44M
        IMMER_CATCH (...) {
1815
0
            merger.abort();
1816
0
            IMMER_RETHROW;
1817
0
        }
1818
8.44M
    }
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
13.2M
{
1824
13.2M
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
13.2M
    plan.fill(lpos, cpos, rpos);
1826
13.2M
    plan.shuffle(cpos.shift());
1827
13.2M
    IMMER_TRY {
1828
13.2M
        return plan.merge(lpos, cpos, rpos);
1829
13.2M
    }
1830
13.2M
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
13.2M
}
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&&)
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::null_sub_pos, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::null_sub_pos&&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1823
780
{
1824
780
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
780
    plan.fill(lpos, cpos, rpos);
1826
780
    plan.shuffle(cpos.shift());
1827
780
    IMMER_TRY {
1828
780
        return plan.merge(lpos, cpos, rpos);
1829
780
    }
1830
780
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
780
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1823
719
{
1824
719
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
719
    plan.fill(lpos, cpos, rpos);
1826
719
    plan.shuffle(cpos.shift());
1827
719
    IMMER_TRY {
1828
719
        return plan.merge(lpos, cpos, rpos);
1829
719
    }
1830
719
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
719
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::null_sub_pos, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::null_sub_pos&&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1823
1.87k
{
1824
1.87k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
1.87k
    plan.fill(lpos, cpos, rpos);
1826
1.87k
    plan.shuffle(cpos.shift());
1827
1.87k
    IMMER_TRY {
1828
1.87k
        return plan.merge(lpos, cpos, rpos);
1829
1.87k
    }
1830
1.87k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
1.87k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1823
1.97k
{
1824
1.97k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
1.97k
    plan.fill(lpos, cpos, rpos);
1826
1.97k
    plan.shuffle(cpos.shift());
1827
1.97k
    IMMER_TRY {
1828
1.97k
        return plan.merge(lpos, cpos, rpos);
1829
1.97k
    }
1830
1.97k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
1.97k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::null_sub_pos, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::null_sub_pos&&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1823
71.9k
{
1824
71.9k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
71.9k
    plan.fill(lpos, cpos, rpos);
1826
71.9k
    plan.shuffle(cpos.shift());
1827
71.9k
    IMMER_TRY {
1828
71.9k
        return plan.merge(lpos, cpos, rpos);
1829
71.9k
    }
1830
71.9k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
71.9k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1823
5.87k
{
1824
5.87k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
5.87k
    plan.fill(lpos, cpos, rpos);
1826
5.87k
    plan.shuffle(cpos.shift());
1827
5.87k
    IMMER_TRY {
1828
5.87k
        return plan.merge(lpos, cpos, rpos);
1829
5.87k
    }
1830
5.87k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
5.87k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&&)
Line
Count
Source
1823
3.35k
{
1824
3.35k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
3.35k
    plan.fill(lpos, cpos, rpos);
1826
3.35k
    plan.shuffle(cpos.shift());
1827
3.35k
    IMMER_TRY {
1828
3.35k
        return plan.merge(lpos, cpos, rpos);
1829
3.35k
    }
1830
3.35k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
3.35k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1823
15.0k
{
1824
15.0k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
15.0k
    plan.fill(lpos, cpos, rpos);
1826
15.0k
    plan.shuffle(cpos.shift());
1827
15.0k
    IMMER_TRY {
1828
15.0k
        return plan.merge(lpos, cpos, rpos);
1829
15.0k
    }
1830
15.0k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
15.0k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1823
329k
{
1824
329k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
329k
    plan.fill(lpos, cpos, rpos);
1826
329k
    plan.shuffle(cpos.shift());
1827
329k
    IMMER_TRY {
1828
329k
        return plan.merge(lpos, cpos, rpos);
1829
329k
    }
1830
329k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
329k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1823
1.13M
{
1824
1.13M
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
1.13M
    plan.fill(lpos, cpos, rpos);
1826
1.13M
    plan.shuffle(cpos.shift());
1827
1.13M
    IMMER_TRY {
1828
1.13M
        return plan.merge(lpos, cpos, rpos);
1829
1.13M
    }
1830
1.13M
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
1.13M
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&&)
Line
Count
Source
1823
3.18M
{
1824
3.18M
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
3.18M
    plan.fill(lpos, cpos, rpos);
1826
3.18M
    plan.shuffle(cpos.shift());
1827
3.18M
    IMMER_TRY {
1828
3.18M
        return plan.merge(lpos, cpos, rpos);
1829
3.18M
    }
1830
3.18M
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
3.18M
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1823
1.98k
{
1824
1.98k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
1.98k
    plan.fill(lpos, cpos, rpos);
1826
1.98k
    plan.shuffle(cpos.shift());
1827
1.98k
    IMMER_TRY {
1828
1.98k
        return plan.merge(lpos, cpos, rpos);
1829
1.98k
    }
1830
1.98k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
1.98k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1823
7.41k
{
1824
7.41k
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
7.41k
    plan.fill(lpos, cpos, rpos);
1826
7.41k
    plan.shuffle(cpos.shift());
1827
7.41k
    IMMER_TRY {
1828
7.41k
        return plan.merge(lpos, cpos, rpos);
1829
7.41k
    }
1830
7.41k
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
7.41k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1823
8.44M
{
1824
8.44M
    auto plan = concat_rebalance_plan<Node::bits, Node::bits_leaf>{};
1825
8.44M
    plan.fill(lpos, cpos, rpos);
1826
8.44M
    plan.shuffle(cpos.shift());
1827
8.44M
    IMMER_TRY {
1828
8.44M
        return plan.merge(lpos, cpos, rpos);
1829
8.44M
    }
1830
8.44M
    IMMER_CATCH (...) {
1831
0
        cpos.each_sub(dec_visitor{});
1832
0
        IMMER_RETHROW;
1833
0
    }
1834
8.44M
}
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
1.07M
{
1839
1.07M
    static_assert(Node::bits >= 2, "");
1840
1.07M
    assert(lpos.shift() == tpos.shift());
1841
1.07M
    assert(lpos.shift() == rpos.shift());
1842
1.07M
    assert(lpos.shift() == 0);
1843
1.07M
    if (tpos.count() > 0)
1844
1.06M
        return {
1845
1.06M
            Node::bits_leaf,
1846
1.06M
            lpos.node()->inc(),
1847
1.06M
            lpos.count(),
1848
1.06M
            tpos.node()->inc(),
1849
1.06M
            tpos.count(),
1850
1.06M
            rpos.node()->inc(),
1851
1.06M
            rpos.count(),
1852
1.06M
        };
1853
8.56k
    else
1854
8.56k
        return {
1855
8.56k
            Node::bits_leaf,
1856
8.56k
            lpos.node()->inc(),
1857
8.56k
            lpos.count(),
1858
8.56k
            rpos.node()->inc(),
1859
8.56k
            rpos.count(),
1860
8.56k
        };
1861
1.07M
}
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1838
2.69k
{
1839
2.69k
    static_assert(Node::bits >= 2, "");
1840
2.69k
    assert(lpos.shift() == tpos.shift());
1841
2.69k
    assert(lpos.shift() == rpos.shift());
1842
2.69k
    assert(lpos.shift() == 0);
1843
2.69k
    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.69k
    else
1854
2.69k
        return {
1855
2.69k
            Node::bits_leaf,
1856
2.69k
            lpos.node()->inc(),
1857
2.69k
            lpos.count(),
1858
2.69k
            rpos.node()->inc(),
1859
2.69k
            rpos.count(),
1860
2.69k
        };
1861
2.69k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1838
5.87k
{
1839
5.87k
    static_assert(Node::bits >= 2, "");
1840
5.87k
    assert(lpos.shift() == tpos.shift());
1841
5.87k
    assert(lpos.shift() == rpos.shift());
1842
5.87k
    assert(lpos.shift() == 0);
1843
5.87k
    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.87k
    else
1854
5.87k
        return {
1855
5.87k
            Node::bits_leaf,
1856
5.87k
            lpos.node()->inc(),
1857
5.87k
            lpos.count(),
1858
5.87k
            rpos.node()->inc(),
1859
5.87k
            rpos.count(),
1860
5.87k
        };
1861
5.87k
}
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1838
338k
{
1839
338k
    static_assert(Node::bits >= 2, "");
1840
338k
    assert(lpos.shift() == tpos.shift());
1841
338k
    assert(lpos.shift() == rpos.shift());
1842
338k
    assert(lpos.shift() == 0);
1843
338k
    if (tpos.count() > 0)
1844
338k
        return {
1845
338k
            Node::bits_leaf,
1846
338k
            lpos.node()->inc(),
1847
338k
            lpos.count(),
1848
338k
            tpos.node()->inc(),
1849
338k
            tpos.count(),
1850
338k
            rpos.node()->inc(),
1851
338k
            rpos.count(),
1852
338k
        };
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
338k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1838
729k
{
1839
729k
    static_assert(Node::bits >= 2, "");
1840
729k
    assert(lpos.shift() == tpos.shift());
1841
729k
    assert(lpos.shift() == rpos.shift());
1842
729k
    assert(lpos.shift() == 0);
1843
729k
    if (tpos.count() > 0)
1844
729k
        return {
1845
729k
            Node::bits_leaf,
1846
729k
            lpos.node()->inc(),
1847
729k
            lpos.count(),
1848
729k
            tpos.node()->inc(),
1849
729k
            tpos.count(),
1850
729k
            rpos.node()->inc(),
1851
729k
            rpos.count(),
1852
729k
        };
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
729k
}
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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
13.2M
{
1873
13.2M
    auto lshift = lpos.shift();
1874
13.2M
    auto rshift = rpos.shift();
1875
13.2M
    if (lshift > rshift) {
1876
3.18M
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
3.18M
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
10.0M
    } else if (lshift < rshift) {
1879
74.6k
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
74.6k
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
9.94M
    } else {
1882
9.94M
        assert(lshift == rshift);
1883
9.94M
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
9.94M
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
9.94M
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
9.94M
    }
1887
13.2M
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1872
27.0k
{
1873
27.0k
    auto lshift = lpos.shift();
1874
27.0k
    auto rshift = rpos.shift();
1875
27.0k
    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
27.0k
    } else if (lshift < rshift) {
1879
21.1k
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
21.1k
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
21.1k
    } else {
1882
5.87k
        assert(lshift == rshift);
1883
5.87k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
5.87k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
5.87k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
5.87k
    }
1887
27.0k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1872
2.69k
{
1873
2.69k
    auto lshift = lpos.shift();
1874
2.69k
    auto rshift = rpos.shift();
1875
2.69k
    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.69k
    } else if (lshift < rshift) {
1879
719
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
719
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
1.97k
    } else {
1882
1.97k
        assert(lshift == rshift);
1883
1.97k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
1.97k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
1.97k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
1.97k
    }
1887
2.69k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1872
1.03k
{
1873
1.03k
    auto lshift = lpos.shift();
1874
1.03k
    auto rshift = rpos.shift();
1875
1.03k
    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.03k
    } else if (lshift < rshift) {
1879
319
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
319
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
719
    } else {
1882
719
        assert(lshift == rshift);
1883
719
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
719
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
719
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
719
    }
1887
1.03k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1872
11.6M
{
1873
11.6M
    auto lshift = lpos.shift();
1874
11.6M
    auto rshift = rpos.shift();
1875
11.6M
    if (lshift > rshift) {
1876
3.17M
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
3.17M
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
8.48M
    } else if (lshift < rshift) {
1879
43.0k
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
43.0k
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
8.44M
    } else {
1882
8.44M
        assert(lshift == rshift);
1883
8.44M
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
8.44M
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
8.44M
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
8.44M
    }
1887
11.6M
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1872
1.14M
{
1873
1.14M
    auto lshift = lpos.shift();
1874
1.14M
    auto rshift = rpos.shift();
1875
1.14M
    if (lshift > rshift) {
1876
2.53k
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
2.53k
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
1.14M
    } else if (lshift < rshift) {
1879
7.69k
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
7.69k
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
1.13M
    } else {
1882
1.13M
        assert(lshift == rshift);
1883
1.13M
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
1.13M
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
1.13M
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
1.13M
    }
1887
1.14M
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1872
330k
{
1873
330k
    auto lshift = lpos.shift();
1874
330k
    auto rshift = rpos.shift();
1875
330k
    if (lshift > rshift) {
1876
824
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
824
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
330k
    } else if (lshift < rshift) {
1879
446
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
446
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
329k
    } else {
1882
329k
        assert(lshift == rshift);
1883
329k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
329k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
329k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
329k
    }
1887
330k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1872
15.2k
{
1873
15.2k
    auto lshift = lpos.shift();
1874
15.2k
    auto rshift = rpos.shift();
1875
15.2k
    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
15.2k
    } else if (lshift < rshift) {
1879
197
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
197
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
15.0k
    } else {
1882
15.0k
        assert(lshift == rshift);
1883
15.0k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
15.0k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
15.0k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
15.0k
    }
1887
15.2k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1872
17.0k
{
1873
17.0k
    auto lshift = lpos.shift();
1874
17.0k
    auto rshift = rpos.shift();
1875
17.0k
    if (lshift > rshift) {
1876
8.95k
        auto cpos = lpos.last_sub(concat_left_visitor<Node>{}, tpos, rpos);
1877
8.95k
        return concat_rebalance<Node>(lpos, cpos, null_sub_pos{});
1878
8.95k
    } else if (lshift < rshift) {
1879
710
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
710
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
7.41k
    } else {
1882
7.41k
        assert(lshift == rshift);
1883
7.41k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
7.41k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
7.41k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
7.41k
    }
1887
17.0k
}
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1872
2.25k
{
1873
2.25k
    auto lshift = lpos.shift();
1874
2.25k
    auto rshift = rpos.shift();
1875
2.25k
    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.25k
    } else if (lshift < rshift) {
1879
264
        auto cpos = rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1880
264
        return concat_rebalance<Node>(null_sub_pos{}, cpos, rpos);
1881
1.98k
    } else {
1882
1.98k
        assert(lshift == rshift);
1883
1.98k
        assert(Node::bits_leaf == 0u || lshift > 0);
1884
1.98k
        auto cpos = lpos.last_sub(concat_both_visitor<Node>{}, tpos, rpos);
1885
1.98k
        return concat_rebalance<Node>(lpos, cpos, rpos);
1886
1.98k
    }
1887
2.25k
}
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
3.18M
    {
1898
3.18M
        return concat_inners<Node>(lpos, tpos, rpos);
1899
3.18M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1897
3.17M
    {
1898
3.17M
        return concat_inners<Node>(lpos, tpos, rpos);
1899
3.17M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1897
5.10k
    {
1898
5.10k
        return concat_inners<Node>(lpos, tpos, rpos);
1899
5.10k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1897
1.18k
    {
1898
1.18k
        return concat_inners<Node>(lpos, tpos, rpos);
1899
1.18k
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1897
8.59k
    {
1898
8.59k
        return concat_inners<Node>(lpos, tpos, rpos);
1899
8.59k
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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
8.93M
    {
1918
8.93M
        return concat_inners<Node>(lpos, tpos, rpos);
1919
8.93M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1917
20.8k
    {
1918
20.8k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
20.8k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1917
281
    {
1918
281
        return concat_inners<Node>(lpos, tpos, rpos);
1919
281
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1917
1.03k
    {
1918
1.03k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
1.03k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1917
1.13M
    {
1918
1.13M
        return concat_inners<Node>(lpos, tpos, rpos);
1919
1.13M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1917
319k
    {
1918
319k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
319k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1917
15.2k
    {
1918
15.2k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
15.2k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1917
7.44M
    {
1918
7.44M
        return concat_inners<Node>(lpos, tpos, rpos);
1919
7.44M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1917
1.82k
    {
1918
1.82k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
1.82k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1917
2.25k
    {
1918
2.25k
        return concat_inners<Node>(lpos, tpos, rpos);
1919
2.25k
    }
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
1.07M
    {
1925
1.07M
        return concat_leafs<Node>(lpos, tpos, rpos);
1926
1.07M
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1924
2.69k
    {
1925
2.69k
        return concat_leafs<Node>(lpos, tpos, rpos);
1926
2.69k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1924
5.87k
    {
1925
5.87k
        return concat_leafs<Node>(lpos, tpos, rpos);
1926
5.87k
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1924
338k
    {
1925
338k
        return concat_leafs<Node>(lpos, tpos, rpos);
1926
338k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1924
729k
    {
1925
729k
        return concat_leafs<Node>(lpos, tpos, rpos);
1926
729k
    }
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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
8.86M
    {
1938
8.86M
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
8.86M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1937
6.76k
    {
1938
6.76k
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
6.76k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1937
7.84k
    {
1938
7.84k
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
7.84k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1937
1.44M
    {
1938
1.44M
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
1.44M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1937
262
    {
1938
262
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
262
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1937
1.01k
    {
1938
1.01k
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
1.01k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1937
7.40M
    {
1938
7.40M
        return rpos.first_sub(concat_right_visitor<Node>{}, lpos, tpos);
1939
7.40M
    }
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
1.07M
    {
1945
1.07M
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
1.07M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1944
719
    {
1945
719
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
719
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1944
1.97k
    {
1945
1.97k
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
1.97k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1944
5.87k
    {
1945
5.87k
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
5.87k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1944
10.0k
    {
1945
10.0k
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
10.0k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1944
328k
    {
1945
328k
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
328k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1944
729k
    {
1945
729k
        return rpos.first_sub_leaf(concat_right_visitor<Node>{}, lpos, tpos);
1946
729k
    }
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
1.07M
    {
1959
1.07M
        return concat_inners<Node>(lpos, tpos, rpos);
1960
1.07M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1958
6.15k
    {
1959
6.15k
        return concat_inners<Node>(lpos, tpos, rpos);
1960
6.15k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1958
2.40k
    {
1959
2.40k
        return concat_inners<Node>(lpos, tpos, rpos);
1960
2.40k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1958
1.04M
    {
1959
1.04M
        return concat_inners<Node>(lpos, tpos, rpos);
1960
1.04M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1958
6.65k
    {
1959
6.65k
        return concat_inners<Node>(lpos, tpos, rpos);
1960
6.65k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1958
6.59k
    {
1959
6.59k
        return concat_inners<Node>(lpos, tpos, rpos);
1960
6.59k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_right_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Line
Count
Source
1958
10.4k
    {
1959
10.4k
        return concat_inners<Node>(lpos, tpos, rpos);
1960
10.4k
    }
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
1.07M
    {
1972
1.07M
        return visit_maybe_relaxed_sub(
1973
1.07M
            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
1974
1.07M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*&, unsigned int&, unsigned long&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*&, unsigned int&, unsigned long&)
Line
Count
Source
1971
8.56k
    {
1972
8.56k
        return visit_maybe_relaxed_sub(
1973
8.56k
            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
1974
8.56k
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*&, unsigned int&, unsigned long&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*&, unsigned int&, unsigned long&)
Line
Count
Source
1971
1.05M
    {
1972
1.05M
        return visit_maybe_relaxed_sub(
1973
1.05M
            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
1974
1.05M
    }
immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_left_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*&, unsigned int&, unsigned long&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&&, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*&, unsigned int&, unsigned long&)
Line
Count
Source
1971
17.0k
    {
1972
17.0k
        return visit_maybe_relaxed_sub(
1973
17.0k
            args..., concat_trees_right_visitor<Node>{}, lpos, tpos);
1974
17.0k
    }
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
1.06M
{
1987
1.06M
    return visit_maybe_relaxed_sub(lroot,
1988
1.06M
                                   lshift,
1989
1.06M
                                   lsize,
1990
1.06M
                                   concat_trees_left_visitor<Node>{},
1991
1.06M
                                   make_leaf_pos(ltail, ltcount),
1992
1.06M
                                   rroot,
1993
1.06M
                                   rshift,
1994
1.06M
                                   rsize)
1995
1.06M
        .realize();
1996
1.06M
}
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.56k
{
2002
8.56k
    return make_singleton_regular_sub_pos(ltail, ltcount)
2003
8.56k
        .visit(concat_trees_left_visitor<Node>{},
2004
8.56k
               empty_leaf_pos<Node>{},
2005
8.56k
               rroot,
2006
8.56k
               rshift,
2007
8.56k
               rsize)
2008
8.56k
        .realize();
2009
8.56k
}
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::merge_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::merge_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::merge_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::merge_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: void immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::merge_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > >(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > >(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > >(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > >(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > >(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_merger_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::null_sub_pos&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t> immer::detail::rbts::concat_rebalance_plan_mut<3u, 3u>::merge<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::null_sub_pos, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::null_sub_pos, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::null_sub_pos, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::null_sub_pos>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_rebalance_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_leafs_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_inners_mut<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, std::__1::decay<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::type::node_t::edit_t, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::full_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_inner<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::full_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_both_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_leaf<immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::leaf_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&)
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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_right_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::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::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*&, unsigned int&, unsigned long&>(immer::detail::rbts::singleton_regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::empty_leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*&, unsigned int&, unsigned long&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*&, unsigned int&, unsigned long&>(immer::detail::rbts::relaxed_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*&, unsigned int&, unsigned long&)
Unexecuted instantiation: immer::detail::rbts::concat_center_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> > immer::detail::rbts::concat_trees_left_mut_visitor<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >::visit_node<immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*&, unsigned int&, unsigned long&>(immer::detail::rbts::regular_sub_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::leaf_pos<immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u> >&&, immer::no_transience_policy::apply<immer::heap_policy<immer::cpp_heap> >::type::edit, immer::detail::rbts::node<int, immer::memory_policy<immer::heap_policy<immer::cpp_heap>, immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, true, true>, 3u, 3u>*&, 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