1/* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef PACKAGE_DIRECTORY_H 6#define PACKAGE_DIRECTORY_H 7 8 9#include <util/DoublyLinkedList.h> 10 11#include "PackageNode.h" 12 13 14class PackageDirectory : public PackageNode, 15 public DoublyLinkedListLinkImpl<PackageDirectory> { 16public: 17 static void* operator new(size_t size); 18 static void operator delete(void* block); 19 20 PackageDirectory(Package* package, mode_t mode); 21 virtual ~PackageDirectory(); 22 23 void AddChild(PackageNode* node); 24 void RemoveChild(PackageNode* node); 25 26 inline PackageNode* FirstChild() const; 27 inline PackageNode* NextChild(PackageNode* node) const; 28 29 const PackageNodeList& Children() const 30 { return fChildren; } 31 32 bool HasPrecedenceOver(const PackageDirectory* other) 33 const; 34 35private: 36 PackageNodeList fChildren; 37}; 38 39 40PackageNode* 41PackageDirectory::FirstChild() const 42{ 43 return fChildren.First(); 44} 45 46 47PackageNode* 48PackageDirectory::NextChild(PackageNode* node) const 49{ 50 return fChildren.GetNext(node); 51} 52 53 54typedef DoublyLinkedList<PackageDirectory> PackageDirectoryList; 55 56 57#endif // PACKAGE_DIRECTORY_H 58