1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6#include "TargetAddressRangeList.h" 7 8#include <algorithm> 9 10 11TargetAddressRangeList::TargetAddressRangeList() 12{ 13} 14 15 16TargetAddressRangeList::TargetAddressRangeList(const TargetAddressRange& range) 17{ 18 AddRange(range); 19} 20 21 22TargetAddressRangeList::TargetAddressRangeList( 23 const TargetAddressRangeList& other) 24 : 25 fRanges(other.fRanges) 26{ 27} 28 29 30void 31TargetAddressRangeList::Clear() 32{ 33 fRanges.Clear(); 34} 35 36 37bool 38TargetAddressRangeList::AddRange(const TargetAddressRange& range) 39{ 40 return fRanges.Add(range); 41} 42 43 44int32 45TargetAddressRangeList::CountRanges() const 46{ 47 return fRanges.Size(); 48} 49 50 51TargetAddressRange 52TargetAddressRangeList::RangeAt(int32 index) const 53{ 54 return index >= 0 && index < fRanges.Size() 55 ? fRanges[index] : TargetAddressRange(); 56} 57 58 59target_addr_t 60TargetAddressRangeList::LowestAddress() const 61{ 62 int32 count = fRanges.Size(); 63 if (count == 0) 64 return 0; 65 66 target_addr_t lowest = fRanges[0].Start(); 67 for (int32 i = 0; i < count; i++) 68 lowest = std::min(lowest, fRanges[i].Start()); 69 70 return lowest; 71} 72 73 74TargetAddressRange 75TargetAddressRangeList::CoveringRange() const 76{ 77 TargetAddressRange range; 78 int32 count = fRanges.Size(); 79 for (int32 i = 0; i < count; i++) 80 range |= fRanges[i]; 81 82 return range; 83} 84 85 86bool 87TargetAddressRangeList::Contains(target_addr_t address) const 88{ 89 int32 count = fRanges.Size(); 90 for (int32 i = 0; i < count; i++) { 91 if (fRanges[i].Contains(address)) 92 return true; 93 } 94 95 return false; 96} 97 98 99TargetAddressRangeList& 100TargetAddressRangeList::operator=(const TargetAddressRangeList& other) 101{ 102 fRanges = other.fRanges; 103 return *this; 104} 105