1 /* 2 * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7 #include "PackageDirectory.h" 8 #include "Package.h" 9 10 11 PackageDirectory::PackageDirectory(Package* package, mode_t mode) 12 : 13 PackageNode(package, mode) 14 { 15 } 16 17 18 PackageDirectory::~PackageDirectory() 19 { 20 while (PackageNode* child = fChildren.RemoveHead()) 21 child->ReleaseReference(); 22 } 23 24 25 void 26 PackageDirectory::AddChild(PackageNode* node) 27 { 28 fChildren.Add(node); 29 node->AcquireReference(); 30 } 31 32 33 void 34 PackageDirectory::RemoveChild(PackageNode* node) 35 { 36 fChildren.Remove(node); 37 node->ReleaseReference(); 38 } 39 40 41 bool 42 PackageDirectory::HasPrecedenceOver(const PackageDirectory* other) const 43 { 44 // If one of us has the SYSTEM_PACKAGE flag and the other doesn't, 45 // let PackageNode take care of the comparison. 46 if ((fPackageFlags & BPackageKit::B_PACKAGE_FLAG_SYSTEM_PACKAGE) 47 != (other->fPackageFlags 48 & BPackageKit::B_PACKAGE_FLAG_SYSTEM_PACKAGE)) { 49 return PackageNode::HasPrecedenceOver(other); 50 } 51 52 const int32 attrs = fAttributes.Count(), 53 otherAttrs = other->fAttributes.Count(); 54 if (attrs != otherAttrs) 55 return attrs > otherAttrs; 56 return PackageNode::HasPrecedenceOver(other); 57 } 58