xref: /haiku/src/add-ons/kernel/file_systems/packagefs/package/PackageDirectory.h (revision 65f80c14fc486c1ea2f5baa3d54aa0e172e6ab40)
11e7416d9SIngo Weinhold /*
21e7416d9SIngo Weinhold  * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
31e7416d9SIngo Weinhold  * Distributed under the terms of the MIT License.
41e7416d9SIngo Weinhold  */
51e7416d9SIngo Weinhold #ifndef PACKAGE_DIRECTORY_H
61e7416d9SIngo Weinhold #define PACKAGE_DIRECTORY_H
71e7416d9SIngo Weinhold 
81e7416d9SIngo Weinhold 
91e7416d9SIngo Weinhold #include <util/DoublyLinkedList.h>
101e7416d9SIngo Weinhold 
111e7416d9SIngo Weinhold #include "PackageNode.h"
121e7416d9SIngo Weinhold 
131e7416d9SIngo Weinhold 
14*65f80c14SAugustin Cavalier class PackageDirectory final : public PackageNode,
151e7416d9SIngo Weinhold 	public DoublyLinkedListLinkImpl<PackageDirectory> {
161e7416d9SIngo Weinhold public:
17d230b5fdSAugustin Cavalier 	static	void*				operator new(size_t size);
18d230b5fdSAugustin Cavalier 	static	void				operator delete(void* block);
19d230b5fdSAugustin Cavalier 
201e7416d9SIngo Weinhold 								PackageDirectory(Package* package, mode_t mode);
211e7416d9SIngo Weinhold 	virtual						~PackageDirectory();
221e7416d9SIngo Weinhold 
231e7416d9SIngo Weinhold 			void				AddChild(PackageNode* node);
241e7416d9SIngo Weinhold 			void				RemoveChild(PackageNode* node);
251e7416d9SIngo Weinhold 
261e7416d9SIngo Weinhold 	inline	PackageNode*		FirstChild() const;
271e7416d9SIngo Weinhold 	inline	PackageNode*		NextChild(PackageNode* node) const;
281e7416d9SIngo Weinhold 
Children()291e7416d9SIngo Weinhold 			const PackageNodeList& Children() const
301e7416d9SIngo Weinhold 									{ return fChildren; }
311e7416d9SIngo Weinhold 
32d8ad2d6fSAugustin Cavalier 			bool				HasPrecedenceOver(const PackageDirectory* other)
33d8ad2d6fSAugustin Cavalier 									const;
345301f108SAugustin Cavalier 
351e7416d9SIngo Weinhold private:
361e7416d9SIngo Weinhold 			PackageNodeList		fChildren;
371e7416d9SIngo Weinhold };
381e7416d9SIngo Weinhold 
391e7416d9SIngo Weinhold 
401e7416d9SIngo Weinhold PackageNode*
FirstChild()411e7416d9SIngo Weinhold PackageDirectory::FirstChild() const
421e7416d9SIngo Weinhold {
431e7416d9SIngo Weinhold 	return fChildren.First();
441e7416d9SIngo Weinhold }
451e7416d9SIngo Weinhold 
461e7416d9SIngo Weinhold 
471e7416d9SIngo Weinhold PackageNode*
NextChild(PackageNode * node)481e7416d9SIngo Weinhold PackageDirectory::NextChild(PackageNode* node) const
491e7416d9SIngo Weinhold {
501e7416d9SIngo Weinhold 	return fChildren.GetNext(node);
511e7416d9SIngo Weinhold }
521e7416d9SIngo Weinhold 
531e7416d9SIngo Weinhold 
541e7416d9SIngo Weinhold typedef DoublyLinkedList<PackageDirectory> PackageDirectoryList;
551e7416d9SIngo Weinhold 
561e7416d9SIngo Weinhold 
571e7416d9SIngo Weinhold #endif	// PACKAGE_DIRECTORY_H
58