summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/base/addr_range_map.hh35
1 files changed, 28 insertions, 7 deletions
diff --git a/src/base/addr_range_map.hh b/src/base/addr_range_map.hh
index f43671ce5..2f93ec77d 100644
--- a/src/base/addr_range_map.hh
+++ b/src/base/addr_range_map.hh
@@ -83,6 +83,11 @@ class AddrRangeMap
{
return find(r, [r](const AddrRange r1) { return r.isSubset(r1); });
}
+ iterator
+ contains(const AddrRange &r)
+ {
+ return find(r, [r](const AddrRange r1) { return r.isSubset(r1); });
+ }
/**
* Find entry that contains the given address
@@ -99,6 +104,11 @@ class AddrRangeMap
{
return contains(RangeSize(r, 1));
}
+ iterator
+ contains(Addr r)
+ {
+ return contains(RangeSize(r, 1));
+ }
/**
* Find entry that intersects with the given address range
@@ -115,8 +125,13 @@ class AddrRangeMap
{
return find(r, [r](const AddrRange r1) { return r.intersects(r1); });
}
+ iterator
+ intersects(const AddrRange &r)
+ {
+ return find(r, [r](const AddrRange r1) { return r.intersects(r1); });
+ }
- const_iterator
+ iterator
insert(const AddrRange &r, const V& d)
{
if (intersects(r) != end())
@@ -191,7 +206,7 @@ class AddrRangeMap
* @param it Iterator to the entry in the address range map
*/
void
- addNewEntryToCache(const_iterator it) const
+ addNewEntryToCache(iterator it) const
{
if (max_cache_size != 0) {
// If there's a cache, add this element to it.
@@ -221,8 +236,8 @@ class AddrRangeMap
* @param f A condition on an address range
* @return An iterator that contains the input address range
*/
- const_iterator
- find(const AddrRange &r, std::function<bool(const AddrRange)> cond) const
+ iterator
+ find(const AddrRange &r, std::function<bool(const AddrRange)> cond)
{
// Check the cache first
for (auto c = cache.begin(); c != cache.end(); c++) {
@@ -235,7 +250,7 @@ class AddrRangeMap
}
}
- const_iterator next = tree.upper_bound(r);
+ iterator next = tree.upper_bound(r);
if (next != end() && cond(next->first)) {
addNewEntryToCache(next);
return next;
@@ -244,7 +259,7 @@ class AddrRangeMap
return end();
next--;
- const_iterator i;
+ iterator i;
do {
i = next;
if (cond(i->first)) {
@@ -258,6 +273,12 @@ class AddrRangeMap
return end();
}
+ const_iterator
+ find(const AddrRange &r, std::function<bool(const AddrRange)> cond) const
+ {
+ return const_cast<AddrRangeMap *>(this)->find(r, cond);
+ }
+
RangeMap tree;
/**
@@ -266,7 +287,7 @@ class AddrRangeMap
* used to optimize lookups. The elements in the list should
* always be valid iterators of the tree.
*/
- mutable std::list<const_iterator> cache;
+ mutable std::list<iterator> cache;
};
#endif //__BASE_ADDR_RANGE_MAP_HH__