Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2011-present, Facebook, Inc. All rights reserved. |
2 | | // This source code is licensed under both the GPLv2 (found in the |
3 | | // COPYING file in the root directory) and Apache 2.0 License |
4 | | // (found in the LICENSE.Apache file in the root directory). |
5 | | |
6 | | #pragma once |
7 | | |
8 | | #include <algorithm> |
9 | | #include <cstdint> |
10 | | #include <functional> |
11 | | |
12 | | #include "port/port.h" |
13 | | #include "util/autovector.h" |
14 | | |
15 | | namespace ROCKSDB_NAMESPACE { |
16 | | |
17 | | // Binary heap implementation optimized for use in multi-way merge sort. |
18 | | // Comparison to std::priority_queue: |
19 | | // - In libstdc++, std::priority_queue::pop() usually performs just over logN |
20 | | // comparisons but never fewer. |
21 | | // - std::priority_queue does not have a replace-top operation, requiring a |
22 | | // pop+push. If the replacement element is the new top, this requires |
23 | | // around 2logN comparisons. |
24 | | // - This heap's pop() uses a "schoolbook" downheap which requires up to ~2logN |
25 | | // comparisons. |
26 | | // - This heap provides a replace_top() operation which requires [1, 2logN] |
27 | | // comparisons. When the replacement element is also the new top, this |
28 | | // takes just 1 or 2 comparisons. |
29 | | // |
30 | | // The last property can yield an order-of-magnitude performance improvement |
31 | | // when merge-sorting real-world non-random data. If the merge operation is |
32 | | // likely to take chunks of elements from the same input stream, only 1 |
33 | | // comparison per element is needed. In RocksDB-land, this happens when |
34 | | // compacting a database where keys are not randomly distributed across L0 |
35 | | // files but nearby keys are likely to be in the same L0 file. |
36 | | // |
37 | | // The container uses the same counterintuitive ordering as |
38 | | // std::priority_queue: the comparison operator is expected to provide the |
39 | | // less-than relation, but top() will return the maximum. |
40 | | |
41 | | template <typename T, typename Compare = std::less<T>> |
42 | | class BinaryHeap { |
43 | | public: |
44 | 0 | BinaryHeap() {} |
45 | 76.9k | explicit BinaryHeap(Compare cmp) : cmp_(std::move(cmp)) {} Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::BinaryHeap(rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> >) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::BinaryHeap(rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> >) rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ForwardRangeDelIterator::EndKeyMinComparator>::BinaryHeap(rocksdb::ForwardRangeDelIterator::EndKeyMinComparator) Line | Count | Source | 45 | 13.0k | explicit BinaryHeap(Compare cmp) : cmp_(std::move(cmp)) {} |
rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::BinaryHeap(rocksdb::StartKeyMinComparator) Line | Count | Source | 45 | 18.0k | explicit BinaryHeap(Compare cmp) : cmp_(std::move(cmp)) {} |
rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator>::BinaryHeap(rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator) Line | Count | Source | 45 | 13.0k | explicit BinaryHeap(Compare cmp) : cmp_(std::move(cmp)) {} |
rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator>::BinaryHeap(rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator) Line | Count | Source | 45 | 13.0k | explicit BinaryHeap(Compare cmp) : cmp_(std::move(cmp)) {} |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::BinaryHeap(rocksdb::MergingIterator::MinHeapItemComparator) Line | Count | Source | 45 | 15.0k | explicit BinaryHeap(Compare cmp) : cmp_(std::move(cmp)) {} |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::BinaryHeap(rocksdb::MergingIterator::MaxHeapItemComparator) Line | Count | Source | 45 | 2.61k | explicit BinaryHeap(Compare cmp) : cmp_(std::move(cmp)) {} |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::BinaryHeap(rocksdb::CompactionMergingIterator::CompactionHeapItemComparator) Line | Count | Source | 45 | 2.16k | explicit BinaryHeap(Compare cmp) : cmp_(std::move(cmp)) {} |
|
46 | | |
47 | 16.3k | void push(const T& value) { |
48 | 16.3k | data_.push_back(value); |
49 | 16.3k | upheap(data_.size() - 1); |
50 | 16.3k | } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::push(rocksdb::MultiCfIteratorInfo const&) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::push(rocksdb::MultiCfIteratorInfo const&) Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ForwardRangeDelIterator::EndKeyMinComparator>::push(std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long> const&) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::push(rocksdb::TruncatedRangeDelIterator* const&) Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator>::push(std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long> const&) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator>::push(rocksdb::TruncatedRangeDelIterator* const&) rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::push(rocksdb::MergingIterator::HeapItem* const&) Line | Count | Source | 47 | 5.75k | void push(const T& value) { | 48 | 5.75k | data_.push_back(value); | 49 | 5.75k | upheap(data_.size() - 1); | 50 | 5.75k | } |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::push(rocksdb::MergingIterator::HeapItem* const&) Line | Count | Source | 47 | 5.73k | void push(const T& value) { | 48 | 5.73k | data_.push_back(value); | 49 | 5.73k | upheap(data_.size() - 1); | 50 | 5.73k | } |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::push(rocksdb::CompactionMergingIterator::HeapItem* const&) Line | Count | Source | 47 | 4.89k | void push(const T& value) { | 48 | 4.89k | data_.push_back(value); | 49 | 4.89k | upheap(data_.size() - 1); | 50 | 4.89k | } |
|
51 | | |
52 | 0 | void push(T&& value) { |
53 | 0 | data_.push_back(std::move(value)); |
54 | 0 | upheap(data_.size() - 1); |
55 | 0 | } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::push(rocksdb::MultiCfIteratorInfo&&) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::push(rocksdb::MultiCfIteratorInfo&&) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::push(rocksdb::MergingIterator::HeapItem*&&) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::push(rocksdb::MergingIterator::HeapItem*&&) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::push(rocksdb::CompactionMergingIterator::HeapItem*&&) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::CoalescingIterator::WideColumnWithOrder, rocksdb::CoalescingIterator::WideColumnWithOrderComparator>::push(rocksdb::CoalescingIterator::WideColumnWithOrder&&) |
56 | | |
57 | 78.0k | const T& top() const { |
58 | 78.0k | assert(!empty()); |
59 | 78.0k | return data_.front(); |
60 | 78.0k | } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::top() const Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::top() const Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ForwardRangeDelIterator::EndKeyMinComparator>::top() const Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::top() const Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator>::top() const Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator>::top() const rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::top() const Line | Count | Source | 57 | 31.4k | const T& top() const { | 58 | 31.4k | assert(!empty()); | 59 | 31.4k | return data_.front(); | 60 | 31.4k | } |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::top() const Line | Count | Source | 57 | 35.9k | const T& top() const { | 58 | 35.9k | assert(!empty()); | 59 | 35.9k | return data_.front(); | 60 | 35.9k | } |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::top() const Line | Count | Source | 57 | 10.6k | const T& top() const { | 58 | 10.6k | assert(!empty()); | 59 | 10.6k | return data_.front(); | 60 | 10.6k | } |
Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::CoalescingIterator::WideColumnWithOrder, rocksdb::CoalescingIterator::WideColumnWithOrderComparator>::top() const |
61 | | |
62 | 11.2k | void replace_top(const T& value) { |
63 | 11.2k | assert(!empty()); |
64 | 11.2k | data_.front() = value; |
65 | 11.2k | downheap(get_root()); |
66 | 11.2k | } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::replace_top(rocksdb::MultiCfIteratorInfo const&) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::replace_top(rocksdb::MultiCfIteratorInfo const&) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::replace_top(rocksdb::TruncatedRangeDelIterator* const&) rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::replace_top(rocksdb::MergingIterator::HeapItem* const&) Line | Count | Source | 62 | 4.11k | void replace_top(const T& value) { | 63 | 4.11k | assert(!empty()); | 64 | 4.11k | data_.front() = value; | 65 | 4.11k | downheap(get_root()); | 66 | 4.11k | } |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::replace_top(rocksdb::MergingIterator::HeapItem* const&) Line | Count | Source | 62 | 4.51k | void replace_top(const T& value) { | 63 | 4.51k | assert(!empty()); | 64 | 4.51k | data_.front() = value; | 65 | 4.51k | downheap(get_root()); | 66 | 4.51k | } |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::replace_top(rocksdb::CompactionMergingIterator::HeapItem* const&) Line | Count | Source | 62 | 2.57k | void replace_top(const T& value) { | 63 | 2.57k | assert(!empty()); | 64 | 2.57k | data_.front() = value; | 65 | 2.57k | downheap(get_root()); | 66 | 2.57k | } |
|
67 | | |
68 | 0 | void replace_top(T&& value) { |
69 | 0 | assert(!empty()); |
70 | 0 | data_.front() = std::move(value); |
71 | 0 | downheap(get_root()); |
72 | 0 | } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::replace_top(rocksdb::MergingIterator::HeapItem*&&) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::replace_top(rocksdb::MergingIterator::HeapItem*&&) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::replace_top(rocksdb::CompactionMergingIterator::HeapItem*&&) |
73 | | |
74 | 13.1k | void pop() { |
75 | 13.1k | assert(!empty()); |
76 | 13.1k | if (data_.size() > 1) { |
77 | | // Avoid self-move-assign, because it could cause problems with |
78 | | // classes which are not prepared for this and it trips up the |
79 | | // STL debugger when activated. |
80 | 6.47k | data_.front() = std::move(data_.back()); |
81 | 6.47k | } |
82 | 13.1k | data_.pop_back(); |
83 | 13.1k | if (!empty()) { |
84 | 6.47k | downheap(get_root()); |
85 | 6.64k | } else { |
86 | 6.64k | reset_root_cmp_cache(); |
87 | 6.64k | } |
88 | 13.1k | } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::pop() Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::pop() Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ForwardRangeDelIterator::EndKeyMinComparator>::pop() Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::pop() Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator>::pop() Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator>::pop() rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::pop() Line | Count | Source | 74 | 4.65k | void pop() { | 75 | 4.65k | assert(!empty()); | 76 | 4.65k | if (data_.size() > 1) { | 77 | | // Avoid self-move-assign, because it could cause problems with | 78 | | // classes which are not prepared for this and it trips up the | 79 | | // STL debugger when activated. | 80 | 2.23k | data_.front() = std::move(data_.back()); | 81 | 2.23k | } | 82 | 4.65k | data_.pop_back(); | 83 | 4.65k | if (!empty()) { | 84 | 2.23k | downheap(get_root()); | 85 | 2.41k | } else { | 86 | 2.41k | reset_root_cmp_cache(); | 87 | 2.41k | } | 88 | 4.65k | } |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::pop() Line | Count | Source | 74 | 5.46k | void pop() { | 75 | 5.46k | assert(!empty()); | 76 | 5.46k | if (data_.size() > 1) { | 77 | | // Avoid self-move-assign, because it could cause problems with | 78 | | // classes which are not prepared for this and it trips up the | 79 | | // STL debugger when activated. | 80 | 2.80k | data_.front() = std::move(data_.back()); | 81 | 2.80k | } | 82 | 5.46k | data_.pop_back(); | 83 | 5.46k | if (!empty()) { | 84 | 2.80k | downheap(get_root()); | 85 | 2.80k | } else { | 86 | 2.65k | reset_root_cmp_cache(); | 87 | 2.65k | } | 88 | 5.46k | } |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::pop() Line | Count | Source | 74 | 3.00k | void pop() { | 75 | 3.00k | assert(!empty()); | 76 | 3.00k | if (data_.size() > 1) { | 77 | | // Avoid self-move-assign, because it could cause problems with | 78 | | // classes which are not prepared for this and it trips up the | 79 | | // STL debugger when activated. | 80 | 1.43k | data_.front() = std::move(data_.back()); | 81 | 1.43k | } | 82 | 3.00k | data_.pop_back(); | 83 | 3.00k | if (!empty()) { | 84 | 1.43k | downheap(get_root()); | 85 | 1.57k | } else { | 86 | 1.57k | reset_root_cmp_cache(); | 87 | 1.57k | } | 88 | 3.00k | } |
Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::CoalescingIterator::WideColumnWithOrder, rocksdb::CoalescingIterator::WideColumnWithOrderComparator>::pop() |
89 | | |
90 | | void swap(BinaryHeap& other) { |
91 | | std::swap(cmp_, other.cmp_); |
92 | | data_.swap(other.data_); |
93 | | std::swap(root_cmp_cache_, other.root_cmp_cache_); |
94 | | } |
95 | | |
96 | 18.0k | void clear() { |
97 | 18.0k | data_.clear(); |
98 | 18.0k | reset_root_cmp_cache(); |
99 | 18.0k | } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::clear() Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::clear() Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ForwardRangeDelIterator::EndKeyMinComparator>::clear() rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::clear() Line | Count | Source | 96 | 9.97k | void clear() { | 97 | 9.97k | data_.clear(); | 98 | 9.97k | reset_root_cmp_cache(); | 99 | 9.97k | } |
Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator>::clear() Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator>::clear() rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::clear() Line | Count | Source | 96 | 5.36k | void clear() { | 97 | 5.36k | data_.clear(); | 98 | 5.36k | reset_root_cmp_cache(); | 99 | 5.36k | } |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::clear() Line | Count | Source | 96 | 518 | void clear() { | 97 | 518 | data_.clear(); | 98 | 518 | reset_root_cmp_cache(); | 99 | 518 | } |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::clear() Line | Count | Source | 96 | 2.16k | void clear() { | 97 | 2.16k | data_.clear(); | 98 | 2.16k | reset_root_cmp_cache(); | 99 | 2.16k | } |
|
100 | | |
101 | 107k | bool empty() const { return data_.empty(); } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::empty() const Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::empty() const Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ForwardRangeDelIterator::EndKeyMinComparator>::empty() const rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::empty() const Line | Count | Source | 101 | 9.97k | bool empty() const { return data_.empty(); } |
Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator>::empty() const Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator>::empty() const rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::empty() const Line | Count | Source | 101 | 36.8k | bool empty() const { return data_.empty(); } |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::empty() const Line | Count | Source | 101 | 43.5k | bool empty() const { return data_.empty(); } |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::empty() const Line | Count | Source | 101 | 16.8k | bool empty() const { return data_.empty(); } |
Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::CoalescingIterator::WideColumnWithOrder, rocksdb::CoalescingIterator::WideColumnWithOrderComparator>::empty() const |
102 | | |
103 | 0 | size_t size() const { return data_.size(); } |
104 | | |
105 | 42.6k | void reset_root_cmp_cache() { |
106 | 42.6k | root_cmp_cache_ = std::numeric_limits<size_t>::max(); |
107 | 42.6k | } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::reset_root_cmp_cache() Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::reset_root_cmp_cache() Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ForwardRangeDelIterator::EndKeyMinComparator>::reset_root_cmp_cache() rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::reset_root_cmp_cache() Line | Count | Source | 105 | 9.97k | void reset_root_cmp_cache() { | 106 | 9.97k | root_cmp_cache_ = std::numeric_limits<size_t>::max(); | 107 | 9.97k | } |
Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator>::reset_root_cmp_cache() Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator>::reset_root_cmp_cache() rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::reset_root_cmp_cache() Line | Count | Source | 105 | 14.2k | void reset_root_cmp_cache() { | 106 | 14.2k | root_cmp_cache_ = std::numeric_limits<size_t>::max(); | 107 | 14.2k | } |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::reset_root_cmp_cache() Line | Count | Source | 105 | 9.22k | void reset_root_cmp_cache() { | 106 | 9.22k | root_cmp_cache_ = std::numeric_limits<size_t>::max(); | 107 | 9.22k | } |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::reset_root_cmp_cache() Line | Count | Source | 105 | 9.18k | void reset_root_cmp_cache() { | 106 | 9.18k | root_cmp_cache_ = std::numeric_limits<size_t>::max(); | 107 | 9.18k | } |
Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::CoalescingIterator::WideColumnWithOrder, rocksdb::CoalescingIterator::WideColumnWithOrderComparator>::reset_root_cmp_cache() |
108 | | |
109 | | private: |
110 | 37.3k | static inline size_t get_root() { return 0; } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::get_root() Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::get_root() Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ForwardRangeDelIterator::EndKeyMinComparator>::get_root() Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::get_root() Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator>::get_root() Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator>::get_root() rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::get_root() Line | Count | Source | 110 | 12.2k | static inline size_t get_root() { return 0; } |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::get_root() Line | Count | Source | 110 | 16.1k | static inline size_t get_root() { return 0; } |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::get_root() Line | Count | Source | 110 | 8.89k | static inline size_t get_root() { return 0; } |
Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::CoalescingIterator::WideColumnWithOrder, rocksdb::CoalescingIterator::WideColumnWithOrderComparator>::get_root() |
111 | 8.85k | static inline size_t get_parent(size_t index) { return (index - 1) / 2; } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::get_parent(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::get_parent(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ForwardRangeDelIterator::EndKeyMinComparator>::get_parent(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::get_parent(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator>::get_parent(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator>::get_parent(unsigned long) rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::get_parent(unsigned long) Line | Count | Source | 111 | 2.99k | static inline size_t get_parent(size_t index) { return (index - 1) / 2; } |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::get_parent(unsigned long) Line | Count | Source | 111 | 3.13k | static inline size_t get_parent(size_t index) { return (index - 1) / 2; } |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::get_parent(unsigned long) Line | Count | Source | 111 | 2.72k | static inline size_t get_parent(size_t index) { return (index - 1) / 2; } |
Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::CoalescingIterator::WideColumnWithOrder, rocksdb::CoalescingIterator::WideColumnWithOrderComparator>::get_parent(unsigned long) |
112 | 38.9k | static inline size_t get_left(size_t index) { return 2 * index + 1; } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::get_left(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::get_left(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ForwardRangeDelIterator::EndKeyMinComparator>::get_left(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::get_left(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator>::get_left(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator>::get_left(unsigned long) rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::get_left(unsigned long) Line | Count | Source | 112 | 14.1k | static inline size_t get_left(size_t index) { return 2 * index + 1; } |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::get_left(unsigned long) Line | Count | Source | 112 | 15.2k | static inline size_t get_left(size_t index) { return 2 * index + 1; } |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::get_left(unsigned long) Line | Count | Source | 112 | 9.43k | static inline size_t get_left(size_t index) { return 2 * index + 1; } |
Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::CoalescingIterator::WideColumnWithOrder, rocksdb::CoalescingIterator::WideColumnWithOrderComparator>::get_left(unsigned long) |
113 | | static inline size_t get_right(size_t index) { return 2 * index + 2; } |
114 | | |
115 | 16.3k | void upheap(size_t index) { |
116 | 16.3k | T v = std::move(data_[index]); |
117 | 19.6k | while (index > get_root()) { |
118 | 8.85k | const size_t parent = get_parent(index); |
119 | 8.85k | if (!cmp_(data_[parent], v)) { |
120 | 5.54k | break; |
121 | 5.54k | } |
122 | 3.30k | data_[index] = std::move(data_[parent]); |
123 | 3.30k | index = parent; |
124 | 3.30k | } |
125 | 16.3k | data_[index] = std::move(v); |
126 | 16.3k | reset_root_cmp_cache(); |
127 | 16.3k | } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::upheap(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::upheap(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ForwardRangeDelIterator::EndKeyMinComparator>::upheap(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::upheap(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator>::upheap(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator>::upheap(unsigned long) rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::upheap(unsigned long) Line | Count | Source | 115 | 5.75k | void upheap(size_t index) { | 116 | 5.75k | T v = std::move(data_[index]); | 117 | 5.92k | while (index > get_root()) { | 118 | 2.99k | const size_t parent = get_parent(index); | 119 | 2.99k | if (!cmp_(data_[parent], v)) { | 120 | 2.82k | break; | 121 | 2.82k | } | 122 | 170 | data_[index] = std::move(data_[parent]); | 123 | 170 | index = parent; | 124 | 170 | } | 125 | 5.75k | data_[index] = std::move(v); | 126 | 5.75k | reset_root_cmp_cache(); | 127 | 5.75k | } |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::upheap(unsigned long) Line | Count | Source | 115 | 5.73k | void upheap(size_t index) { | 116 | 5.73k | T v = std::move(data_[index]); | 117 | 8.86k | while (index > get_root()) { | 118 | 3.13k | const size_t parent = get_parent(index); | 119 | 3.13k | if (!cmp_(data_[parent], v)) { | 120 | 3 | break; | 121 | 3 | } | 122 | 3.13k | data_[index] = std::move(data_[parent]); | 123 | 3.13k | index = parent; | 124 | 3.13k | } | 125 | 5.73k | data_[index] = std::move(v); | 126 | 5.73k | reset_root_cmp_cache(); | 127 | 5.73k | } |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::upheap(unsigned long) Line | Count | Source | 115 | 4.89k | void upheap(size_t index) { | 116 | 4.89k | T v = std::move(data_[index]); | 117 | 4.89k | while (index > get_root()) { | 118 | 2.72k | const size_t parent = get_parent(index); | 119 | 2.72k | if (!cmp_(data_[parent], v)) { | 120 | 2.72k | break; | 121 | 2.72k | } | 122 | 4 | data_[index] = std::move(data_[parent]); | 123 | 4 | index = parent; | 124 | 4 | } | 125 | 4.89k | data_[index] = std::move(v); | 126 | 4.89k | reset_root_cmp_cache(); | 127 | 4.89k | } |
Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::CoalescingIterator::WideColumnWithOrder, rocksdb::CoalescingIterator::WideColumnWithOrderComparator>::upheap(unsigned long) |
128 | | |
129 | 17.6k | void downheap(size_t index) { |
130 | 17.6k | T v = std::move(data_[index]); |
131 | | |
132 | 17.6k | size_t picked_child = std::numeric_limits<size_t>::max(); |
133 | 19.4k | while (1) { |
134 | 19.4k | const size_t left_child = get_left(index); |
135 | 19.4k | if (get_left(index) >= data_.size()) { |
136 | 12.9k | break; |
137 | 12.9k | } |
138 | 6.53k | const size_t right_child = left_child + 1; |
139 | 6.53k | assert(right_child == get_right(index)); |
140 | 6.53k | picked_child = left_child; |
141 | 6.53k | if (index == 0 && root_cmp_cache_ < data_.size()) { |
142 | 1.97k | picked_child = root_cmp_cache_; |
143 | 4.56k | } else if (right_child < data_.size() && |
144 | 4.56k | cmp_(data_[left_child], data_[right_child])) { |
145 | 520 | picked_child = right_child; |
146 | 520 | } |
147 | 6.53k | if (!cmp_(v, data_[picked_child])) { |
148 | 4.75k | break; |
149 | 4.75k | } |
150 | 1.78k | data_[index] = std::move(data_[picked_child]); |
151 | 1.78k | index = picked_child; |
152 | 1.78k | } |
153 | | |
154 | 17.6k | if (index == 0) { |
155 | | // We did not change anything in the tree except for the value |
156 | | // of the root node, left and right child did not change, we can |
157 | | // cache that `picked_child` is the smallest child |
158 | | // so next time we compare againist it directly |
159 | 16.1k | root_cmp_cache_ = picked_child; |
160 | 16.1k | } else { |
161 | | // the tree changed, reset cache |
162 | 1.56k | reset_root_cmp_cache(); |
163 | 1.56k | } |
164 | | |
165 | 17.6k | data_[index] = std::move(v); |
166 | 17.6k | } Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::greater<int> > >::downheap(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::MultiCfIteratorInfo, rocksdb::MultiCfIteratorImpl::MultiCfHeapItemComparator<std::__1::less<int> > >::downheap(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ForwardRangeDelIterator::EndKeyMinComparator>::downheap(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::StartKeyMinComparator>::downheap(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<std::__1::__tree_const_iterator<rocksdb::TruncatedRangeDelIterator*, std::__1::__tree_node<rocksdb::TruncatedRangeDelIterator*, void*>*, long>, rocksdb::ReverseRangeDelIterator::StartKeyMaxComparator>::downheap(unsigned long) Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::TruncatedRangeDelIterator*, rocksdb::ReverseRangeDelIterator::EndKeyMaxComparator>::downheap(unsigned long) rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MinHeapItemComparator>::downheap(unsigned long) Line | Count | Source | 129 | 6.34k | void downheap(size_t index) { | 130 | 6.34k | T v = std::move(data_[index]); | 131 | | | 132 | 6.34k | size_t picked_child = std::numeric_limits<size_t>::max(); | 133 | 7.09k | while (1) { | 134 | 7.09k | const size_t left_child = get_left(index); | 135 | 7.09k | if (get_left(index) >= data_.size()) { | 136 | 3.77k | break; | 137 | 3.77k | } | 138 | 3.32k | const size_t right_child = left_child + 1; | 139 | 3.32k | assert(right_child == get_right(index)); | 140 | 3.32k | picked_child = left_child; | 141 | 3.32k | if (index == 0 && root_cmp_cache_ < data_.size()) { | 142 | 1.74k | picked_child = root_cmp_cache_; | 143 | 1.74k | } else if (right_child < data_.size() && | 144 | 1.57k | cmp_(data_[left_child], data_[right_child])) { | 145 | 118 | picked_child = right_child; | 146 | 118 | } | 147 | 3.32k | if (!cmp_(v, data_[picked_child])) { | 148 | 2.57k | break; | 149 | 2.57k | } | 150 | 750 | data_[index] = std::move(data_[picked_child]); | 151 | 750 | index = picked_child; | 152 | 750 | } | 153 | | | 154 | 6.34k | if (index == 0) { | 155 | | // We did not change anything in the tree except for the value | 156 | | // of the root node, left and right child did not change, we can | 157 | | // cache that `picked_child` is the smallest child | 158 | | // so next time we compare againist it directly | 159 | 5.64k | root_cmp_cache_ = picked_child; | 160 | 5.64k | } else { | 161 | | // the tree changed, reset cache | 162 | 696 | reset_root_cmp_cache(); | 163 | 696 | } | 164 | | | 165 | 6.34k | data_[index] = std::move(v); | 166 | 6.34k | } |
rocksdb::BinaryHeap<rocksdb::MergingIterator::HeapItem*, rocksdb::MergingIterator::MaxHeapItemComparator>::downheap(unsigned long) Line | Count | Source | 129 | 7.32k | void downheap(size_t index) { | 130 | 7.32k | T v = std::move(data_[index]); | 131 | | | 132 | 7.32k | size_t picked_child = std::numeric_limits<size_t>::max(); | 133 | 7.64k | while (1) { | 134 | 7.64k | const size_t left_child = get_left(index); | 135 | 7.64k | if (get_left(index) >= data_.size()) { | 136 | 5.24k | break; | 137 | 5.24k | } | 138 | 2.39k | const size_t right_child = left_child + 1; | 139 | 2.39k | assert(right_child == get_right(index)); | 140 | 2.39k | picked_child = left_child; | 141 | 2.39k | if (index == 0 && root_cmp_cache_ < data_.size()) { | 142 | 214 | picked_child = root_cmp_cache_; | 143 | 2.18k | } else if (right_child < data_.size() && | 144 | 2.18k | cmp_(data_[left_child], data_[right_child])) { | 145 | 290 | picked_child = right_child; | 146 | 290 | } | 147 | 2.39k | if (!cmp_(v, data_[picked_child])) { | 148 | 2.07k | break; | 149 | 2.07k | } | 150 | 317 | data_[index] = std::move(data_[picked_child]); | 151 | 317 | index = picked_child; | 152 | 317 | } | 153 | | | 154 | 7.32k | if (index == 0) { | 155 | | // We did not change anything in the tree except for the value | 156 | | // of the root node, left and right child did not change, we can | 157 | | // cache that `picked_child` is the smallest child | 158 | | // so next time we compare againist it directly | 159 | 7.00k | root_cmp_cache_ = picked_child; | 160 | 7.00k | } else { | 161 | | // the tree changed, reset cache | 162 | 317 | reset_root_cmp_cache(); | 163 | 317 | } | 164 | | | 165 | 7.32k | data_[index] = std::move(v); | 166 | 7.32k | } |
rocksdb::BinaryHeap<rocksdb::CompactionMergingIterator::HeapItem*, rocksdb::CompactionMergingIterator::CompactionHeapItemComparator>::downheap(unsigned long) Line | Count | Source | 129 | 4.00k | void downheap(size_t index) { | 130 | 4.00k | T v = std::move(data_[index]); | 131 | | | 132 | 4.00k | size_t picked_child = std::numeric_limits<size_t>::max(); | 133 | 4.71k | while (1) { | 134 | 4.71k | const size_t left_child = get_left(index); | 135 | 4.71k | if (get_left(index) >= data_.size()) { | 136 | 3.90k | break; | 137 | 3.90k | } | 138 | 815 | const size_t right_child = left_child + 1; | 139 | 815 | assert(right_child == get_right(index)); | 140 | 815 | picked_child = left_child; | 141 | 815 | if (index == 0 && root_cmp_cache_ < data_.size()) { | 142 | 10 | picked_child = root_cmp_cache_; | 143 | 805 | } else if (right_child < data_.size() && | 144 | 805 | cmp_(data_[left_child], data_[right_child])) { | 145 | 112 | picked_child = right_child; | 146 | 112 | } | 147 | 815 | if (!cmp_(v, data_[picked_child])) { | 148 | 102 | break; | 149 | 102 | } | 150 | 713 | data_[index] = std::move(data_[picked_child]); | 151 | 713 | index = picked_child; | 152 | 713 | } | 153 | | | 154 | 4.00k | if (index == 0) { | 155 | | // We did not change anything in the tree except for the value | 156 | | // of the root node, left and right child did not change, we can | 157 | | // cache that `picked_child` is the smallest child | 158 | | // so next time we compare againist it directly | 159 | 3.44k | root_cmp_cache_ = picked_child; | 160 | 3.44k | } else { | 161 | | // the tree changed, reset cache | 162 | 555 | reset_root_cmp_cache(); | 163 | 555 | } | 164 | | | 165 | 4.00k | data_[index] = std::move(v); | 166 | 4.00k | } |
Unexecuted instantiation: rocksdb::BinaryHeap<rocksdb::CoalescingIterator::WideColumnWithOrder, rocksdb::CoalescingIterator::WideColumnWithOrderComparator>::downheap(unsigned long) |
167 | | |
168 | | Compare cmp_; |
169 | | autovector<T> data_; |
170 | | // Used to reduce number of cmp_ calls in downheap() |
171 | | size_t root_cmp_cache_ = std::numeric_limits<size_t>::max(); |
172 | | }; |
173 | | |
174 | | } // namespace ROCKSDB_NAMESPACE |