xref: /haiku/headers/private/storage/ResourcesContainer.h (revision 24159a0c7d6d6dcba9f2a0c1a7c08d2c8167f21b)
1 //----------------------------------------------------------------------
2 //  This software is part of the OpenBeOS distribution and is covered
3 //  by the OpenBeOS license.
4 //---------------------------------------------------------------------
5 /*!
6 	\file ResourcesContainer.h
7 	ResourcesContainer interface declaration.
8 */
9 
10 #ifndef _RESOURCES_CONTAINER_H
11 #define _RESOURCES_CONTAINER_H
12 
13 #include <List.h>
14 
15 namespace BPrivate {
16 namespace Storage {
17 
18 class ResourceItem;
19 
20 /*!
21 	\class ResourcesContainer
22 	\brief Represents a collection of resources.
23 
24 	This class can be used to manage a collection of resources represented
25 	by ResourceItem's. Usually it does never contain two resources with the
26 	same type \em and ID, since AddResource() replaces an old item with the
27 	new one, unless explicitly told not to do so. This should only be done
28 	by ResourceFile, when type and ID of the items are not yet known.
29 	Asside from the basic vector features like Add/RemoveResource()/
30 	ResourceAt() and MakeEmpty() a bunch of IndexOf() methods are provided
31 	and AssimilateResources() which incorporates all resources of another
32 	container into this one (replacing old resources, if necessary), emptying
33 	the other one.
34 
35 	The ResourceItem's in a container are deleted on destruction, unless
36 	removed before via RemoveResource(). MakeEmpty() deletes the items as
37 	well.
38 
39 	\author <a href='mailto:bonefish@users.sf.net'>Ingo Weinhold</a>
40 
41 	\version 0.0.0
42 */
43 class ResourcesContainer {
44 public:
45 	ResourcesContainer();
46 	virtual ~ResourcesContainer();
47 
48 	bool AddResource(ResourceItem *item, int32 index = -1,
49 					 bool replace = true);
50 
51 	ResourceItem *RemoveResource(int32 index);
52 	bool RemoveResource(ResourceItem *item);
53 
54 	void MakeEmpty();
55 
56 	void AssimilateResources(ResourcesContainer &container);
57 
58 	int32 IndexOf(ResourceItem *item) const;
59 	int32 IndexOf(const void *data) const;
60 	int32 IndexOf(type_code type, int32 id) const;
61 	int32 IndexOf(type_code type, const char *name) const;
62 	int32 IndexOfType(type_code type, int32 index) const;
63 	ResourceItem *ResourceAt(int32 index) const;
64 	int32 CountResources() const;
65 
66 	void SetModified(bool modified);
67 	bool IsModified() const;
68 
69 private:
70 	BList	fResources;
71 	bool	fIsModified;
72 };
73 
74 };	// namespace Storage
75 };	// namespace BPrivate
76 
77 #endif	// _RESOURCES_CONTAINER_H
78 
79 
80