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 WeinholdPackageDirectory::FirstChild() const 421e7416d9SIngo Weinhold { 431e7416d9SIngo Weinhold return fChildren.First(); 441e7416d9SIngo Weinhold } 451e7416d9SIngo Weinhold 461e7416d9SIngo Weinhold 471e7416d9SIngo Weinhold PackageNode* NextChild(PackageNode * node)481e7416d9SIngo WeinholdPackageDirectory::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