* Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#include "PackageDirectory.h"
#include "Package.h"
#include "ClassCache.h"
CLASS_CACHE(PackageDirectory);
PackageDirectory::PackageDirectory(Package* package, mode_t mode)
:
PackageNode(package, mode)
{
}
PackageDirectory::~PackageDirectory()
{
while (PackageNode* child = fChildren.RemoveHead())
child->ReleaseReference();
}
void
PackageDirectory::AddChild(PackageNode* node)
{
fChildren.Add(node);
node->AcquireReference();
}
void
PackageDirectory::RemoveChild(PackageNode* node)
{
fChildren.Remove(node);
node->ReleaseReference();
}
bool
PackageDirectory::HasPrecedenceOver(const PackageDirectory* other) const
{
uint32 packageFlags = 0, otherPackageFlags = 0;
BReference<Package> package(GetPackage()), otherPackage(other->GetPackage());
if (package)
packageFlags = package->Flags();
if (otherPackage)
otherPackageFlags = otherPackage->Flags();
if ((packageFlags & BPackageKit::B_PACKAGE_FLAG_SYSTEM_PACKAGE)
!= (otherPackageFlags
& BPackageKit::B_PACKAGE_FLAG_SYSTEM_PACKAGE)) {
return PackageNode::HasPrecedenceOver(other);
}
const int32 attrs = fAttributes.Count(),
otherAttrs = other->fAttributes.Count();
if (attrs != otherAttrs)
return attrs > otherAttrs;
return PackageNode::HasPrecedenceOver(other);
}