Coverage Report

Created: 2022-01-18 06:27

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/Utility/RangeMap.h
Line
Count
Source (jump to first uncovered line)
1
//===-- RangeMap.h ----------------------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#ifndef LLDB_UTILITY_RANGEMAP_H
10
#define LLDB_UTILITY_RANGEMAP_H
11
12
#include <algorithm>
13
#include <vector>
14
15
#include "llvm/ADT/SmallVector.h"
16
17
#include "lldb/lldb-private.h"
18
19
// Uncomment to make sure all Range objects are sorted when needed
20
//#define ASSERT_RANGEMAP_ARE_SORTED
21
22
namespace lldb_private {
23
24
// Templatized classes for dealing with generic ranges and also collections of
25
// ranges, or collections of ranges that have associated data.
26
27
// A simple range class where you get to define the type of the range
28
// base "B", and the type used for the range byte size "S".
29
template <typename B, typename S> struct Range {
30
  typedef B BaseType;
31
  typedef S SizeType;
32
33
  BaseType base;
34
  SizeType size;
35
36
2.74M
  Range() : base(0), size(0) {}
lldb_private::Range<unsigned int, unsigned int>::Range()
Line
Count
Source
36
9
  Range() : base(0), size(0) {}
lldb_private::Range<unsigned long long, unsigned long long>::Range()
Line
Count
Source
36
2.73M
  Range() : base(0), size(0) {}
lldb_private::Range<unsigned long long, unsigned int>::Range()
Line
Count
Source
36
10.5k
  Range() : base(0), size(0) {}
37
38
57.7M
  Range(BaseType b, SizeType s) : base(b), size(s) {}
lldb_private::Range<unsigned int, unsigned int>::Range(unsigned int, unsigned int)
Line
Count
Source
38
5.67k
  Range(BaseType b, SizeType s) : base(b), size(s) {}
lldb_private::Range<unsigned long long, unsigned int>::Range(unsigned long long, unsigned int)
Line
Count
Source
38
596k
  Range(BaseType b, SizeType s) : base(b), size(s) {}
lldb_private::Range<unsigned long long, unsigned long long>::Range(unsigned long long, unsigned long long)
Line
Count
Source
38
57.1M
  Range(BaseType b, SizeType s) : base(b), size(s) {}
lldb_private::Range<unsigned long long, unsigned long>::Range(unsigned long long, unsigned long)
Line
Count
Source
38
2
  Range(BaseType b, SizeType s) : base(b), size(s) {}
39
40
0
  void Clear(BaseType b = 0) {
41
0
    base = b;
42
0
    size = 0;
43
0
  }
Unexecuted instantiation: lldb_private::Range<unsigned int, unsigned int>::Clear(unsigned int)
Unexecuted instantiation: lldb_private::Range<unsigned long long, unsigned long long>::Clear(unsigned long long)
44
45
  // Set the start value for the range, and keep the same size
46
975M
  BaseType GetRangeBase() const { return base; }
lldb_private::Range<unsigned long long, unsigned int>::GetRangeBase() const
Line
Count
Source
46
1.82M
  BaseType GetRangeBase() const { return base; }
lldb_private::Range<unsigned long long, unsigned long long>::GetRangeBase() const
Line
Count
Source
46
974M
  BaseType GetRangeBase() const { return base; }
lldb_private::Range<unsigned int, unsigned int>::GetRangeBase() const
Line
Count
Source
46
7.13k
  BaseType GetRangeBase() const { return base; }
lldb_private::Range<unsigned long long, unsigned long>::GetRangeBase() const
Line
Count
Source
46
4
  BaseType GetRangeBase() const { return base; }
47
48
171M
  void SetRangeBase(BaseType b) { base = b; }
lldb_private::Range<unsigned int, unsigned int>::SetRangeBase(unsigned int)
Line
Count
Source
48
9
  void SetRangeBase(BaseType b) { base = b; }
lldb_private::Range<unsigned long long, unsigned long long>::SetRangeBase(unsigned long long)
Line
Count
Source
48
171M
  void SetRangeBase(BaseType b) { base = b; }
lldb_private::Range<unsigned long long, unsigned int>::SetRangeBase(unsigned long long)
Line
Count
Source
48
50.2k
  void SetRangeBase(BaseType b) { base = b; }
Unexecuted instantiation: lldb_private::Range<unsigned long long, unsigned long>::SetRangeBase(unsigned long long)
49
50
3.79k
  void Slide(BaseType slide) { base += slide; }
51
52
45.9k
  bool Union(const Range &rhs) {
53
45.9k
    if (DoesAdjoinOrIntersect(rhs)) {
54
26.5k
      auto new_end = std::max<BaseType>(GetRangeEnd(), rhs.GetRangeEnd());
55
26.5k
      base = std::min<BaseType>(base, rhs.base);
56
26.5k
      size = new_end - base;
57
26.5k
      return true;
58
26.5k
    }
59
19.3k
    return false;
60
45.9k
  }
lldb_private::Range<unsigned long long, unsigned int>::Union(lldb_private::Range<unsigned long long, unsigned int> const&)
Line
Count
Source
52
45.9k
  bool Union(const Range &rhs) {
53
45.9k
    if (DoesAdjoinOrIntersect(rhs)) {
54
26.5k
      auto new_end = std::max<BaseType>(GetRangeEnd(), rhs.GetRangeEnd());
55
26.5k
      base = std::min<BaseType>(base, rhs.base);
56
26.5k
      size = new_end - base;
57
26.5k
      return true;
58
26.5k
    }
59
19.3k
    return false;
60
45.9k
  }
Unexecuted instantiation: lldb_private::Range<unsigned long long, unsigned long>::Union(lldb_private::Range<unsigned long long, unsigned long> const&)
61
62
75.3M
  BaseType GetRangeEnd() const { return base + size; }
lldb_private::Range<unsigned long long, unsigned int>::GetRangeEnd() const
Line
Count
Source
62
1.13M
  BaseType GetRangeEnd() const { return base + size; }
lldb_private::Range<unsigned int, unsigned int>::GetRangeEnd() const
Line
Count
Source
62
3.83k
  BaseType GetRangeEnd() const { return base + size; }
lldb_private::Range<unsigned long long, unsigned long long>::GetRangeEnd() const
Line
Count
Source
62
74.2M
  BaseType GetRangeEnd() const { return base + size; }
lldb_private::Range<unsigned long long, unsigned long>::GetRangeEnd() const
Line
Count
Source
62
3
  BaseType GetRangeEnd() const { return base + size; }
63
64
64.2k
  void SetRangeEnd(BaseType end) {
65
64.2k
    if (end > base)
66
64.1k
      size = end - base;
67
71
    else
68
71
      size = 0;
69
64.2k
  }
lldb_private::Range<unsigned int, unsigned int>::SetRangeEnd(unsigned int)
Line
Count
Source
64
14
  void SetRangeEnd(BaseType end) {
65
14
    if (end > base)
66
14
      size = end - base;
67
0
    else
68
0
      size = 0;
69
14
  }
lldb_private::Range<unsigned long long, unsigned long long>::SetRangeEnd(unsigned long long)
Line
Count
Source
64
3.04k
  void SetRangeEnd(BaseType end) {
65
3.04k
    if (end > base)
66
2.97k
      size = end - base;
67
71
    else
68
71
      size = 0;
69
3.04k
  }
lldb_private::Range<unsigned long long, unsigned int>::SetRangeEnd(unsigned long long)
Line
Count
Source
64
61.1k
  void SetRangeEnd(BaseType end) {
65
61.1k
    if (end > base)
66
61.1k
      size = end - base;
67
0
    else
68
0
      size = 0;
69
61.1k
  }
70
71
221M
  SizeType GetByteSize() const { return size; }
lldb_private::Range<unsigned long long, unsigned int>::GetByteSize() const
Line
Count
Source
71
70.8k
  SizeType GetByteSize() const { return size; }
lldb_private::Range<unsigned int, unsigned int>::GetByteSize() const
Line
Count
Source
71
387
  SizeType GetByteSize() const { return size; }
lldb_private::Range<unsigned long long, unsigned long long>::GetByteSize() const
Line
Count
Source
71
221M
  SizeType GetByteSize() const { return size; }
lldb_private::Range<unsigned long long, unsigned long>::GetByteSize() const
Line
Count
Source
71
1
  SizeType GetByteSize() const { return size; }
72
73
223M
  void SetByteSize(SizeType s) { size = s; }
lldb_private::Range<unsigned int, unsigned int>::SetByteSize(unsigned int)
Line
Count
Source
73
9
  void SetByteSize(SizeType s) { size = s; }
lldb_private::Range<unsigned long long, unsigned long long>::SetByteSize(unsigned long long)
Line
Count
Source
73
223M
  void SetByteSize(SizeType s) { size = s; }
lldb_private::Range<unsigned long long, unsigned int>::SetByteSize(unsigned int)
Line
Count
Source
73
100k
  void SetByteSize(SizeType s) { size = s; }
Unexecuted instantiation: lldb_private::Range<unsigned long long, unsigned long>::SetByteSize(unsigned long)
74
75
118k
  bool IsValid() const { return size > 0; }
76
77
114M
  bool Contains(BaseType r) const {
78
114M
    return (GetRangeBase() <= r) && 
(r < GetRangeEnd())62.3M
;
79
114M
  }
lldb_private::Range<unsigned long long, unsigned int>::Contains(unsigned long long) const
Line
Count
Source
77
350k
  bool Contains(BaseType r) const {
78
350k
    return (GetRangeBase() <= r) && 
(r < GetRangeEnd())346k
;
79
350k
  }
lldb_private::Range<unsigned int, unsigned int>::Contains(unsigned int) const
Line
Count
Source
77
1.46k
  bool Contains(BaseType r) const {
78
1.46k
    return (GetRangeBase() <= r) && 
(r < GetRangeEnd())1.46k
;
79
1.46k
  }
lldb_private::Range<unsigned long long, unsigned long long>::Contains(unsigned long long) const
Line
Count
Source
77
113M
  bool Contains(BaseType r) const {
78
113M
    return (GetRangeBase() <= r) && 
(r < GetRangeEnd())62.0M
;
79
113M
  }
lldb_private::Range<unsigned long long, unsigned long>::Contains(unsigned long long) const
Line
Count
Source
77
1
  bool Contains(BaseType r) const {
78
1
    return (GetRangeBase() <= r) && (r < GetRangeEnd());
79
1
  }
80
81
6.06M
  bool ContainsEndInclusive(BaseType r) const {
82
6.06M
    return (GetRangeBase() <= r) && 
(r <= GetRangeEnd())6.06M
;
83
6.06M
  }
lldb_private::Range<unsigned int, unsigned int>::ContainsEndInclusive(unsigned int) const
Line
Count
Source
81
1.01k
  bool ContainsEndInclusive(BaseType r) const {
82
1.01k
    return (GetRangeBase() <= r) && (r <= GetRangeEnd());
83
1.01k
  }
lldb_private::Range<unsigned long long, unsigned int>::ContainsEndInclusive(unsigned long long) const
Line
Count
Source
81
240k
  bool ContainsEndInclusive(BaseType r) const {
82
240k
    return (GetRangeBase() <= r) && 
(r <= GetRangeEnd())240k
;
83
240k
  }
lldb_private::Range<unsigned long long, unsigned long long>::ContainsEndInclusive(unsigned long long) const
Line
Count
Source
81
5.82M
  bool ContainsEndInclusive(BaseType r) const {
82
5.82M
    return (GetRangeBase() <= r) && (r <= GetRangeEnd());
83
5.82M
  }
lldb_private::Range<unsigned long long, unsigned long>::ContainsEndInclusive(unsigned long long) const
Line
Count
Source
81
1
  bool ContainsEndInclusive(BaseType r) const {
82
1
    return (GetRangeBase() <= r) && (r <= GetRangeEnd());
83
1
  }
84
85
9.61M
  bool Contains(const Range &range) const {
86
9.61M
    return Contains(range.GetRangeBase()) &&
87
9.61M
           
ContainsEndInclusive(range.GetRangeEnd())6.06M
;
88
9.61M
  }
lldb_private::Range<unsigned int, unsigned int>::Contains(lldb_private::Range<unsigned int, unsigned int> const&) const
Line
Count
Source
85
1.02k
  bool Contains(const Range &range) const {
86
1.02k
    return Contains(range.GetRangeBase()) &&
87
1.02k
           
ContainsEndInclusive(range.GetRangeEnd())1.01k
;
88
1.02k
  }
lldb_private::Range<unsigned long long, unsigned int>::Contains(lldb_private::Range<unsigned long long, unsigned int> const&) const
Line
Count
Source
85
275k
  bool Contains(const Range &range) const {
86
275k
    return Contains(range.GetRangeBase()) &&
87
275k
           
ContainsEndInclusive(range.GetRangeEnd())240k
;
88
275k
  }
lldb_private::Range<unsigned long long, unsigned long long>::Contains(lldb_private::Range<unsigned long long, unsigned long long> const&) const
Line
Count
Source
85
9.33M
  bool Contains(const Range &range) const {
86
9.33M
    return Contains(range.GetRangeBase()) &&
87
9.33M
           
ContainsEndInclusive(range.GetRangeEnd())5.82M
;
88
9.33M
  }
lldb_private::Range<unsigned long long, unsigned long>::Contains(lldb_private::Range<unsigned long long, unsigned long> const&) const
Line
Count
Source
85
1
  bool Contains(const Range &range) const {
86
1
    return Contains(range.GetRangeBase()) &&
87
1
           ContainsEndInclusive(range.GetRangeEnd());
88
1
  }
89
90
  // Returns true if the two ranges adjoing or intersect
91
46.0k
  bool DoesAdjoinOrIntersect(const Range &rhs) const {
92
46.0k
    const BaseType lhs_base = this->GetRangeBase();
93
46.0k
    const BaseType rhs_base = rhs.GetRangeBase();
94
46.0k
    const BaseType lhs_end = this->GetRangeEnd();
95
46.0k
    const BaseType rhs_end = rhs.GetRangeEnd();
96
46.0k
    bool result = (lhs_base <= rhs_end) && 
(lhs_end >= rhs_base)39.2k
;
97
46.0k
    return result;
98
46.0k
  }
lldb_private::Range<unsigned int, unsigned int>::DoesAdjoinOrIntersect(lldb_private::Range<unsigned int, unsigned int> const&) const
Line
Count
Source
91
113
  bool DoesAdjoinOrIntersect(const Range &rhs) const {
92
113
    const BaseType lhs_base = this->GetRangeBase();
93
113
    const BaseType rhs_base = rhs.GetRangeBase();
94
113
    const BaseType lhs_end = this->GetRangeEnd();
95
113
    const BaseType rhs_end = rhs.GetRangeEnd();
96
113
    bool result = (lhs_base <= rhs_end) && (lhs_end >= rhs_base);
97
113
    return result;
98
113
  }
lldb_private::Range<unsigned long long, unsigned int>::DoesAdjoinOrIntersect(lldb_private::Range<unsigned long long, unsigned int> const&) const
Line
Count
Source
91
45.9k
  bool DoesAdjoinOrIntersect(const Range &rhs) const {
92
45.9k
    const BaseType lhs_base = this->GetRangeBase();
93
45.9k
    const BaseType rhs_base = rhs.GetRangeBase();
94
45.9k
    const BaseType lhs_end = this->GetRangeEnd();
95
45.9k
    const BaseType rhs_end = rhs.GetRangeEnd();
96
45.9k
    bool result = (lhs_base <= rhs_end) && 
(lhs_end >= rhs_base)39.0k
;
97
45.9k
    return result;
98
45.9k
  }
Unexecuted instantiation: lldb_private::Range<unsigned long long, unsigned long>::DoesAdjoinOrIntersect(lldb_private::Range<unsigned long long, unsigned long> const&) const
99
100
  // Returns true if the two ranges intersect
101
62.5k
  bool DoesIntersect(const Range &rhs) const {
102
62.5k
    const BaseType lhs_base = this->GetRangeBase();
103
62.5k
    const BaseType rhs_base = rhs.GetRangeBase();
104
62.5k
    const BaseType lhs_end = this->GetRangeEnd();
105
62.5k
    const BaseType rhs_end = rhs.GetRangeEnd();
106
62.5k
    bool result = (lhs_base < rhs_end) && 
(lhs_end > rhs_base)2.63k
;
107
62.5k
    return result;
108
62.5k
  }
lldb_private::Range<unsigned long long, unsigned int>::DoesIntersect(lldb_private::Range<unsigned long long, unsigned int> const&) const
Line
Count
Source
101
7.80k
  bool DoesIntersect(const Range &rhs) const {
102
7.80k
    const BaseType lhs_base = this->GetRangeBase();
103
7.80k
    const BaseType rhs_base = rhs.GetRangeBase();
104
7.80k
    const BaseType lhs_end = this->GetRangeEnd();
105
7.80k
    const BaseType rhs_end = rhs.GetRangeEnd();
106
7.80k
    bool result = (lhs_base < rhs_end) && 
(lhs_end > rhs_base)63
;
107
7.80k
    return result;
108
7.80k
  }
lldb_private::Range<unsigned long long, unsigned long long>::DoesIntersect(lldb_private::Range<unsigned long long, unsigned long long> const&) const
Line
Count
Source
101
54.7k
  bool DoesIntersect(const Range &rhs) const {
102
54.7k
    const BaseType lhs_base = this->GetRangeBase();
103
54.7k
    const BaseType rhs_base = rhs.GetRangeBase();
104
54.7k
    const BaseType lhs_end = this->GetRangeEnd();
105
54.7k
    const BaseType rhs_end = rhs.GetRangeEnd();
106
54.7k
    bool result = (lhs_base < rhs_end) && 
(lhs_end > rhs_base)2.56k
;
107
54.7k
    return result;
108
54.7k
  }
109
110
2.22M
  bool operator<(const Range &rhs) const {
111
2.22M
    if (base == rhs.base)
112
62
      return size < rhs.size;
113
2.22M
    return base < rhs.base;
114
2.22M
  }
lldb_private::Range<unsigned long long, unsigned long long>::operator<(lldb_private::Range<unsigned long long, unsigned long long> const&) const
Line
Count
Source
110
2.07M
  bool operator<(const Range &rhs) const {
111
2.07M
    if (base == rhs.base)
112
49
      return size < rhs.size;
113
2.07M
    return base < rhs.base;
114
2.07M
  }
lldb_private::Range<unsigned int, unsigned int>::operator<(lldb_private::Range<unsigned int, unsigned int> const&) const
Line
Count
Source
110
102
  bool operator<(const Range &rhs) const {
111
102
    if (base == rhs.base)
112
9
      return size < rhs.size;
113
93
    return base < rhs.base;
114
102
  }
lldb_private::Range<unsigned long long, unsigned int>::operator<(lldb_private::Range<unsigned long long, unsigned int> const&) const
Line
Count
Source
110
159k
  bool operator<(const Range &rhs) const {
111
159k
    if (base == rhs.base)
112
4
      return size < rhs.size;
113
159k
    return base < rhs.base;
114
159k
  }
Unexecuted instantiation: lldb_private::Range<unsigned long long, unsigned long>::operator<(lldb_private::Range<unsigned long long, unsigned long> const&) const
115
116
851
  bool operator==(const Range &rhs) const {
117
851
    return base == rhs.base && 
size == rhs.size653
;
118
851
  }
119
120
  bool operator!=(const Range &rhs) const {
121
    return base != rhs.base || size != rhs.size;
122
  }
123
};
124
125
template <typename B, typename S, unsigned N = 0> class RangeVector {
126
public:
127
  typedef B BaseType;
128
  typedef S SizeType;
129
  typedef Range<B, S> Entry;
130
  typedef llvm::SmallVector<Entry, N> Collection;
131
132
898k
  RangeVector() = default;
lldb_private::RangeVector<unsigned int, unsigned int, 0u>::RangeVector()
Line
Count
Source
132
139k
  RangeVector() = default;
lldb_private::RangeVector<unsigned int, unsigned int, 8u>::RangeVector()
Line
Count
Source
132
139k
  RangeVector() = default;
lldb_private::RangeVector<unsigned long long, unsigned int, 0u>::RangeVector()
Line
Count
Source
132
15.1k
  RangeVector() = default;
lldb_private::RangeVector<unsigned int, unsigned int, 1u>::RangeVector()
Line
Count
Source
132
13.7k
  RangeVector() = default;
lldb_private::RangeVector<unsigned long long, unsigned long long, 0u>::RangeVector()
Line
Count
Source
132
159k
  RangeVector() = default;
lldb_private::RangeVector<unsigned long long, unsigned long long, 4u>::RangeVector()
Line
Count
Source
132
3.02k
  RangeVector() = default;
lldb_private::RangeVector<unsigned long long, unsigned long long, 32u>::RangeVector()
Line
Count
Source
132
50
  RangeVector() = default;
lldb_private::RangeVector<unsigned long long, unsigned long long, 2u>::RangeVector()
Line
Count
Source
132
425k
  RangeVector() = default;
lldb_private::RangeVector<unsigned long long, unsigned long, 0u>::RangeVector()
Line
Count
Source
132
2.66k
  RangeVector() = default;
133
134
1.05M
  ~RangeVector() = default;
lldb_private::RangeVector<unsigned int, unsigned int, 8u>::~RangeVector()
Line
Count
Source
134
278k
  ~RangeVector() = default;
lldb_private::RangeVector<unsigned long long, unsigned int, 0u>::~RangeVector()
Line
Count
Source
134
15.1k
  ~RangeVector() = default;
lldb_private::RangeVector<unsigned int, unsigned int, 0u>::~RangeVector()
Line
Count
Source
134
134k
  ~RangeVector() = default;
lldb_private::RangeVector<unsigned int, unsigned int, 1u>::~RangeVector()
Line
Count
Source
134
13.5k
  ~RangeVector() = default;
lldb_private::RangeVector<unsigned long long, unsigned long long, 0u>::~RangeVector()
Line
Count
Source
134
183k
  ~RangeVector() = default;
lldb_private::RangeVector<unsigned long long, unsigned long long, 4u>::~RangeVector()
Line
Count
Source
134
2.90k
  ~RangeVector() = default;
lldb_private::RangeVector<unsigned long long, unsigned long long, 32u>::~RangeVector()
Line
Count
Source
134
50
  ~RangeVector() = default;
lldb_private::RangeVector<unsigned long long, unsigned long long, 2u>::~RangeVector()
Line
Count
Source
134
427k
  ~RangeVector() = default;
lldb_private::RangeVector<unsigned long long, unsigned long, 0u>::~RangeVector()
Line
Count
Source
134
2.54k
  ~RangeVector() = default;
135
136
2.31M
  void Append(const Entry &entry) { m_entries.push_back(entry); }
Unexecuted instantiation: lldb_private::RangeVector<unsigned int, unsigned int, 8u>::Append(lldb_private::Range<unsigned int, unsigned int> const&)
lldb_private::RangeVector<unsigned int, unsigned int, 0u>::Append(lldb_private::Range<unsigned int, unsigned int> const&)
Line
Count
Source
136
9
  void Append(const Entry &entry) { m_entries.push_back(entry); }
lldb_private::RangeVector<unsigned int, unsigned int, 1u>::Append(lldb_private::Range<unsigned int, unsigned int> const&)
Line
Count
Source
136
5.21k
  void Append(const Entry &entry) { m_entries.push_back(entry); }
lldb_private::RangeVector<unsigned long long, unsigned int, 0u>::Append(lldb_private::Range<unsigned long long, unsigned int> const&)
Line
Count
Source
136
43.4k
  void Append(const Entry &entry) { m_entries.push_back(entry); }
Unexecuted instantiation: lldb_private::RangeVector<unsigned long long, unsigned long long, 32u>::Append(lldb_private::Range<unsigned long long, unsigned long long> const&)
lldb_private::RangeVector<unsigned long long, unsigned long long, 0u>::Append(lldb_private::Range<unsigned long long, unsigned long long> const&)
Line
Count
Source
136
2.12M
  void Append(const Entry &entry) { m_entries.push_back(entry); }
lldb_private::RangeVector<unsigned long long, unsigned long long, 4u>::Append(lldb_private::Range<unsigned long long, unsigned long long> const&)
Line
Count
Source
136
2.58k
  void Append(const Entry &entry) { m_entries.push_back(entry); }
lldb_private::RangeVector<unsigned long long, unsigned long long, 2u>::Append(lldb_private::Range<unsigned long long, unsigned long long> const&)
Line
Count
Source
136
139k
  void Append(const Entry &entry) { m_entries.push_back(entry); }
137
138
0
  void Append(B base, S size) { m_entries.emplace_back(base, size); }
139
140
  // Insert an item into a sorted list and optionally combine it with any
141
  // adjacent blocks if requested.
142
80.9k
  void Insert(const Entry &entry, bool combine) {
143
80.9k
    if (m_entries.empty()) {
144
14.7k
      m_entries.push_back(entry);
145
14.7k
      return;
146
14.7k
    }
147
66.1k
    auto begin = m_entries.begin();
148
66.1k
    auto end = m_entries.end();
149
66.1k
    auto pos = std::lower_bound(begin, end, entry);
150
66.1k
    if (combine) {
151
27.9k
      if (pos != end && pos->Union(entry)) {
152
21.1k
        CombinePrevAndNext(pos);
153
21.1k
        return;
154
21.1k
      }
155
6.82k
      if (pos != begin) {
156
3.36k
        auto prev = pos - 1;
157
3.36k
        if (prev->Union(entry)) {
158
3.30k
          CombinePrevAndNext(prev);
159
3.30k
          return;
160
3.30k
        }
161
3.36k
      }
162
6.82k
    }
163
41.6k
    m_entries.insert(pos, entry);
164
41.6k
  }
lldb_private::RangeVector<unsigned long long, unsigned int, 0u>::Insert(lldb_private::Range<unsigned long long, unsigned int> const&, bool)
Line
Count
Source
142
80.9k
  void Insert(const Entry &entry, bool combine) {
143
80.9k
    if (m_entries.empty()) {
144
14.7k
      m_entries.push_back(entry);
145
14.7k
      return;
146
14.7k
    }
147
66.1k
    auto begin = m_entries.begin();
148
66.1k
    auto end = m_entries.end();
149
66.1k
    auto pos = std::lower_bound(begin, end, entry);
150
66.1k
    if (combine) {
151
27.9k
      if (pos != end && pos->Union(entry)) {
152
21.1k
        CombinePrevAndNext(pos);
153
21.1k
        return;
154
21.1k
      }
155
6.82k
      if (pos != begin) {
156
3.36k
        auto prev = pos - 1;
157
3.36k
        if (prev->Union(entry)) {
158
3.30k
          CombinePrevAndNext(prev);
159
3.30k
          return;
160
3.30k
        }
161
3.36k
      }
162
6.82k
    }
163
41.6k
    m_entries.insert(pos, entry);
164
41.6k
  }
lldb_private::RangeVector<unsigned long long, unsigned long, 0u>::Insert(lldb_private::Range<unsigned long long, unsigned long> const&, bool)
Line
Count
Source
142
1
  void Insert(const Entry &entry, bool combine) {
143
1
    if (m_entries.empty()) {
144
1
      m_entries.push_back(entry);
145
1
      return;
146
1
    }
147
0
    auto begin = m_entries.begin();
148
0
    auto end = m_entries.end();
149
0
    auto pos = std::lower_bound(begin, end, entry);
150
0
    if (combine) {
151
0
      if (pos != end && pos->Union(entry)) {
152
0
        CombinePrevAndNext(pos);
153
0
        return;
154
0
      }
155
0
      if (pos != begin) {
156
0
        auto prev = pos - 1;
157
0
        if (prev->Union(entry)) {
158
0
          CombinePrevAndNext(prev);
159
0
          return;
160
0
        }
161
0
      }
162
0
    }
163
0
    m_entries.insert(pos, entry);
164
0
  }
165
166
30.6k
  bool RemoveEntryAtIndex(uint32_t idx) {
167
30.6k
    if (idx < m_entries.size()) {
168
30.6k
      m_entries.erase(m_entries.begin() + idx);
169
30.6k
      return true;
170
30.6k
    }
171
0
    return false;
172
30.6k
  }
Unexecuted instantiation: lldb_private::RangeVector<unsigned long long, unsigned long long, 4u>::RemoveEntryAtIndex(unsigned int)
lldb_private::RangeVector<unsigned long long, unsigned int, 0u>::RemoveEntryAtIndex(unsigned int)
Line
Count
Source
166
30.6k
  bool RemoveEntryAtIndex(uint32_t idx) {
167
30.6k
    if (idx < m_entries.size()) {
168
30.6k
      m_entries.erase(m_entries.begin() + idx);
169
30.6k
      return true;
170
30.6k
    }
171
0
    return false;
172
30.6k
  }
173
174
142k
  void Sort() {
175
142k
    if (m_entries.size() > 1)
176
135k
      std::stable_sort(m_entries.begin(), m_entries.end());
177
142k
  }
lldb_private::RangeVector<unsigned int, unsigned int, 1u>::Sort()
Line
Count
Source
174
5.11k
  void Sort() {
175
5.11k
    if (m_entries.size() > 1)
176
94
      std::stable_sort(m_entries.begin(), m_entries.end());
177
5.11k
  }
lldb_private::RangeVector<unsigned long long, unsigned long long, 0u>::Sort()
Line
Count
Source
174
134k
  void Sort() {
175
134k
    if (m_entries.size() > 1)
176
134k
      std::stable_sort(m_entries.begin(), m_entries.end());
177
134k
  }
lldb_private::RangeVector<unsigned long long, unsigned long long, 4u>::Sort()
Line
Count
Source
174
2.58k
  void Sort() {
175
2.58k
    if (m_entries.size() > 1)
176
2
      std::stable_sort(m_entries.begin(), m_entries.end());
177
2.58k
  }
lldb_private::RangeVector<unsigned long long, unsigned long long, 2u>::Sort()
Line
Count
Source
174
691
  void Sort() {
175
691
    if (m_entries.size() > 1)
176
686
      std::stable_sort(m_entries.begin(), m_entries.end());
177
691
  }
178
179
#ifdef ASSERT_RANGEMAP_ARE_SORTED
180
  bool IsSorted() const {
181
    typename Collection::const_iterator pos, end, prev;
182
    // First we determine if we can combine any of the Entry objects so we
183
    // don't end up allocating and making a new collection for no reason
184
    for (pos = m_entries.begin(), end = m_entries.end(), prev = end; pos != end;
185
         prev = pos++) {
186
      if (prev != end && *pos < *prev)
187
        return false;
188
    }
189
    return true;
190
  }
191
#endif
192
193
5.11k
  void CombineConsecutiveRanges() {
194
#ifdef ASSERT_RANGEMAP_ARE_SORTED
195
    assert(IsSorted());
196
#endif
197
5.11k
    auto first_intersect = std::adjacent_find(
198
5.11k
        m_entries.begin(), m_entries.end(), [](const Entry &a, const Entry &b) {
199
94
          return a.DoesAdjoinOrIntersect(b);
200
94
        });
201
5.11k
    if (first_intersect == m_entries.end())
202
5.11k
      return;
203
204
    // We we can combine at least one entry, then we make a new collection and
205
    // populate it accordingly, and then swap it into place.
206
9
    auto pos = std::next(first_intersect);
207
9
    Collection minimal_ranges(m_entries.begin(), pos);
208
18
    for (; pos != m_entries.end(); 
++pos9
) {
209
9
      Entry &back = minimal_ranges.back();
210
9
      if (back.DoesAdjoinOrIntersect(*pos))
211
9
        back.SetRangeEnd(std::max(back.GetRangeEnd(), pos->GetRangeEnd()));
212
0
      else
213
0
        minimal_ranges.push_back(*pos);
214
9
    }
215
9
    m_entries.swap(minimal_ranges);
216
9
  }
217
218
19.9k
  BaseType GetMinRangeBase(BaseType fail_value) const {
219
#ifdef ASSERT_RANGEMAP_ARE_SORTED
220
    assert(IsSorted());
221
#endif
222
19.9k
    if (m_entries.empty())
223
0
      return fail_value;
224
    // m_entries must be sorted, so if we aren't empty, we grab the first
225
    // range's base
226
19.9k
    return m_entries.front().GetRangeBase();
227
19.9k
  }
228
229
12.8k
  BaseType GetMaxRangeEnd(BaseType fail_value) const {
230
#ifdef ASSERT_RANGEMAP_ARE_SORTED
231
    assert(IsSorted());
232
#endif
233
12.8k
    if (m_entries.empty())
234
0
      return fail_value;
235
    // m_entries must be sorted, so if we aren't empty, we grab the last
236
    // range's end
237
12.8k
    return m_entries.back().GetRangeEnd();
238
12.8k
  }
239
240
1.17k
  void Slide(BaseType slide) {
241
1.17k
    typename Collection::iterator pos, end;
242
3.59k
    for (pos = m_entries.begin(), end = m_entries.end(); pos != end; 
++pos2.42k
)
243
2.42k
      pos->Slide(slide);
244
1.17k
  }
245
246
407k
  void Clear() { m_entries.clear(); }
lldb_private::RangeVector<unsigned long long, unsigned int, 0u>::Clear()
Line
Count
Source
246
1.63k
  void Clear() { m_entries.clear(); }
Unexecuted instantiation: lldb_private::RangeVector<unsigned long long, unsigned long long, 32u>::Clear()
lldb_private::RangeVector<unsigned long long, unsigned long long, 4u>::Clear()
Line
Count
Source
246
3
  void Clear() { m_entries.clear(); }
lldb_private::RangeVector<unsigned long long, unsigned long long, 2u>::Clear()
Line
Count
Source
246
406k
  void Clear() { m_entries.clear(); }
lldb_private::RangeVector<unsigned long long, unsigned long, 0u>::Clear()
Line
Count
Source
246
1
  void Clear() { m_entries.clear(); }
247
248
1.63k
  void Reserve(typename Collection::size_type size) { m_entries.reserve(size); }
249
250
710k
  bool IsEmpty() const { return m_entries.empty(); }
lldb_private::RangeVector<unsigned int, unsigned int, 1u>::IsEmpty() const
Line
Count
Source
250
58
  bool IsEmpty() const { return m_entries.empty(); }
lldb_private::RangeVector<unsigned long long, unsigned long long, 0u>::IsEmpty() const
Line
Count
Source
250
633k
  bool IsEmpty() const { return m_entries.empty(); }
lldb_private::RangeVector<unsigned long long, unsigned long long, 2u>::IsEmpty() const
Line
Count
Source
250
76.5k
  bool IsEmpty() const { return m_entries.empty(); }
lldb_private::RangeVector<unsigned long long, unsigned long, 0u>::IsEmpty() const
Line
Count
Source
250
3
  bool IsEmpty() const { return m_entries.empty(); }
251
252
474k
  size_t GetSize() const { return m_entries.size(); }
lldb_private::RangeVector<unsigned long long, unsigned int, 0u>::GetSize() const
Line
Count
Source
252
64.2k
  size_t GetSize() const { return m_entries.size(); }
lldb_private::RangeVector<unsigned int, unsigned int, 0u>::GetSize() const
Line
Count
Source
252
18
  size_t GetSize() const { return m_entries.size(); }
lldb_private::RangeVector<unsigned int, unsigned int, 1u>::GetSize() const
Line
Count
Source
252
112
  size_t GetSize() const { return m_entries.size(); }
lldb_private::RangeVector<unsigned long long, unsigned long long, 32u>::GetSize() const
Line
Count
Source
252
100
  size_t GetSize() const { return m_entries.size(); }
lldb_private::RangeVector<unsigned long long, unsigned long long, 2u>::GetSize() const
Line
Count
Source
252
410k
  size_t GetSize() const { return m_entries.size(); }
Unexecuted instantiation: lldb_private::RangeVector<unsigned long long, unsigned long long, 0u>::GetSize() const
lldb_private::RangeVector<unsigned long long, unsigned long, 0u>::GetSize() const
Line
Count
Source
252
2
  size_t GetSize() const { return m_entries.size(); }
253
254
36.6k
  const Entry *GetEntryAtIndex(size_t i) const {
255
36.6k
    return ((i < m_entries.size()) ? &m_entries[i] : 
nullptr0
);
256
36.6k
  }
lldb_private::RangeVector<unsigned long long, unsigned int, 0u>::GetEntryAtIndex(unsigned long) const
Line
Count
Source
254
36.6k
  const Entry *GetEntryAtIndex(size_t i) const {
255
36.6k
    return ((i < m_entries.size()) ? &m_entries[i] : 
nullptr0
);
256
36.6k
  }
lldb_private::RangeVector<unsigned int, unsigned int, 0u>::GetEntryAtIndex(unsigned long) const
Line
Count
Source
254
9
  const Entry *GetEntryAtIndex(size_t i) const {
255
9
    return ((i < m_entries.size()) ? &m_entries[i] : 
nullptr0
);
256
9
  }
Unexecuted instantiation: lldb_private::RangeVector<unsigned long long, unsigned long long, 4u>::GetEntryAtIndex(unsigned long) const
Unexecuted instantiation: lldb_private::RangeVector<unsigned long long, unsigned long long, 0u>::GetEntryAtIndex(unsigned long) const
lldb_private::RangeVector<unsigned long long, unsigned long, 0u>::GetEntryAtIndex(unsigned long) const
Line
Count
Source
254
1
  const Entry *GetEntryAtIndex(size_t i) const {
255
1
    return ((i < m_entries.size()) ? &m_entries[i] : 
nullptr0
);
256
1
  }
257
258
  // Clients must ensure that "i" is a valid index prior to calling this
259
  // function
260
107k
  Entry &GetEntryRef(size_t i) { return m_entries[i]; }
lldb_private::RangeVector<unsigned int, unsigned int, 1u>::GetEntryRef(unsigned long)
Line
Count
Source
260
57
  Entry &GetEntryRef(size_t i) { return m_entries[i]; }
lldb_private::RangeVector<unsigned long long, unsigned int, 0u>::GetEntryRef(unsigned long)
Line
Count
Source
260
100k
  Entry &GetEntryRef(size_t i) { return m_entries[i]; }
Unexecuted instantiation: lldb_private::RangeVector<unsigned long long, unsigned long long, 32u>::GetEntryRef(unsigned long)
lldb_private::RangeVector<unsigned long long, unsigned long long, 2u>::GetEntryRef(unsigned long)
Line
Count
Source
260
6.99k
  Entry &GetEntryRef(size_t i) { return m_entries[i]; }
261
89
  const Entry &GetEntryRef(size_t i) const { return m_entries[i]; }
lldb_private::RangeVector<unsigned int, unsigned int, 1u>::GetEntryRef(unsigned long) const
Line
Count
Source
261
89
  const Entry &GetEntryRef(size_t i) const { return m_entries[i]; }
Unexecuted instantiation: lldb_private::RangeVector<unsigned long long, unsigned long long, 0u>::GetEntryRef(unsigned long) const
262
263
0
  Entry *Back() { return (m_entries.empty() ? nullptr : &m_entries.back()); }
264
265
  const Entry *Back() const {
266
    return (m_entries.empty() ? nullptr : &m_entries.back());
267
  }
268
269
251M
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
270
251M
    return lhs.GetRangeBase() < rhs.GetRangeBase();
271
251M
  }
Unexecuted instantiation: lldb_private::RangeVector<unsigned int, unsigned int, 8u>::BaseLessThan(lldb_private::Range<unsigned int, unsigned int> const&, lldb_private::Range<unsigned int, unsigned int> const&)
lldb_private::RangeVector<unsigned int, unsigned int, 1u>::BaseLessThan(lldb_private::Range<unsigned int, unsigned int> const&, lldb_private::Range<unsigned int, unsigned int> const&)
Line
Count
Source
269
1.42k
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
270
1.42k
    return lhs.GetRangeBase() < rhs.GetRangeBase();
271
1.42k
  }
lldb_private::RangeVector<unsigned long long, unsigned long long, 0u>::BaseLessThan(lldb_private::Range<unsigned long long, unsigned long long> const&, lldb_private::Range<unsigned long long, unsigned long long> const&)
Line
Count
Source
269
251M
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
270
251M
    return lhs.GetRangeBase() < rhs.GetRangeBase();
271
251M
  }
lldb_private::RangeVector<unsigned long long, unsigned long long, 4u>::BaseLessThan(lldb_private::Range<unsigned long long, unsigned long long> const&, lldb_private::Range<unsigned long long, unsigned long long> const&)
Line
Count
Source
269
518k
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
270
518k
    return lhs.GetRangeBase() < rhs.GetRangeBase();
271
518k
  }
lldb_private::RangeVector<unsigned long long, unsigned int, 0u>::BaseLessThan(lldb_private::Range<unsigned long long, unsigned int> const&, lldb_private::Range<unsigned long long, unsigned int> const&)
Line
Count
Source
269
85.8k
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
270
85.8k
    return lhs.GetRangeBase() < rhs.GetRangeBase();
271
85.8k
  }
lldb_private::RangeVector<unsigned long long, unsigned long long, 2u>::BaseLessThan(lldb_private::Range<unsigned long long, unsigned long long> const&, lldb_private::Range<unsigned long long, unsigned long long> const&)
Line
Count
Source
269
37.6k
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
270
37.6k
    return lhs.GetRangeBase() < rhs.GetRangeBase();
271
37.6k
  }
272
273
29.1k
  uint32_t FindEntryIndexThatContains(B addr) const {
274
#ifdef ASSERT_RANGEMAP_ARE_SORTED
275
    assert(IsSorted());
276
#endif
277
29.1k
    if (!m_entries.empty()) {
278
29.1k
      Entry entry(addr, 1);
279
29.1k
      typename Collection::const_iterator begin = m_entries.begin();
280
29.1k
      typename Collection::const_iterator end = m_entries.end();
281
29.1k
      typename Collection::const_iterator pos =
282
29.1k
          std::lower_bound(begin, end, entry, BaseLessThan);
283
284
29.1k
      if (pos != end && 
pos->Contains(addr)29.1k
) {
285
29.1k
        return std::distance(begin, pos);
286
29.1k
      } else 
if (12
pos != begin12
) {
287
12
        --pos;
288
12
        if (pos->Contains(addr))
289
12
          return std::distance(begin, pos);
290
12
      }
291
29.1k
    }
292
0
    return UINT32_MAX;
293
29.1k
  }
lldb_private::RangeVector<unsigned int, unsigned int, 1u>::FindEntryIndexThatContains(unsigned int) const
Line
Count
Source
273
12
  uint32_t FindEntryIndexThatContains(B addr) const {
274
#ifdef ASSERT_RANGEMAP_ARE_SORTED
275
    assert(IsSorted());
276
#endif
277
12
    if (!m_entries.empty()) {
278
12
      Entry entry(addr, 1);
279
12
      typename Collection::const_iterator begin = m_entries.begin();
280
12
      typename Collection::const_iterator end = m_entries.end();
281
12
      typename Collection::const_iterator pos =
282
12
          std::lower_bound(begin, end, entry, BaseLessThan);
283
284
12
      if (pos != end && 
pos->Contains(addr)0
) {
285
0
        return std::distance(begin, pos);
286
12
      } else if (pos != begin) {
287
12
        --pos;
288
12
        if (pos->Contains(addr))
289
12
          return std::distance(begin, pos);
290
12
      }
291
12
    }
292
0
    return UINT32_MAX;
293
12
  }
Unexecuted instantiation: lldb_private::RangeVector<unsigned long long, unsigned long long, 4u>::FindEntryIndexThatContains(unsigned long long) const
lldb_private::RangeVector<unsigned long long, unsigned int, 0u>::FindEntryIndexThatContains(unsigned long long) const
Line
Count
Source
273
29.1k
  uint32_t FindEntryIndexThatContains(B addr) const {
274
#ifdef ASSERT_RANGEMAP_ARE_SORTED
275
    assert(IsSorted());
276
#endif
277
29.1k
    if (!m_entries.empty()) {
278
29.1k
      Entry entry(addr, 1);
279
29.1k
      typename Collection::const_iterator begin = m_entries.begin();
280
29.1k
      typename Collection::const_iterator end = m_entries.end();
281
29.1k
      typename Collection::const_iterator pos =
282
29.1k
          std::lower_bound(begin, end, entry, BaseLessThan);
283
284
29.1k
      if (pos != end && pos->Contains(addr)) {
285
29.1k
        return std::distance(begin, pos);
286
29.1k
      } else 
if (0
pos != begin0
) {
287
0
        --pos;
288
0
        if (pos->Contains(addr))
289
0
          return std::distance(begin, pos);
290
0
      }
291
29.1k
    }
292
0
    return UINT32_MAX;
293
29.1k
  }
294
295
54.5M
  const Entry *FindEntryThatContains(B addr) const {
296
#ifdef ASSERT_RANGEMAP_ARE_SORTED
297
    assert(IsSorted());
298
#endif
299
54.5M
    if (!m_entries.empty()) {
300
52.5M
      Entry entry(addr, 1);
301
52.5M
      typename Collection::const_iterator begin = m_entries.begin();
302
52.5M
      typename Collection::const_iterator end = m_entries.end();
303
52.5M
      typename Collection::const_iterator pos =
304
52.5M
          std::lower_bound(begin, end, entry, BaseLessThan);
305
306
52.5M
      if (pos != end && 
pos->Contains(addr)51.9M
) {
307
603k
        return &(*pos);
308
51.9M
      } else if (pos != begin) {
309
51.9M
        --pos;
310
51.9M
        if (pos->Contains(addr)) {
311
51.3M
          return &(*pos);
312
51.3M
        }
313
51.9M
      }
314
52.5M
    }
315
2.56M
    return nullptr;
316
54.5M
  }
lldb_private::RangeVector<unsigned int, unsigned int, 8u>::FindEntryThatContains(unsigned int) const
Line
Count
Source
295
2.03M
  const Entry *FindEntryThatContains(B addr) const {
296
#ifdef ASSERT_RANGEMAP_ARE_SORTED
297
    assert(IsSorted());
298
#endif
299
2.03M
    if (!m_entries.empty()) {
300
0
      Entry entry(addr, 1);
301
0
      typename Collection::const_iterator begin = m_entries.begin();
302
0
      typename Collection::const_iterator end = m_entries.end();
303
0
      typename Collection::const_iterator pos =
304
0
          std::lower_bound(begin, end, entry, BaseLessThan);
305
306
0
      if (pos != end && pos->Contains(addr)) {
307
0
        return &(*pos);
308
0
      } else if (pos != begin) {
309
0
        --pos;
310
0
        if (pos->Contains(addr)) {
311
0
          return &(*pos);
312
0
        }
313
0
      }
314
0
    }
315
2.03M
    return nullptr;
316
2.03M
  }
lldb_private::RangeVector<unsigned int, unsigned int, 1u>::FindEntryThatContains(unsigned int) const
Line
Count
Source
295
404
  const Entry *FindEntryThatContains(B addr) const {
296
#ifdef ASSERT_RANGEMAP_ARE_SORTED
297
    assert(IsSorted());
298
#endif
299
404
    if (!m_entries.empty()) {
300
404
      Entry entry(addr, 1);
301
404
      typename Collection::const_iterator begin = m_entries.begin();
302
404
      typename Collection::const_iterator end = m_entries.end();
303
404
      typename Collection::const_iterator pos =
304
404
          std::lower_bound(begin, end, entry, BaseLessThan);
305
306
404
      if (pos != end && 
pos->Contains(addr)152
) {
307
150
        return &(*pos);
308
254
      } else if (pos != begin) {
309
254
        --pos;
310
254
        if (pos->Contains(addr)) {
311
248
          return &(*pos);
312
248
        }
313
254
      }
314
404
    }
315
6
    return nullptr;
316
404
  }
lldb_private::RangeVector<unsigned long long, unsigned long long, 0u>::FindEntryThatContains(unsigned long long) const
Line
Count
Source
295
51.9M
  const Entry *FindEntryThatContains(B addr) const {
296
#ifdef ASSERT_RANGEMAP_ARE_SORTED
297
    assert(IsSorted());
298
#endif
299
51.9M
    if (!m_entries.empty()) {
300
51.9M
      Entry entry(addr, 1);
301
51.9M
      typename Collection::const_iterator begin = m_entries.begin();
302
51.9M
      typename Collection::const_iterator end = m_entries.end();
303
51.9M
      typename Collection::const_iterator pos =
304
51.9M
          std::lower_bound(begin, end, entry, BaseLessThan);
305
306
51.9M
      if (pos != end && 
pos->Contains(addr)51.9M
) {
307
597k
        return &(*pos);
308
51.3M
      } else if (pos != begin) {
309
51.3M
        --pos;
310
51.3M
        if (pos->Contains(addr)) {
311
51.3M
          return &(*pos);
312
51.3M
        }
313
51.3M
      }
314
51.9M
    }
315
3.15k
    return nullptr;
316
51.9M
  }
lldb_private::RangeVector<unsigned long long, unsigned long long, 4u>::FindEntryThatContains(unsigned long long) const
Line
Count
Source
295
526k
  const Entry *FindEntryThatContains(B addr) const {
296
#ifdef ASSERT_RANGEMAP_ARE_SORTED
297
    assert(IsSorted());
298
#endif
299
526k
    if (!m_entries.empty()) {
300
518k
      Entry entry(addr, 1);
301
518k
      typename Collection::const_iterator begin = m_entries.begin();
302
518k
      typename Collection::const_iterator end = m_entries.end();
303
518k
      typename Collection::const_iterator pos =
304
518k
          std::lower_bound(begin, end, entry, BaseLessThan);
305
306
518k
      if (pos != end && 
pos->Contains(addr)179
) {
307
179
        return &(*pos);
308
518k
      } else if (pos != begin) {
309
518k
        --pos;
310
518k
        if (pos->Contains(addr)) {
311
8
          return &(*pos);
312
8
        }
313
518k
      }
314
518k
    }
315
526k
    return nullptr;
316
526k
  }
lldb_private::RangeVector<unsigned long long, unsigned long long, 2u>::FindEntryThatContains(unsigned long long) const
Line
Count
Source
295
37.2k
  const Entry *FindEntryThatContains(B addr) const {
296
#ifdef ASSERT_RANGEMAP_ARE_SORTED
297
    assert(IsSorted());
298
#endif
299
37.2k
    if (!m_entries.empty()) {
300
37.2k
      Entry entry(addr, 1);
301
37.2k
      typename Collection::const_iterator begin = m_entries.begin();
302
37.2k
      typename Collection::const_iterator end = m_entries.end();
303
37.2k
      typename Collection::const_iterator pos =
304
37.2k
          std::lower_bound(begin, end, entry, BaseLessThan);
305
306
37.2k
      if (pos != end && 
pos->Contains(addr)8.10k
) {
307
5.79k
        return &(*pos);
308
31.4k
      } else if (pos != begin) {
309
29.2k
        --pos;
310
29.2k
        if (pos->Contains(addr)) {
311
25.7k
          return &(*pos);
312
25.7k
        }
313
29.2k
      }
314
37.2k
    }
315
5.64k
    return nullptr;
316
37.2k
  }
317
318
1.00k
  const Entry *FindEntryThatContains(const Entry &range) const {
319
#ifdef ASSERT_RANGEMAP_ARE_SORTED
320
    assert(IsSorted());
321
#endif
322
1.00k
    if (!m_entries.empty()) {
323
1.00k
      typename Collection::const_iterator begin = m_entries.begin();
324
1.00k
      typename Collection::const_iterator end = m_entries.end();
325
1.00k
      typename Collection::const_iterator pos =
326
1.00k
          std::lower_bound(begin, end, range, BaseLessThan);
327
328
1.00k
      if (pos != end && 
pos->Contains(range)16
) {
329
16
        return &(*pos);
330
985
      } else if (pos != begin) {
331
985
        --pos;
332
985
        if (pos->Contains(range)) {
333
985
          return &(*pos);
334
985
        }
335
985
      }
336
1.00k
    }
337
0
    return nullptr;
338
1.00k
  }
339
340
  using const_iterator = typename Collection::const_iterator;
341
326k
  const_iterator begin() const { return m_entries.begin(); }
342
326k
  const_iterator end() const { return m_entries.end(); }
343
344
protected:
345
24.4k
  void CombinePrevAndNext(typename Collection::iterator pos) {
346
    // Check if the prev or next entries in case they need to be unioned with
347
    // the entry pointed to by "pos".
348
24.4k
    if (pos != m_entries.begin()) {
349
2.24k
      auto prev = pos - 1;
350
2.24k
      if (prev->Union(*pos))
351
2.11k
        m_entries.erase(pos);
352
2.24k
      pos = prev;
353
2.24k
    }
354
355
24.4k
    auto end = m_entries.end();
356
24.4k
    if (pos != end) {
357
24.4k
      auto next = pos + 1;
358
24.4k
      if (next != end) {
359
12.3k
        if (pos->Union(*next))
360
0
          m_entries.erase(next);
361
12.3k
      }
362
24.4k
    }
363
24.4k
  }
lldb_private::RangeVector<unsigned long long, unsigned int, 0u>::CombinePrevAndNext(lldb_private::Range<unsigned long long, unsigned int>*)
Line
Count
Source
345
24.4k
  void CombinePrevAndNext(typename Collection::iterator pos) {
346
    // Check if the prev or next entries in case they need to be unioned with
347
    // the entry pointed to by "pos".
348
24.4k
    if (pos != m_entries.begin()) {
349
2.24k
      auto prev = pos - 1;
350
2.24k
      if (prev->Union(*pos))
351
2.11k
        m_entries.erase(pos);
352
2.24k
      pos = prev;
353
2.24k
    }
354
355
24.4k
    auto end = m_entries.end();
356
24.4k
    if (pos != end) {
357
24.4k
      auto next = pos + 1;
358
24.4k
      if (next != end) {
359
12.3k
        if (pos->Union(*next))
360
0
          m_entries.erase(next);
361
12.3k
      }
362
24.4k
    }
363
24.4k
  }
Unexecuted instantiation: lldb_private::RangeVector<unsigned long long, unsigned long, 0u>::CombinePrevAndNext(lldb_private::Range<unsigned long long, unsigned long>*)
364
365
  Collection m_entries;
366
};
367
368
// A simple range  with data class where you get to define the type of
369
// the range base "B", the type used for the range byte size "S", and the type
370
// for the associated data "T".
371
template <typename B, typename S, typename T>
372
struct RangeData : public Range<B, S> {
373
  typedef T DataType;
374
375
  DataType data;
376
377
145k
  RangeData() : Range<B, S>(), data() {}
lldb_private::RangeData<unsigned long long, unsigned int, unsigned int>::RangeData()
Line
Count
Source
377
10.5k
  RangeData() : Range<B, S>(), data() {}
lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int>::RangeData()
Line
Count
Source
377
135k
  RangeData() : Range<B, S>(), data() {}
378
379
3.23M
  RangeData(B base, S size) : Range<B, S>(base, size), data() {}
lldb_private::RangeData<unsigned long long, unsigned int, unsigned int>::RangeData(unsigned long long, unsigned int)
Line
Count
Source
379
130k
  RangeData(B base, S size) : Range<B, S>(base, size), data() {}
lldb_private::RangeData<unsigned long long, unsigned long long, unsigned long long>::RangeData(unsigned long long, unsigned long long)
Line
Count
Source
379
56.5k
  RangeData(B base, S size) : Range<B, S>(base, size), data() {}
lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int>::RangeData(unsigned long long, unsigned long long)
Line
Count
Source
379
2.61M
  RangeData(B base, S size) : Range<B, S>(base, size), data() {}
lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Variable*>::RangeData(unsigned long long, unsigned long long)
Line
Count
Source
379
2
  RangeData(B base, S size) : Range<B, S>(base, size), data() {}
lldb_private::RangeData<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry>::RangeData(unsigned long long, unsigned long long)
Line
Count
Source
379
144k
  RangeData(B base, S size) : Range<B, S>(base, size), data() {}
Unexecuted instantiation: lldb_private::RangeData<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int> >::RangeData(unsigned long long, unsigned int)
Unexecuted instantiation: lldb_private::RangeData<unsigned int, unsigned int, int>::RangeData(unsigned int, unsigned int)
lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long> >::RangeData(unsigned long long, unsigned long long)
Line
Count
Source
379
291k
  RangeData(B base, S size) : Range<B, S>(base, size), data() {}
lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData>::RangeData(unsigned long long, unsigned long long)
Line
Count
Source
379
72
  RangeData(B base, S size) : Range<B, S>(base, size), data() {}
lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark>::RangeData(unsigned long long, unsigned long long)
Line
Count
Source
379
57
  RangeData(B base, S size) : Range<B, S>(base, size), data() {}
380
381
474k
  RangeData(B base, S size, DataType d) : Range<B, S>(base, size), data(d) {}
lldb_private::RangeData<unsigned long long, unsigned int, unsigned int>::RangeData(unsigned long long, unsigned int, unsigned int)
Line
Count
Source
381
384k
  RangeData(B base, S size, DataType d) : Range<B, S>(base, size), data(d) {}
Unexecuted instantiation: lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Variable*>::RangeData(unsigned long long, unsigned long long, lldb_private::Variable*)
lldb_private::RangeData<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry>::RangeData(unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry)
Line
Count
Source
381
46.5k
  RangeData(B base, S size, DataType d) : Range<B, S>(base, size), data(d) {}
lldb_private::RangeData<unsigned long long, unsigned long long, unsigned long long>::RangeData(unsigned long long, unsigned long long, unsigned long long)
Line
Count
Source
381
40.1k
  RangeData(B base, S size, DataType d) : Range<B, S>(base, size), data(d) {}
Unexecuted instantiation: lldb_private::RangeData<unsigned int, unsigned int, int>::RangeData(unsigned int, unsigned int, int)
lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long> >::RangeData(unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>)
Line
Count
Source
381
1.31k
  RangeData(B base, S size, DataType d) : Range<B, S>(base, size), data(d) {}
lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int>::RangeData(unsigned long long, unsigned long long, unsigned int)
Line
Count
Source
381
1.31k
  RangeData(B base, S size, DataType d) : Range<B, S>(base, size), data(d) {}
lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData>::RangeData(unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData)
Line
Count
Source
381
24
  RangeData(B base, S size, DataType d) : Range<B, S>(base, size), data(d) {}
lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark>::RangeData(unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark)
Line
Count
Source
381
29
  RangeData(B base, S size, DataType d) : Range<B, S>(base, size), data(d) {}
382
};
383
384
// We can treat the vector as a flattened Binary Search Tree, augmenting it
385
// with upper bounds (max of range endpoints) for every index allows us to
386
// query for range containment quicker.
387
template <typename B, typename S, typename T>
388
struct AugmentedRangeData : public RangeData<B, S, T> {
389
  B upper_bound;
390
391
  AugmentedRangeData(const RangeData<B, S, T> &rd)
392
169M
      : RangeData<B, S, T>(rd), upper_bound() {}
lldb_private::AugmentedRangeData<unsigned long long, unsigned int, unsigned int>::AugmentedRangeData(lldb_private::RangeData<unsigned long long, unsigned int, unsigned int> const&)
Line
Count
Source
392
384k
      : RangeData<B, S, T>(rd), upper_bound() {}
lldb_private::AugmentedRangeData<unsigned long long, unsigned long long, unsigned int>::AugmentedRangeData(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&)
Line
Count
Source
392
169M
      : RangeData<B, S, T>(rd), upper_bound() {}
Unexecuted instantiation: lldb_private::AugmentedRangeData<unsigned long long, unsigned long long, lldb_private::Variable*>::AugmentedRangeData(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Variable*> const&)
lldb_private::AugmentedRangeData<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry>::AugmentedRangeData(lldb_private::RangeData<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry> const&)
Line
Count
Source
392
46.5k
      : RangeData<B, S, T>(rd), upper_bound() {}
lldb_private::AugmentedRangeData<unsigned long long, unsigned long long, unsigned long long>::AugmentedRangeData(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned long long> const&)
Line
Count
Source
392
40.1k
      : RangeData<B, S, T>(rd), upper_bound() {}
Unexecuted instantiation: lldb_private::AugmentedRangeData<unsigned int, unsigned int, int>::AugmentedRangeData(lldb_private::RangeData<unsigned int, unsigned int, int> const&)
Unexecuted instantiation: lldb_private::AugmentedRangeData<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int> >::AugmentedRangeData(lldb_private::RangeData<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int> > const&)
lldb_private::AugmentedRangeData<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long> >::AugmentedRangeData(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long> > const&)
Line
Count
Source
392
549
      : RangeData<B, S, T>(rd), upper_bound() {}
lldb_private::AugmentedRangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData>::AugmentedRangeData(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> const&)
Line
Count
Source
392
24
      : RangeData<B, S, T>(rd), upper_bound() {}
lldb_private::AugmentedRangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark>::AugmentedRangeData(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark> const&)
Line
Count
Source
392
29
      : RangeData<B, S, T>(rd), upper_bound() {}
393
};
394
395
template <typename B, typename S, typename T, unsigned N = 0,
396
          class Compare = std::less<T>>
397
class RangeDataVector {
398
public:
399
  typedef lldb_private::Range<B, S> Range;
400
  typedef RangeData<B, S, T> Entry;
401
  typedef AugmentedRangeData<B, S, T> AugmentedEntry;
402
  typedef llvm::SmallVector<AugmentedEntry, N> Collection;
403
404
286k
  RangeDataVector(Compare compare = Compare()) : m_compare(compare) {}
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::RangeDataVector(std::__1::less<unsigned int>)
Line
Count
Source
404
12.2k
  RangeDataVector(Compare compare = Compare()) : m_compare(compare) {}
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::RangeDataVector(lldb_private::Symtab::FileRangeToIndexMapCompare)
Line
Count
Source
404
140k
  RangeDataVector(Compare compare = Compare()) : m_compare(compare) {}
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Variable*, 0u, std::__1::less<lldb_private::Variable*> >::RangeDataVector(std::__1::less<lldb_private::Variable*>)
Line
Count
Source
404
1
  RangeDataVector(Compare compare = Compare()) : m_compare(compare) {}
lldb_private::RangeDataVector<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry, 0u, std::__1::less<SymbolFileDWARFDebugMap::OSOEntry> >::RangeDataVector(std::__1::less<SymbolFileDWARFDebugMap::OSOEntry>)
Line
Count
Source
404
132k
  RangeDataVector(Compare compare = Compare()) : m_compare(compare) {}
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned long long, 0u, std::__1::less<unsigned long long> >::RangeDataVector(std::__1::less<unsigned long long>)
Line
Count
Source
404
2.08k
  RangeDataVector(Compare compare = Compare()) : m_compare(compare) {}
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int>, 0u, std::__1::less<std::__1::pair<unsigned int, unsigned int> > >::RangeDataVector(std::__1::less<std::__1::pair<unsigned int, unsigned int> >)
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::RangeDataVector(std::__1::less<int>)
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>, 0u, std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> > >::RangeDataVector(std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> >)
Line
Count
Source
404
61
  RangeDataVector(Compare compare = Compare()) : m_compare(compare) {}
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, std::__1::less<unsigned int> >::RangeDataVector(std::__1::less<unsigned int>)
Line
Count
Source
404
61
  RangeDataVector(Compare compare = Compare()) : m_compare(compare) {}
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> >::RangeDataVector(std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData>)
Line
Count
Source
404
16
  RangeDataVector(Compare compare = Compare()) : m_compare(compare) {}
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::Bookmark> >::RangeDataVector(std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::Bookmark>)
Line
Count
Source
404
12
  RangeDataVector(Compare compare = Compare()) : m_compare(compare) {}
405
406
281k
  ~RangeDataVector() = default;
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::~RangeDataVector()
Line
Count
Source
406
11.9k
  ~RangeDataVector() = default;
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::~RangeDataVector()
Line
Count
Source
406
135k
  ~RangeDataVector() = default;
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Variable*, 0u, std::__1::less<lldb_private::Variable*> >::~RangeDataVector()
lldb_private::RangeDataVector<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry, 0u, std::__1::less<SymbolFileDWARFDebugMap::OSOEntry> >::~RangeDataVector()
Line
Count
Source
406
132k
  ~RangeDataVector() = default;
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned long long, 0u, std::__1::less<unsigned long long> >::~RangeDataVector()
Line
Count
Source
406
1.72k
  ~RangeDataVector() = default;
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int>, 0u, std::__1::less<std::__1::pair<unsigned int, unsigned int> > >::~RangeDataVector()
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::~RangeDataVector()
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, std::__1::less<unsigned int> >::~RangeDataVector()
Line
Count
Source
406
61
  ~RangeDataVector() = default;
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>, 0u, std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> > >::~RangeDataVector()
Line
Count
Source
406
61
  ~RangeDataVector() = default;
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::Bookmark> >::~RangeDataVector()
Line
Count
Source
406
10
  ~RangeDataVector() = default;
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> >::~RangeDataVector()
Line
Count
Source
406
6
  ~RangeDataVector() = default;
407
408
169M
  void Append(const Entry &entry) { m_entries.emplace_back(entry); }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::Append(lldb_private::RangeData<unsigned long long, unsigned int, unsigned int> const&)
Line
Count
Source
408
384k
  void Append(const Entry &entry) { m_entries.emplace_back(entry); }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::Append(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&)
Line
Count
Source
408
169M
  void Append(const Entry &entry) { m_entries.emplace_back(entry); }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Variable*, 0u, std::__1::less<lldb_private::Variable*> >::Append(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Variable*> const&)
lldb_private::RangeDataVector<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry, 0u, std::__1::less<SymbolFileDWARFDebugMap::OSOEntry> >::Append(lldb_private::RangeData<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry> const&)
Line
Count
Source
408
46.5k
  void Append(const Entry &entry) { m_entries.emplace_back(entry); }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned long long, 0u, std::__1::less<unsigned long long> >::Append(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned long long> const&)
Line
Count
Source
408
40.1k
  void Append(const Entry &entry) { m_entries.emplace_back(entry); }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::Append(lldb_private::RangeData<unsigned int, unsigned int, int> const&)
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int>, 0u, std::__1::less<std::__1::pair<unsigned int, unsigned int> > >::Append(lldb_private::RangeData<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int> > const&)
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>, 0u, std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> > >::Append(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long> > const&)
Line
Count
Source
408
549
  void Append(const Entry &entry) { m_entries.emplace_back(entry); }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, std::__1::less<unsigned int> >::Append(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&)
Line
Count
Source
408
1.31k
  void Append(const Entry &entry) { m_entries.emplace_back(entry); }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> >::Append(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> const&)
Line
Count
Source
408
24
  void Append(const Entry &entry) { m_entries.emplace_back(entry); }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::Bookmark> >::Append(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark> const&)
Line
Count
Source
408
29
  void Append(const Entry &entry) { m_entries.emplace_back(entry); }
409
410
283k
  void Sort() {
411
283k
    if (m_entries.size() > 1)
412
280k
      std::stable_sort(m_entries.begin(), m_entries.end(),
413
2.23G
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
2.23G
                         if (a.base != b.base)
415
2.23G
                           return a.base < b.base;
416
7.58M
                         if (a.size != b.size)
417
1.07k
                           return a.size < b.size;
418
7.57M
                         return compare(a.data, b.data);
419
7.58M
                       });
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::Sort()::'lambda'(lldb_private::RangeData<unsigned long long, unsigned int, unsigned int> const&, lldb_private::RangeData<unsigned long long, unsigned int, unsigned int> const&)::operator()(lldb_private::RangeData<unsigned long long, unsigned int, unsigned int> const&, lldb_private::RangeData<unsigned long long, unsigned int, unsigned int> const&) const
Line
Count
Source
413
2.48M
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
2.48M
                         if (a.base != b.base)
415
2.46M
                           return a.base < b.base;
416
16.6k
                         if (a.size != b.size)
417
918
                           return a.size < b.size;
418
15.7k
                         return compare(a.data, b.data);
419
16.6k
                       });
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::Sort()::'lambda'(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&, lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&)::operator()(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&, lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&) const
Line
Count
Source
413
2.23G
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
2.23G
                         if (a.base != b.base)
415
2.22G
                           return a.base < b.base;
416
7.56M
                         if (a.size != b.size)
417
161
                           return a.size < b.size;
418
7.56M
                         return compare(a.data, b.data);
419
7.56M
                       });
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Variable*, 0u, std::__1::less<lldb_private::Variable*> >::Sort()::'lambda'(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Variable*> const&, lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Variable*> const&)::operator()(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Variable*> const&, lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Variable*> const&) const
lldb_private::RangeDataVector<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry, 0u, std::__1::less<SymbolFileDWARFDebugMap::OSOEntry> >::Sort()::'lambda'(lldb_private::RangeData<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry> const&, lldb_private::RangeData<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry> const&)::operator()(lldb_private::RangeData<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry> const&, lldb_private::RangeData<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry> const&) const
Line
Count
Source
413
81.2k
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
81.2k
                         if (a.base != b.base)
415
81.2k
                           return a.base < b.base;
416
0
                         if (a.size != b.size)
417
0
                           return a.size < b.size;
418
0
                         return compare(a.data, b.data);
419
0
                       });
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned long long, 0u, std::__1::less<unsigned long long> >::Sort()::'lambda'(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned long long> const&, lldb_private::RangeData<unsigned long long, unsigned long long, unsigned long long> const&)::operator()(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned long long> const&, lldb_private::RangeData<unsigned long long, unsigned long long, unsigned long long> const&) const
Line
Count
Source
413
76.1k
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
76.1k
                         if (a.base != b.base)
415
76.1k
                           return a.base < b.base;
416
0
                         if (a.size != b.size)
417
0
                           return a.size < b.size;
418
0
                         return compare(a.data, b.data);
419
0
                       });
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int>, 0u, std::__1::less<std::__1::pair<unsigned int, unsigned int> > >::Sort()::'lambda'(lldb_private::RangeData<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int> > const&, lldb_private::RangeData<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int> > const&)::operator()(lldb_private::RangeData<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int> > const&, lldb_private::RangeData<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int> > const&) const
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::Sort()::'lambda'(lldb_private::RangeData<unsigned int, unsigned int, int> const&, lldb_private::RangeData<unsigned int, unsigned int, int> const&)::operator()(lldb_private::RangeData<unsigned int, unsigned int, int> const&, lldb_private::RangeData<unsigned int, unsigned int, int> const&) const
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>, 0u, std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> > >::Sort()::'lambda'(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long> > const&, lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long> > const&)::operator()(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long> > const&, lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long> > const&) const
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, std::__1::less<unsigned int> >::Sort()::'lambda'(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&, lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&)::operator()(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&, lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&) const
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> >::Sort()::'lambda'(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> const&, lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> const&)::operator()(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> const&, lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> const&) const
Line
Count
Source
413
18
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
18
                         if (a.base != b.base)
415
18
                           return a.base < b.base;
416
0
                         if (a.size != b.size)
417
0
                           return a.size < b.size;
418
0
                         return compare(a.data, b.data);
419
0
                       });
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::Bookmark> >::Sort()::'lambda'(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark> const&, lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark> const&)::operator()(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark> const&, lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark> const&) const
Line
Count
Source
413
23
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
23
                         if (a.base != b.base)
415
23
                           return a.base < b.base;
416
0
                         if (a.size != b.size)
417
0
                           return a.size < b.size;
418
0
                         return compare(a.data, b.data);
419
0
                       });
420
283k
    if (!m_entries.empty())
421
283k
      ComputeUpperBounds(0, m_entries.size());
422
283k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::Sort()
Line
Count
Source
410
11.9k
  void Sort() {
411
11.9k
    if (m_entries.size() > 1)
412
9.42k
      std::stable_sort(m_entries.begin(), m_entries.end(),
413
9.42k
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
9.42k
                         if (a.base != b.base)
415
9.42k
                           return a.base < b.base;
416
9.42k
                         if (a.size != b.size)
417
9.42k
                           return a.size < b.size;
418
9.42k
                         return compare(a.data, b.data);
419
9.42k
                       });
420
11.9k
    if (!m_entries.empty())
421
11.9k
      ComputeUpperBounds(0, m_entries.size());
422
11.9k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::Sort()
Line
Count
Source
410
268k
  void Sort() {
411
268k
    if (m_entries.size() > 1)
412
268k
      std::stable_sort(m_entries.begin(), m_entries.end(),
413
268k
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
268k
                         if (a.base != b.base)
415
268k
                           return a.base < b.base;
416
268k
                         if (a.size != b.size)
417
268k
                           return a.size < b.size;
418
268k
                         return compare(a.data, b.data);
419
268k
                       });
420
268k
    if (!m_entries.empty())
421
268k
      ComputeUpperBounds(0, m_entries.size());
422
268k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Variable*, 0u, std::__1::less<lldb_private::Variable*> >::Sort()
Line
Count
Source
410
1
  void Sort() {
411
1
    if (m_entries.size() > 1)
412
0
      std::stable_sort(m_entries.begin(), m_entries.end(),
413
0
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
0
                         if (a.base != b.base)
415
0
                           return a.base < b.base;
416
0
                         if (a.size != b.size)
417
0
                           return a.size < b.size;
418
0
                         return compare(a.data, b.data);
419
0
                       });
420
1
    if (!m_entries.empty())
421
0
      ComputeUpperBounds(0, m_entries.size());
422
1
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry, 0u, std::__1::less<SymbolFileDWARFDebugMap::OSOEntry> >::Sort()
Line
Count
Source
410
1.50k
  void Sort() {
411
1.50k
    if (m_entries.size() > 1)
412
1.24k
      std::stable_sort(m_entries.begin(), m_entries.end(),
413
1.24k
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
1.24k
                         if (a.base != b.base)
415
1.24k
                           return a.base < b.base;
416
1.24k
                         if (a.size != b.size)
417
1.24k
                           return a.size < b.size;
418
1.24k
                         return compare(a.data, b.data);
419
1.24k
                       });
420
1.50k
    if (!m_entries.empty())
421
1.50k
      ComputeUpperBounds(0, m_entries.size());
422
1.50k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned long long, 0u, std::__1::less<unsigned long long> >::Sort()
Line
Count
Source
410
1.47k
  void Sort() {
411
1.47k
    if (m_entries.size() > 1)
412
1.18k
      std::stable_sort(m_entries.begin(), m_entries.end(),
413
1.18k
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
1.18k
                         if (a.base != b.base)
415
1.18k
                           return a.base < b.base;
416
1.18k
                         if (a.size != b.size)
417
1.18k
                           return a.size < b.size;
418
1.18k
                         return compare(a.data, b.data);
419
1.18k
                       });
420
1.47k
    if (!m_entries.empty())
421
1.47k
      ComputeUpperBounds(0, m_entries.size());
422
1.47k
  }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int>, 0u, std::__1::less<std::__1::pair<unsigned int, unsigned int> > >::Sort()
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::Sort()
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>, 0u, std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> > >::Sort()
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, std::__1::less<unsigned int> >::Sort()
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> >::Sort()
Line
Count
Source
410
16
  void Sort() {
411
16
    if (m_entries.size() > 1)
412
5
      std::stable_sort(m_entries.begin(), m_entries.end(),
413
5
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
5
                         if (a.base != b.base)
415
5
                           return a.base < b.base;
416
5
                         if (a.size != b.size)
417
5
                           return a.size < b.size;
418
5
                         return compare(a.data, b.data);
419
5
                       });
420
16
    if (!m_entries.empty())
421
10
      ComputeUpperBounds(0, m_entries.size());
422
16
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::Bookmark> >::Sort()
Line
Count
Source
410
12
  void Sort() {
411
12
    if (m_entries.size() > 1)
412
4
      std::stable_sort(m_entries.begin(), m_entries.end(),
413
4
                       [&compare = m_compare](const Entry &a, const Entry &b) {
414
4
                         if (a.base != b.base)
415
4
                           return a.base < b.base;
416
4
                         if (a.size != b.size)
417
4
                           return a.size < b.size;
418
4
                         return compare(a.data, b.data);
419
4
                       });
420
12
    if (!m_entries.empty())
421
6
      ComputeUpperBounds(0, m_entries.size());
422
12
  }
423
424
#ifdef ASSERT_RANGEMAP_ARE_SORTED
425
  bool IsSorted() const {
426
    typename Collection::const_iterator pos, end, prev;
427
    for (pos = m_entries.begin(), end = m_entries.end(), prev = end; pos != end;
428
         prev = pos++) {
429
      if (prev != end && *pos < *prev)
430
        return false;
431
    }
432
    return true;
433
  }
434
#endif
435
436
5.18k
  void CombineConsecutiveEntriesWithEqualData() {
437
#ifdef ASSERT_RANGEMAP_ARE_SORTED
438
    assert(IsSorted());
439
#endif
440
5.18k
    typename Collection::iterator pos;
441
5.18k
    typename Collection::iterator end;
442
5.18k
    typename Collection::iterator prev;
443
5.18k
    bool can_combine = false;
444
    // First we determine if we can combine any of the Entry objects so we
445
    // don't end up allocating and making a new collection for no reason
446
73.1k
    for (pos = m_entries.begin(), end = m_entries.end(), prev = end; pos != end;
447
69.3k
         
prev = pos++67.9k
) {
448
69.3k
      if (prev != end && 
prev->data == pos->data64.1k
) {
449
1.34k
        can_combine = true;
450
1.34k
        break;
451
1.34k
      }
452
69.3k
    }
453
454
    // We we can combine at least one entry, then we make a new collection and
455
    // populate it accordingly, and then swap it into place.
456
5.18k
    if (can_combine) {
457
1.34k
      Collection minimal_ranges;
458
1.34k
      for (pos = m_entries.begin(), end = m_entries.end(), prev = end;
459
63.9k
           pos != end; 
prev = pos++62.6k
) {
460
62.6k
        if (prev != end && 
prev->data == pos->data61.2k
)
461
61.1k
          minimal_ranges.back().SetRangeEnd(pos->GetRangeEnd());
462
1.43k
        else
463
1.43k
          minimal_ranges.push_back(*pos);
464
62.6k
      }
465
      // Use the swap technique in case our new vector is much smaller. We must
466
      // swap when using the STL because std::vector objects never release or
467
      // reduce the memory once it has been allocated/reserved.
468
1.34k
      m_entries.swap(minimal_ranges);
469
1.34k
    }
470
5.18k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::CombineConsecutiveEntriesWithEqualData()
Line
Count
Source
436
5.18k
  void CombineConsecutiveEntriesWithEqualData() {
437
#ifdef ASSERT_RANGEMAP_ARE_SORTED
438
    assert(IsSorted());
439
#endif
440
5.18k
    typename Collection::iterator pos;
441
5.18k
    typename Collection::iterator end;
442
5.18k
    typename Collection::iterator prev;
443
5.18k
    bool can_combine = false;
444
    // First we determine if we can combine any of the Entry objects so we
445
    // don't end up allocating and making a new collection for no reason
446
73.1k
    for (pos = m_entries.begin(), end = m_entries.end(), prev = end; pos != end;
447
69.3k
         
prev = pos++67.9k
) {
448
69.3k
      if (prev != end && 
prev->data == pos->data64.1k
) {
449
1.34k
        can_combine = true;
450
1.34k
        break;
451
1.34k
      }
452
69.3k
    }
453
454
    // We we can combine at least one entry, then we make a new collection and
455
    // populate it accordingly, and then swap it into place.
456
5.18k
    if (can_combine) {
457
1.34k
      Collection minimal_ranges;
458
1.34k
      for (pos = m_entries.begin(), end = m_entries.end(), prev = end;
459
63.9k
           pos != end; 
prev = pos++62.6k
) {
460
62.6k
        if (prev != end && 
prev->data == pos->data61.2k
)
461
61.1k
          minimal_ranges.back().SetRangeEnd(pos->GetRangeEnd());
462
1.43k
        else
463
1.43k
          minimal_ranges.push_back(*pos);
464
62.6k
      }
465
      // Use the swap technique in case our new vector is much smaller. We must
466
      // swap when using the STL because std::vector objects never release or
467
      // reduce the memory once it has been allocated/reserved.
468
1.34k
      m_entries.swap(minimal_ranges);
469
1.34k
    }
470
5.18k
  }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::CombineConsecutiveEntriesWithEqualData()
471
472
2.20k
  void Clear() { m_entries.clear(); }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::Clear()
Line
Count
Source
472
1
  void Clear() { m_entries.clear(); }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::Clear()
Line
Count
Source
472
2.20k
  void Clear() { m_entries.clear(); }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int>, 0u, std::__1::less<std::__1::pair<unsigned int, unsigned int> > >::Clear()
473
474
58.8k
  bool IsEmpty() const { return m_entries.empty(); }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::IsEmpty() const
Line
Count
Source
474
58.8k
  bool IsEmpty() const { return m_entries.empty(); }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::IsEmpty() const
475
476
206k
  size_t GetSize() const { return m_entries.size(); }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::GetSize() const
Line
Count
Source
476
38.7k
  size_t GetSize() const { return m_entries.size(); }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::GetSize() const
Line
Count
Source
476
135k
  size_t GetSize() const { return m_entries.size(); }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned long long, 0u, std::__1::less<unsigned long long> >::GetSize() const
Line
Count
Source
476
33.0k
  size_t GetSize() const { return m_entries.size(); }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::GetSize() const
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>, 0u, std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> > >::GetSize() const
Line
Count
Source
476
2
  size_t GetSize() const { return m_entries.size(); }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, std::__1::less<unsigned int> >::GetSize() const
Line
Count
Source
476
9
  size_t GetSize() const { return m_entries.size(); }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> >::GetSize() const
Line
Count
Source
476
38
  size_t GetSize() const { return m_entries.size(); }
477
478
98.7k
  const Entry *GetEntryAtIndex(size_t i) const {
479
98.7k
    return ((i < m_entries.size()) ? &m_entries[i] : 
nullptr0
);
480
98.7k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::GetEntryAtIndex(unsigned long) const
Line
Count
Source
478
66.6k
  const Entry *GetEntryAtIndex(size_t i) const {
479
66.6k
    return ((i < m_entries.size()) ? &m_entries[i] : 
nullptr0
);
480
66.6k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned long long, 0u, std::__1::less<unsigned long long> >::GetEntryAtIndex(unsigned long) const
Line
Count
Source
478
32.1k
  const Entry *GetEntryAtIndex(size_t i) const {
479
32.1k
    return ((i < m_entries.size()) ? &m_entries[i] : 
nullptr0
);
480
32.1k
  }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::GetEntryAtIndex(unsigned long) const
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>, 0u, std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> > >::GetEntryAtIndex(unsigned long) const
Line
Count
Source
478
12
  const Entry *GetEntryAtIndex(size_t i) const {
479
12
    return ((i < m_entries.size()) ? &m_entries[i] : 
nullptr0
);
480
12
  }
481
482
273M
  Entry *GetMutableEntryAtIndex(size_t i) {
483
273M
    return ((i < m_entries.size()) ? &m_entries[i] : 
nullptr0
);
484
273M
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::GetMutableEntryAtIndex(unsigned long)
Line
Count
Source
482
273M
  Entry *GetMutableEntryAtIndex(size_t i) {
483
273M
    return ((i < m_entries.size()) ? &m_entries[i] : 
nullptr0
);
484
273M
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, std::__1::less<unsigned int> >::GetMutableEntryAtIndex(unsigned long)
Line
Count
Source
482
58
  Entry *GetMutableEntryAtIndex(size_t i) {
483
58
    return ((i < m_entries.size()) ? &m_entries[i] : 
nullptr0
);
484
58
  }
485
486
  // Clients must ensure that "i" is a valid index prior to calling this
487
  // function
488
298
  Entry &GetEntryRef(size_t i) { return m_entries[i]; }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::GetEntryRef(unsigned long)
Line
Count
Source
488
204
  Entry &GetEntryRef(size_t i) { return m_entries[i]; }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::GetEntryRef(unsigned long)
Line
Count
Source
488
21
  Entry &GetEntryRef(size_t i) { return m_entries[i]; }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> >::GetEntryRef(unsigned long)
Line
Count
Source
488
73
  Entry &GetEntryRef(size_t i) { return m_entries[i]; }
489
  const Entry &GetEntryRef(size_t i) const { return m_entries[i]; }
490
491
40.1M
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
492
40.1M
    return lhs.GetRangeBase() < rhs.GetRangeBase();
493
40.1M
  }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::BaseLessThan(lldb_private::RangeData<unsigned long long, unsigned int, unsigned int> const&, lldb_private::RangeData<unsigned long long, unsigned int, unsigned int> const&)
Line
Count
Source
491
315k
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
492
315k
    return lhs.GetRangeBase() < rhs.GetRangeBase();
493
315k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned long long, 0u, std::__1::less<unsigned long long> >::BaseLessThan(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned long long> const&, lldb_private::RangeData<unsigned long long, unsigned long long, unsigned long long> const&)
Line
Count
Source
491
376k
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
492
376k
    return lhs.GetRangeBase() < rhs.GetRangeBase();
493
376k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::BaseLessThan(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&, lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&)
Line
Count
Source
491
37.4M
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
492
37.4M
    return lhs.GetRangeBase() < rhs.GetRangeBase();
493
37.4M
  }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Variable*, 0u, std::__1::less<lldb_private::Variable*> >::BaseLessThan(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Variable*> const&, lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Variable*> const&)
lldb_private::RangeDataVector<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry, 0u, std::__1::less<SymbolFileDWARFDebugMap::OSOEntry> >::BaseLessThan(lldb_private::RangeData<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry> const&, lldb_private::RangeData<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry> const&)
Line
Count
Source
491
900k
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
492
900k
    return lhs.GetRangeBase() < rhs.GetRangeBase();
493
900k
  }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::BaseLessThan(lldb_private::RangeData<unsigned int, unsigned int, int> const&, lldb_private::RangeData<unsigned int, unsigned int, int> const&)
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int>, 0u, std::__1::less<std::__1::pair<unsigned int, unsigned int> > >::BaseLessThan(lldb_private::RangeData<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int> > const&, lldb_private::RangeData<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int> > const&)
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>, 0u, std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> > >::BaseLessThan(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long> > const&, lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long> > const&)
Line
Count
Source
491
1.12M
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
492
1.12M
    return lhs.GetRangeBase() < rhs.GetRangeBase();
493
1.12M
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> >::BaseLessThan(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> const&, lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> const&)
Line
Count
Source
491
47
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
492
47
    return lhs.GetRangeBase() < rhs.GetRangeBase();
493
47
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::Bookmark> >::BaseLessThan(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark> const&, lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark> const&)
Line
Count
Source
491
108
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
492
108
    return lhs.GetRangeBase() < rhs.GetRangeBase();
493
108
  }
494
495
40.2k
  uint32_t FindEntryIndexThatContains(B addr) const {
496
40.2k
    const AugmentedEntry *entry =
497
40.2k
        static_cast<const AugmentedEntry *>(FindEntryThatContains(addr));
498
40.2k
    if (entry)
499
40.2k
      return std::distance(m_entries.begin(), entry);
500
51
    return UINT32_MAX;
501
40.2k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry, 0u, std::__1::less<SymbolFileDWARFDebugMap::OSOEntry> >::FindEntryIndexThatContains(unsigned long long) const
Line
Count
Source
495
40.1k
  uint32_t FindEntryIndexThatContains(B addr) const {
496
40.1k
    const AugmentedEntry *entry =
497
40.1k
        static_cast<const AugmentedEntry *>(FindEntryThatContains(addr));
498
40.1k
    if (entry)
499
40.1k
      return std::distance(m_entries.begin(), entry);
500
0
    return UINT32_MAX;
501
40.1k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> >::FindEntryIndexThatContains(unsigned long long) const
Line
Count
Source
495
72
  uint32_t FindEntryIndexThatContains(B addr) const {
496
72
    const AugmentedEntry *entry =
497
72
        static_cast<const AugmentedEntry *>(FindEntryThatContains(addr));
498
72
    if (entry)
499
21
      return std::distance(m_entries.begin(), entry);
500
51
    return UINT32_MAX;
501
72
  }
502
503
46.2k
  uint32_t FindEntryIndexesThatContain(B addr, std::vector<uint32_t> &indexes) {
504
#ifdef ASSERT_RANGEMAP_ARE_SORTED
505
    assert(IsSorted());
506
#endif
507
46.2k
    if (!m_entries.empty())
508
46.1k
      FindEntryIndexesThatContain(addr, 0, m_entries.size(), indexes);
509
510
46.2k
    return indexes.size();
511
46.2k
  }
512
513
3.00M
  Entry *FindEntryThatContains(B addr) {
514
3.00M
    return const_cast<Entry *>(
515
3.00M
        static_cast<const RangeDataVector *>(this)->FindEntryThatContains(
516
3.00M
            addr));
517
3.00M
  }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::FindEntryThatContains(unsigned long long)
Line
Count
Source
513
387
  Entry *FindEntryThatContains(B addr) {
514
387
    return const_cast<Entry *>(
515
387
        static_cast<const RangeDataVector *>(this)->FindEntryThatContains(
516
387
            addr));
517
387
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::FindEntryThatContains(unsigned long long)
Line
Count
Source
513
2.61M
  Entry *FindEntryThatContains(B addr) {
514
2.61M
    return const_cast<Entry *>(
515
2.61M
        static_cast<const RangeDataVector *>(this)->FindEntryThatContains(
516
2.61M
            addr));
517
2.61M
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Variable*, 0u, std::__1::less<lldb_private::Variable*> >::FindEntryThatContains(unsigned long long)
Line
Count
Source
513
2
  Entry *FindEntryThatContains(B addr) {
514
2
    return const_cast<Entry *>(
515
2
        static_cast<const RangeDataVector *>(this)->FindEntryThatContains(
516
2
            addr));
517
2
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry, 0u, std::__1::less<SymbolFileDWARFDebugMap::OSOEntry> >::FindEntryThatContains(unsigned long long)
Line
Count
Source
513
104k
  Entry *FindEntryThatContains(B addr) {
514
104k
    return const_cast<Entry *>(
515
104k
        static_cast<const RangeDataVector *>(this)->FindEntryThatContains(
516
104k
            addr));
517
104k
  }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::FindEntryThatContains(unsigned int)
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int>, 0u, std::__1::less<std::__1::pair<unsigned int, unsigned int> > >::FindEntryThatContains(unsigned long long)
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>, 0u, std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> > >::FindEntryThatContains(unsigned long long)
Line
Count
Source
513
291k
  Entry *FindEntryThatContains(B addr) {
514
291k
    return const_cast<Entry *>(
515
291k
        static_cast<const RangeDataVector *>(this)->FindEntryThatContains(
516
291k
            addr));
517
291k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::Bookmark> >::FindEntryThatContains(unsigned long long)
Line
Count
Source
513
57
  Entry *FindEntryThatContains(B addr) {
514
57
    return const_cast<Entry *>(
515
57
        static_cast<const RangeDataVector *>(this)->FindEntryThatContains(
516
57
            addr));
517
57
  }
518
519
3.23M
  const Entry *FindEntryThatContains(B addr) const {
520
3.23M
    return FindEntryThatContains(Entry(addr, 1));
521
3.23M
  }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::FindEntryThatContains(unsigned long long) const
Line
Count
Source
519
130k
  const Entry *FindEntryThatContains(B addr) const {
520
130k
    return FindEntryThatContains(Entry(addr, 1));
521
130k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned long long, 0u, std::__1::less<unsigned long long> >::FindEntryThatContains(unsigned long long) const
Line
Count
Source
519
56.5k
  const Entry *FindEntryThatContains(B addr) const {
520
56.5k
    return FindEntryThatContains(Entry(addr, 1));
521
56.5k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::FindEntryThatContains(unsigned long long) const
Line
Count
Source
519
2.61M
  const Entry *FindEntryThatContains(B addr) const {
520
2.61M
    return FindEntryThatContains(Entry(addr, 1));
521
2.61M
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Variable*, 0u, std::__1::less<lldb_private::Variable*> >::FindEntryThatContains(unsigned long long) const
Line
Count
Source
519
2
  const Entry *FindEntryThatContains(B addr) const {
520
2
    return FindEntryThatContains(Entry(addr, 1));
521
2
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry, 0u, std::__1::less<SymbolFileDWARFDebugMap::OSOEntry> >::FindEntryThatContains(unsigned long long) const
Line
Count
Source
519
144k
  const Entry *FindEntryThatContains(B addr) const {
520
144k
    return FindEntryThatContains(Entry(addr, 1));
521
144k
  }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::FindEntryThatContains(unsigned int) const
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int>, 0u, std::__1::less<std::__1::pair<unsigned int, unsigned int> > >::FindEntryThatContains(unsigned long long) const
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>, 0u, std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> > >::FindEntryThatContains(unsigned long long) const
Line
Count
Source
519
291k
  const Entry *FindEntryThatContains(B addr) const {
520
291k
    return FindEntryThatContains(Entry(addr, 1));
521
291k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> >::FindEntryThatContains(unsigned long long) const
Line
Count
Source
519
72
  const Entry *FindEntryThatContains(B addr) const {
520
72
    return FindEntryThatContains(Entry(addr, 1));
521
72
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::Bookmark> >::FindEntryThatContains(unsigned long long) const
Line
Count
Source
519
57
  const Entry *FindEntryThatContains(B addr) const {
520
57
    return FindEntryThatContains(Entry(addr, 1));
521
57
  }
522
523
3.23M
  const Entry *FindEntryThatContains(const Entry &range) const {
524
#ifdef ASSERT_RANGEMAP_ARE_SORTED
525
    assert(IsSorted());
526
#endif
527
3.23M
    if (!m_entries.empty()) {
528
3.23M
      typename Collection::const_iterator begin = m_entries.begin();
529
3.23M
      typename Collection::const_iterator end = m_entries.end();
530
3.23M
      typename Collection::const_iterator pos =
531
3.23M
          std::lower_bound(begin, end, range, BaseLessThan);
532
533
5.94M
      while (pos != begin && 
pos[-1].Contains(range)5.80M
)
534
2.70M
        --pos;
535
536
3.23M
      if (pos != end && 
pos->Contains(range)3.23M
)
537
3.23M
        return &(*pos);
538
3.23M
    }
539
5.86k
    return nullptr;
540
3.23M
  }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::FindEntryThatContains(lldb_private::RangeData<unsigned long long, unsigned int, unsigned int> const&) const
Line
Count
Source
523
130k
  const Entry *FindEntryThatContains(const Entry &range) const {
524
#ifdef ASSERT_RANGEMAP_ARE_SORTED
525
    assert(IsSorted());
526
#endif
527
130k
    if (!m_entries.empty()) {
528
130k
      typename Collection::const_iterator begin = m_entries.begin();
529
130k
      typename Collection::const_iterator end = m_entries.end();
530
130k
      typename Collection::const_iterator pos =
531
130k
          std::lower_bound(begin, end, range, BaseLessThan);
532
533
242k
      while (pos != begin && 
pos[-1].Contains(range)145k
)
534
111k
        --pos;
535
536
130k
      if (pos != end && 
pos->Contains(range)130k
)
537
128k
        return &(*pos);
538
130k
    }
539
2.25k
    return nullptr;
540
130k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned long long, 0u, std::__1::less<unsigned long long> >::FindEntryThatContains(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned long long> const&) const
Line
Count
Source
523
56.5k
  const Entry *FindEntryThatContains(const Entry &range) const {
524
#ifdef ASSERT_RANGEMAP_ARE_SORTED
525
    assert(IsSorted());
526
#endif
527
56.5k
    if (!m_entries.empty()) {
528
56.5k
      typename Collection::const_iterator begin = m_entries.begin();
529
56.5k
      typename Collection::const_iterator end = m_entries.end();
530
56.5k
      typename Collection::const_iterator pos =
531
56.5k
          std::lower_bound(begin, end, range, BaseLessThan);
532
533
69.5k
      while (pos != begin && 
pos[-1].Contains(range)60.1k
)
534
12.9k
        --pos;
535
536
56.5k
      if (pos != end && 
pos->Contains(range)56.5k
)
537
56.5k
        return &(*pos);
538
56.5k
    }
539
16
    return nullptr;
540
56.5k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::FindEntryThatContains(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&) const
Line
Count
Source
523
2.61M
  const Entry *FindEntryThatContains(const Entry &range) const {
524
#ifdef ASSERT_RANGEMAP_ARE_SORTED
525
    assert(IsSorted());
526
#endif
527
2.61M
    if (!m_entries.empty()) {
528
2.61M
      typename Collection::const_iterator begin = m_entries.begin();
529
2.61M
      typename Collection::const_iterator end = m_entries.end();
530
2.61M
      typename Collection::const_iterator pos =
531
2.61M
          std::lower_bound(begin, end, range, BaseLessThan);
532
533
4.86M
      while (pos != begin && 
pos[-1].Contains(range)4.86M
)
534
2.25M
        --pos;
535
536
2.61M
      if (pos != end && 
pos->Contains(range)2.61M
)
537
2.61M
        return &(*pos);
538
2.61M
    }
539
1.40k
    return nullptr;
540
2.61M
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Variable*, 0u, std::__1::less<lldb_private::Variable*> >::FindEntryThatContains(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Variable*> const&) const
Line
Count
Source
523
2
  const Entry *FindEntryThatContains(const Entry &range) const {
524
#ifdef ASSERT_RANGEMAP_ARE_SORTED
525
    assert(IsSorted());
526
#endif
527
2
    if (!m_entries.empty()) {
528
0
      typename Collection::const_iterator begin = m_entries.begin();
529
0
      typename Collection::const_iterator end = m_entries.end();
530
0
      typename Collection::const_iterator pos =
531
0
          std::lower_bound(begin, end, range, BaseLessThan);
532
533
0
      while (pos != begin && pos[-1].Contains(range))
534
0
        --pos;
535
536
0
      if (pos != end && pos->Contains(range))
537
0
        return &(*pos);
538
0
    }
539
2
    return nullptr;
540
2
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry, 0u, std::__1::less<SymbolFileDWARFDebugMap::OSOEntry> >::FindEntryThatContains(lldb_private::RangeData<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry> const&) const
Line
Count
Source
523
144k
  const Entry *FindEntryThatContains(const Entry &range) const {
524
#ifdef ASSERT_RANGEMAP_ARE_SORTED
525
    assert(IsSorted());
526
#endif
527
144k
    if (!m_entries.empty()) {
528
144k
      typename Collection::const_iterator begin = m_entries.begin();
529
144k
      typename Collection::const_iterator end = m_entries.end();
530
144k
      typename Collection::const_iterator pos =
531
144k
          std::lower_bound(begin, end, range, BaseLessThan);
532
533
178k
      while (pos != begin && 
pos[-1].Contains(range)148k
)
534
33.8k
        --pos;
535
536
144k
      if (pos != end && 
pos->Contains(range)144k
)
537
142k
        return &(*pos);
538
144k
    }
539
2.03k
    return nullptr;
540
144k
  }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::FindEntryThatContains(lldb_private::RangeData<unsigned int, unsigned int, int> const&) const
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int>, 0u, std::__1::less<std::__1::pair<unsigned int, unsigned int> > >::FindEntryThatContains(lldb_private::RangeData<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int> > const&) const
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>, 0u, std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> > >::FindEntryThatContains(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long> > const&) const
Line
Count
Source
523
291k
  const Entry *FindEntryThatContains(const Entry &range) const {
524
#ifdef ASSERT_RANGEMAP_ARE_SORTED
525
    assert(IsSorted());
526
#endif
527
291k
    if (!m_entries.empty()) {
528
291k
      typename Collection::const_iterator begin = m_entries.begin();
529
291k
      typename Collection::const_iterator end = m_entries.end();
530
291k
      typename Collection::const_iterator pos =
531
291k
          std::lower_bound(begin, end, range, BaseLessThan);
532
533
582k
      while (pos != begin && 
pos[-1].Contains(range)582k
)
534
291k
        --pos;
535
536
291k
      if (pos != end && 
pos->Contains(range)291k
)
537
291k
        return &(*pos);
538
291k
    }
539
78
    return nullptr;
540
291k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> >::FindEntryThatContains(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> const&) const
Line
Count
Source
523
72
  const Entry *FindEntryThatContains(const Entry &range) const {
524
#ifdef ASSERT_RANGEMAP_ARE_SORTED
525
    assert(IsSorted());
526
#endif
527
72
    if (!m_entries.empty()) {
528
23
      typename Collection::const_iterator begin = m_entries.begin();
529
23
      typename Collection::const_iterator end = m_entries.end();
530
23
      typename Collection::const_iterator pos =
531
23
          std::lower_bound(begin, end, range, BaseLessThan);
532
533
37
      while (pos != begin && 
pos[-1].Contains(range)26
)
534
14
        --pos;
535
536
23
      if (pos != end && 
pos->Contains(range)21
)
537
21
        return &(*pos);
538
23
    }
539
51
    return nullptr;
540
72
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::Bookmark> >::FindEntryThatContains(lldb_private::RangeData<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark> const&) const
Line
Count
Source
523
57
  const Entry *FindEntryThatContains(const Entry &range) const {
524
#ifdef ASSERT_RANGEMAP_ARE_SORTED
525
    assert(IsSorted());
526
#endif
527
57
    if (!m_entries.empty()) {
528
38
      typename Collection::const_iterator begin = m_entries.begin();
529
38
      typename Collection::const_iterator end = m_entries.end();
530
38
      typename Collection::const_iterator pos =
531
38
          std::lower_bound(begin, end, range, BaseLessThan);
532
533
38
      while (pos != begin && 
pos[-1].Contains(range)25
)
534
0
        --pos;
535
536
38
      if (pos != end && 
pos->Contains(range)37
)
537
37
        return &(*pos);
538
38
    }
539
20
    return nullptr;
540
57
  }
541
542
204
  const Entry *FindEntryStartsAt(B addr) const {
543
#ifdef ASSERT_RANGEMAP_ARE_SORTED
544
    assert(IsSorted());
545
#endif
546
204
    if (!m_entries.empty()) {
547
202
      auto begin = m_entries.begin(), end = m_entries.end();
548
202
      auto pos = std::lower_bound(begin, end, Entry(addr, 1), BaseLessThan);
549
202
      if (pos != end && 
pos->base == addr196
)
550
162
        return &(*pos);
551
202
    }
552
42
    return nullptr;
553
204
  }
554
555
  // This method will return the entry that contains the given address, or the
556
  // entry following that address.  If you give it an address of 0 and the
557
  // first entry starts at address 0x100, you will get the entry at 0x100.
558
  //
559
  // For most uses, FindEntryThatContains is the correct one to use, this is a
560
  // less commonly needed behavior.  It was added for core file memory regions,
561
  // where we want to present a gap in the memory regions as a distinct region,
562
  // so we need to know the start address of the next memory section that
563
  // exists.
564
9.10k
  const Entry *FindEntryThatContainsOrFollows(B addr) const {
565
#ifdef ASSERT_RANGEMAP_ARE_SORTED
566
    assert(IsSorted());
567
#endif
568
9.10k
    if (!m_entries.empty()) {
569
9.10k
      typename Collection::const_iterator begin = m_entries.begin();
570
9.10k
      typename Collection::const_iterator end = m_entries.end();
571
9.10k
      typename Collection::const_iterator pos =
572
9.10k
          std::lower_bound(m_entries.begin(), end, addr,
573
44.8k
                           [](const Entry &lhs, B rhs_base) -> bool {
574
44.8k
                             return lhs.GetRangeEnd() <= rhs_base;
575
44.8k
                           });
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::FindEntryThatContainsOrFollows(unsigned long long) const::'lambda'(lldb_private::RangeData<unsigned long long, unsigned int, unsigned int> const&, unsigned long long)::operator()(lldb_private::RangeData<unsigned long long, unsigned int, unsigned int> const&, unsigned long long) const
Line
Count
Source
573
39.3k
                           [](const Entry &lhs, B rhs_base) -> bool {
574
39.3k
                             return lhs.GetRangeEnd() <= rhs_base;
575
39.3k
                           });
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, std::__1::less<unsigned int> >::FindEntryThatContainsOrFollows(unsigned long long) const::'lambda'(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&, unsigned long long)::operator()(lldb_private::RangeData<unsigned long long, unsigned long long, unsigned int> const&, unsigned long long) const
Line
Count
Source
573
5.42k
                           [](const Entry &lhs, B rhs_base) -> bool {
574
5.42k
                             return lhs.GetRangeEnd() <= rhs_base;
575
5.42k
                           });
576
577
9.10k
      while (pos != begin && 
pos[-1].Contains(addr)3.92k
)
578
0
        --pos;
579
580
9.10k
      if (pos != end)
581
8.98k
        return &(*pos);
582
9.10k
    }
583
121
    return nullptr;
584
9.10k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::FindEntryThatContainsOrFollows(unsigned long long) const
Line
Count
Source
564
7.87k
  const Entry *FindEntryThatContainsOrFollows(B addr) const {
565
#ifdef ASSERT_RANGEMAP_ARE_SORTED
566
    assert(IsSorted());
567
#endif
568
7.87k
    if (!m_entries.empty()) {
569
7.87k
      typename Collection::const_iterator begin = m_entries.begin();
570
7.87k
      typename Collection::const_iterator end = m_entries.end();
571
7.87k
      typename Collection::const_iterator pos =
572
7.87k
          std::lower_bound(m_entries.begin(), end, addr,
573
7.87k
                           [](const Entry &lhs, B rhs_base) -> bool {
574
7.87k
                             return lhs.GetRangeEnd() <= rhs_base;
575
7.87k
                           });
576
577
7.87k
      while (pos != begin && 
pos[-1].Contains(addr)2.84k
)
578
0
        --pos;
579
580
7.87k
      if (pos != end)
581
7.79k
        return &(*pos);
582
7.87k
    }
583
74
    return nullptr;
584
7.87k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, std::__1::less<unsigned int> >::FindEntryThatContainsOrFollows(unsigned long long) const
Line
Count
Source
564
1.23k
  const Entry *FindEntryThatContainsOrFollows(B addr) const {
565
#ifdef ASSERT_RANGEMAP_ARE_SORTED
566
    assert(IsSorted());
567
#endif
568
1.23k
    if (!m_entries.empty()) {
569
1.22k
      typename Collection::const_iterator begin = m_entries.begin();
570
1.22k
      typename Collection::const_iterator end = m_entries.end();
571
1.22k
      typename Collection::const_iterator pos =
572
1.22k
          std::lower_bound(m_entries.begin(), end, addr,
573
1.22k
                           [](const Entry &lhs, B rhs_base) -> bool {
574
1.22k
                             return lhs.GetRangeEnd() <= rhs_base;
575
1.22k
                           });
576
577
1.22k
      while (pos != begin && 
pos[-1].Contains(addr)1.08k
)
578
0
        --pos;
579
580
1.22k
      if (pos != end)
581
1.18k
        return &(*pos);
582
1.22k
    }
583
47
    return nullptr;
584
1.23k
  }
585
586
898
  Entry *Back() { return (m_entries.empty() ? 
nullptr52
:
&m_entries.back()846
); }
587
588
  const Entry *Back() const {
589
    return (m_entries.empty() ? nullptr : &m_entries.back());
590
  }
591
592
protected:
593
  Collection m_entries;
594
  Compare m_compare;
595
596
private:
597
  // Compute extra information needed for search
598
338M
  B ComputeUpperBounds(size_t lo, size_t hi) {
599
338M
    size_t mid = (lo + hi) / 2;
600
338M
    AugmentedEntry &entry = m_entries[mid];
601
602
338M
    entry.upper_bound = entry.base + entry.size;
603
604
338M
    if (lo < mid)
605
199M
      entry.upper_bound =
606
199M
          std::max(entry.upper_bound, ComputeUpperBounds(lo, mid));
607
608
338M
    if (mid + 1 < hi)
609
139M
      entry.upper_bound =
610
139M
          std::max(entry.upper_bound, ComputeUpperBounds(mid + 1, hi));
611
612
338M
    return entry.upper_bound;
613
338M
  }
lldb_private::RangeDataVector<unsigned long long, unsigned int, unsigned int, 0u, std::__1::less<unsigned int> >::ComputeUpperBounds(unsigned long, unsigned long)
Line
Count
Source
598
384k
  B ComputeUpperBounds(size_t lo, size_t hi) {
599
384k
    size_t mid = (lo + hi) / 2;
600
384k
    AugmentedEntry &entry = m_entries[mid];
601
602
384k
    entry.upper_bound = entry.base + entry.size;
603
604
384k
    if (lo < mid)
605
221k
      entry.upper_bound =
606
221k
          std::max(entry.upper_bound, ComputeUpperBounds(lo, mid));
607
608
384k
    if (mid + 1 < hi)
609
151k
      entry.upper_bound =
610
151k
          std::max(entry.upper_bound, ComputeUpperBounds(mid + 1, hi));
611
612
384k
    return entry.upper_bound;
613
384k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, lldb_private::Symtab::FileRangeToIndexMapCompare>::ComputeUpperBounds(unsigned long, unsigned long)
Line
Count
Source
598
338M
  B ComputeUpperBounds(size_t lo, size_t hi) {
599
338M
    size_t mid = (lo + hi) / 2;
600
338M
    AugmentedEntry &entry = m_entries[mid];
601
602
338M
    entry.upper_bound = entry.base + entry.size;
603
604
338M
    if (lo < mid)
605
199M
      entry.upper_bound =
606
199M
          std::max(entry.upper_bound, ComputeUpperBounds(lo, mid));
607
608
338M
    if (mid + 1 < hi)
609
139M
      entry.upper_bound =
610
139M
          std::max(entry.upper_bound, ComputeUpperBounds(mid + 1, hi));
611
612
338M
    return entry.upper_bound;
613
338M
  }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Variable*, 0u, std::__1::less<lldb_private::Variable*> >::ComputeUpperBounds(unsigned long, unsigned long)
lldb_private::RangeDataVector<unsigned long long, unsigned long long, SymbolFileDWARFDebugMap::OSOEntry, 0u, std::__1::less<SymbolFileDWARFDebugMap::OSOEntry> >::ComputeUpperBounds(unsigned long, unsigned long)
Line
Count
Source
598
46.5k
  B ComputeUpperBounds(size_t lo, size_t hi) {
599
46.5k
    size_t mid = (lo + hi) / 2;
600
46.5k
    AugmentedEntry &entry = m_entries[mid];
601
602
46.5k
    entry.upper_bound = entry.base + entry.size;
603
604
46.5k
    if (lo < mid)
605
26.7k
      entry.upper_bound =
606
26.7k
          std::max(entry.upper_bound, ComputeUpperBounds(lo, mid));
607
608
46.5k
    if (mid + 1 < hi)
609
18.2k
      entry.upper_bound =
610
18.2k
          std::max(entry.upper_bound, ComputeUpperBounds(mid + 1, hi));
611
612
46.5k
    return entry.upper_bound;
613
46.5k
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned long long, 0u, std::__1::less<unsigned long long> >::ComputeUpperBounds(unsigned long, unsigned long)
Line
Count
Source
598
40.1k
  B ComputeUpperBounds(size_t lo, size_t hi) {
599
40.1k
    size_t mid = (lo + hi) / 2;
600
40.1k
    AugmentedEntry &entry = m_entries[mid];
601
602
40.1k
    entry.upper_bound = entry.base + entry.size;
603
604
40.1k
    if (lo < mid)
605
23.1k
      entry.upper_bound =
606
23.1k
          std::max(entry.upper_bound, ComputeUpperBounds(lo, mid));
607
608
40.1k
    if (mid + 1 < hi)
609
15.5k
      entry.upper_bound =
610
15.5k
          std::max(entry.upper_bound, ComputeUpperBounds(mid + 1, hi));
611
612
40.1k
    return entry.upper_bound;
613
40.1k
  }
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned int, std::__1::pair<unsigned int, unsigned int>, 0u, std::__1::less<std::__1::pair<unsigned int, unsigned int> > >::ComputeUpperBounds(unsigned long, unsigned long)
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned int, unsigned int, int, 0u, std::__1::less<int> >::ComputeUpperBounds(unsigned long, unsigned long)
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::Range<unsigned long long, unsigned long long>, 0u, std::__1::less<lldb_private::Range<unsigned long long, unsigned long long> > >::ComputeUpperBounds(unsigned long, unsigned long)
Unexecuted instantiation: lldb_private::RangeDataVector<unsigned long long, unsigned long long, unsigned int, 0u, std::__1::less<unsigned int> >::ComputeUpperBounds(unsigned long, unsigned long)
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::CompUnitData, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::CompUnitData> >::ComputeUpperBounds(unsigned long, unsigned long)
Line
Count
Source
598
24
  B ComputeUpperBounds(size_t lo, size_t hi) {
599
24
    size_t mid = (lo + hi) / 2;
600
24
    AugmentedEntry &entry = m_entries[mid];
601
602
24
    entry.upper_bound = entry.base + entry.size;
603
604
24
    if (lo < mid)
605
9
      entry.upper_bound =
606
9
          std::max(entry.upper_bound, ComputeUpperBounds(lo, mid));
607
608
24
    if (mid + 1 < hi)
609
5
      entry.upper_bound =
610
5
          std::max(entry.upper_bound, ComputeUpperBounds(mid + 1, hi));
611
612
24
    return entry.upper_bound;
613
24
  }
lldb_private::RangeDataVector<unsigned long long, unsigned long long, lldb_private::breakpad::SymbolFileBreakpad::Bookmark, 0u, std::__1::less<lldb_private::breakpad::SymbolFileBreakpad::Bookmark> >::ComputeUpperBounds(unsigned long, unsigned long)
Line
Count
Source
598
29
  B ComputeUpperBounds(size_t lo, size_t hi) {
599
29
    size_t mid = (lo + hi) / 2;
600
29
    AugmentedEntry &entry = m_entries[mid];
601
602
29
    entry.upper_bound = entry.base + entry.size;
603
604
29
    if (lo < mid)
605
13
      entry.upper_bound =
606
13
          std::max(entry.upper_bound, ComputeUpperBounds(lo, mid));
607
608
29
    if (mid + 1 < hi)
609
10
      entry.upper_bound =
610
10
          std::max(entry.upper_bound, ComputeUpperBounds(mid + 1, hi));
611
612
29
    return entry.upper_bound;
613
29
  }
614
615
  // This is based on the augmented tree implementation found at
616
  // https://en.wikipedia.org/wiki/Interval_tree#Augmented_tree
617
  void FindEntryIndexesThatContain(B addr, size_t lo, size_t hi,
618
473k
                                   std::vector<uint32_t> &indexes) {
619
473k
    size_t mid = (lo + hi) / 2;
620
473k
    const AugmentedEntry &entry = m_entries[mid];
621
622
    // addr is greater than the rightmost point of any interval below mid
623
    // so there are cannot be any matches.
624
473k
    if (addr > entry.upper_bound)
625
100k
      return;
626
627
    // Recursively search left subtree
628
372k
    if (lo < mid)
629
330k
      FindEntryIndexesThatContain(addr, lo, mid, indexes);
630
631
    // If addr is smaller than the start of the current interval it
632
    // cannot contain it nor can any of its right subtree.
633
372k
    if (addr < entry.base)
634
242k
      return;
635
636
130k
    if (entry.Contains(addr))
637
44.5k
      indexes.push_back(entry.data);
638
639
    // Recursively search right subtree
640
130k
    if (mid + 1 < hi)
641
96.8k
      FindEntryIndexesThatContain(addr, mid + 1, hi, indexes);
642
130k
  }
643
};
644
645
// A simple range  with data class where you get to define the type of
646
// the range base "B", the type used for the range byte size "S", and the type
647
// for the associated data "T".
648
template <typename B, typename T> struct AddressData {
649
  typedef B BaseType;
650
  typedef T DataType;
651
652
  BaseType addr;
653
  DataType data;
654
655
141M
  AddressData() : addr(), data() {}
656
657
  AddressData(B a, DataType d) : addr(a), data(d) {}
658
659
  bool operator<(const AddressData &rhs) const {
660
    if (this->addr == rhs.addr)
661
      return this->data < rhs.data;
662
    return this->addr < rhs.addr;
663
  }
664
665
  bool operator==(const AddressData &rhs) const {
666
    return this->addr == rhs.addr && this->data == rhs.data;
667
  }
668
669
  bool operator!=(const AddressData &rhs) const {
670
    return this->addr != rhs.addr || this->data == rhs.data;
671
  }
672
};
673
674
template <typename B, typename T, unsigned N> class AddressDataArray {
675
public:
676
  typedef AddressData<B, T> Entry;
677
  typedef llvm::SmallVector<Entry, N> Collection;
678
679
135k
  AddressDataArray() = default;
680
681
135k
  ~AddressDataArray() = default;
682
683
99.6M
  void Append(const Entry &entry) { m_entries.push_back(entry); }
684
685
  void Sort() {
686
    if (m_entries.size() > 1)
687
      std::stable_sort(m_entries.begin(), m_entries.end());
688
  }
689
690
#ifdef ASSERT_RANGEMAP_ARE_SORTED
691
  bool IsSorted() const {
692
    typename Collection::const_iterator pos, end, prev;
693
    // First we determine if we can combine any of the Entry objects so we
694
    // don't end up allocating and making a new collection for no reason
695
    for (pos = m_entries.begin(), end = m_entries.end(), prev = end; pos != end;
696
         prev = pos++) {
697
      if (prev != end && *pos < *prev)
698
        return false;
699
    }
700
    return true;
701
  }
702
#endif
703
704
  void Clear() { m_entries.clear(); }
705
706
  bool IsEmpty() const { return m_entries.empty(); }
707
708
135k
  size_t GetSize() const { return m_entries.size(); }
709
710
19.9M
  const Entry *GetEntryAtIndex(size_t i) const {
711
19.9M
    return ((i < m_entries.size()) ? &m_entries[i] : 
nullptr0
);
712
19.9M
  }
713
714
  // Clients must ensure that "i" is a valid index prior to calling this
715
  // function
716
99.6M
  const Entry &GetEntryRef(size_t i) const { return m_entries[i]; }
717
718
1.65G
  static bool BaseLessThan(const Entry &lhs, const Entry &rhs) {
719
1.65G
    return lhs.addr < rhs.addr;
720
1.65G
  }
721
722
141M
  Entry *FindEntry(B addr, bool exact_match_only) {
723
#ifdef ASSERT_RANGEMAP_ARE_SORTED
724
    assert(IsSorted());
725
#endif
726
141M
    if (!m_entries.empty()) {
727
141M
      Entry entry;
728
141M
      entry.addr = addr;
729
141M
      typename Collection::iterator begin = m_entries.begin();
730
141M
      typename Collection::iterator end = m_entries.end();
731
141M
      typename Collection::iterator pos =
732
141M
          std::lower_bound(begin, end, entry, BaseLessThan);
733
734
141M
      while (pos != begin && 
pos[-1].addr == addr141M
)
735
0
        --pos;
736
737
141M
      if (pos != end) {
738
89.4M
        if (pos->addr == addr || 
!exact_match_only2.65k
)
739
89.4M
          return &(*pos);
740
89.4M
      }
741
141M
    }
742
51.9M
    return nullptr;
743
141M
  }
744
745
102M
  const Entry *FindNextEntry(const Entry *entry) {
746
102M
    if (entry >= &*m_entries.begin() && entry + 1 < &*m_entries.end())
747
102M
      return entry + 1;
748
133k
    return nullptr;
749
102M
  }
750
751
  Entry *Back() { return (m_entries.empty() ? nullptr : &m_entries.back()); }
752
753
  const Entry *Back() const {
754
    return (m_entries.empty() ? nullptr : &m_entries.back());
755
  }
756
757
protected:
758
  Collection m_entries;
759
};
760
761
} // namespace lldb_private
762
763
#endif // LLDB_UTILITY_RANGEMAP_H