aboutsummaryrefslogtreecommitdiff
path: root/src/processor/range_map.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/processor/range_map.h')
-rw-r--r--src/processor/range_map.h71
1 files changed, 2 insertions, 69 deletions
diff --git a/src/processor/range_map.h b/src/processor/range_map.h
index 1395c924..06015c98 100644
--- a/src/processor/range_map.h
+++ b/src/processor/range_map.h
@@ -72,81 +72,14 @@ class RangeMap {
// Convenience types.
typedef std::map<AddressType, Range> AddressToRangeMap;
- typedef typename AddressToRangeMap::const_iterator const_iterator;
- typedef typename AddressToRangeMap::value_type value_type;
+ typedef typename AddressToRangeMap::const_iterator MapConstIterator;
+ typedef typename AddressToRangeMap::value_type MapValue;
// Maps the high address of each range to a EntryType.
AddressToRangeMap map_;
};
-template<typename AddressType, typename EntryType>
-bool RangeMap<AddressType, EntryType>::StoreRange(const AddressType &base,
- const AddressType &size,
- const EntryType &entry) {
- AddressType high = base + size - 1;
-
- // Check for undersize or overflow.
- if (size <= 0 || high < base)
- return false;
-
- // Ensure that this range does not overlap with another one already in the
- // map.
- const_iterator iterator_base = map_.lower_bound(base);
- const_iterator iterator_high = map_.lower_bound(high);
-
- if (iterator_base != iterator_high) {
- // Some other range begins in the space used by this range. It may be
- // contained within the space used by this range, or it may extend lower.
- // Regardless, it is an error.
- return false;
- }
-
- if (iterator_high != map_.end()) {
- if (iterator_high->second.base() <= high) {
- // The range above this one overlaps with this one. It may fully
- // contain this range, or it may begin within this range and extend
- // higher. Regardless, it's an error.
- return false;
- }
- }
-
- // Store the range in the map by its high address, so that lower_bound can
- // be used to quickly locate a range by address.
- map_.insert(value_type(high, Range(base, entry)));
- return true;
-}
-
-
-template<typename AddressType, typename EntryType>
-bool RangeMap<AddressType, EntryType>::RetrieveRange(
- const AddressType &address, EntryType *entry) const {
- if (!entry)
- return false;
-
- const_iterator iterator = map_.lower_bound(address);
- if (iterator == map_.end())
- return false;
-
- // The map is keyed by the high address of each range, so |address| is
- // guaranteed to be lower than the range's high address. If |range| is
- // not directly preceded by another range, it's possible for address to
- // be below the range's low address, though. When that happens, address
- // references something not within any range, so return false.
- if (address < iterator->second.base())
- return false;
-
- *entry = iterator->second.entry();
- return true;
-}
-
-
-template<typename AddressType, typename EntryType>
-void RangeMap<AddressType, EntryType>::Clear() {
- map_.clear();
-}
-
-
} // namespace google_airbag