Coverage Report

Created: 2024-07-27 06:53

/src/rocksdb/util/heap.h
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