/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 |