1/*
2 * Copyright 2011, Haiku, Inc.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _PACKAGE_PACKAGE_INFO_SET_H_
6#define _PACKAGE_PACKAGE_INFO_SET_H_
7
8
9#include <SupportDefs.h>
10
11
12namespace BPackageKit {
13
14
15class BPackageInfo;
16
17
18class BPackageInfoSet {
19public:
20			class Iterator;
21
22public:
23								BPackageInfoSet();
24								BPackageInfoSet(const BPackageInfoSet& other);
25	virtual						~BPackageInfoSet();
26
27			status_t			AddInfo(const BPackageInfo& info);
28			void				MakeEmpty();
29
30			uint32				CountInfos() const;
31			Iterator			GetIterator() const;
32
33			BPackageInfoSet&	operator=(const BPackageInfoSet& other);
34
35private:
36			bool				_CopyOnWrite();
37
38private:
39			struct PackageInfo;
40			struct PackageInfoHashDefinition;
41			struct PackageMap;
42
43			friend class Iterator;
44
45private:
46			PackageMap*			fPackageMap;
47};
48
49
50class BPackageInfoSet::Iterator {
51public:
52								Iterator(const PackageMap* map = NULL);
53
54			bool				HasNext() const;
55			const BPackageInfo*	Next();
56
57private:
58			friend class BRepositoryCache;
59
60private:
61			const PackageMap*	fMap;
62			PackageInfo*		fNextInfo;
63};
64
65
66}	// namespace BPackageKit
67
68
69#endif // _PACKAGE_PACKAGE_INFO_SET_H_
70