1/*
2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef TARGET_ADDRESS_RANGE_LIST_H
6#define TARGET_ADDRESS_RANGE_LIST_H
7
8
9#include <Array.h>
10#include <Referenceable.h>
11
12#include "TargetAddressRange.h"
13
14
15class TargetAddressRangeList : public BReferenceable {
16public:
17								TargetAddressRangeList();
18								TargetAddressRangeList(
19									const TargetAddressRange& range);
20								TargetAddressRangeList(
21									const TargetAddressRangeList& other);
22
23			void				Clear();
24			bool				AddRange(const TargetAddressRange& range);
25	inline	bool				AddRange(target_addr_t start,
26									target_size_t size);
27
28			int32				CountRanges() const;
29			TargetAddressRange	RangeAt(int32 index) const;
30
31			target_addr_t		LowestAddress() const;
32			TargetAddressRange	CoveringRange() const;
33
34			bool				Contains(target_addr_t address) const;
35
36			TargetAddressRangeList& operator=(
37									const TargetAddressRangeList& other);
38
39private:
40	typedef Array<TargetAddressRange> RangeArray;
41
42private:
43			RangeArray			fRanges;
44};
45
46
47bool
48TargetAddressRangeList::AddRange(target_addr_t start, target_size_t size)
49{
50	return AddRange(TargetAddressRange(start, size));
51}
52
53
54#endif	// TARGET_ADDRESS_RANGE_LIST_H
55