* Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#include "ResolvableFamily.h"
#include "Package.h"
#include "Volume.h"
void
ResolvableFamily::AddResolvable(Resolvable* resolvable,
ResolvableDependencyList& dependenciesToUpdate)
{
MountType mountType
= resolvable->Package()->Volume()->MountType();
Resolvable* otherResolvable = NULL;
for (FamilyResolvableList::Iterator it = fResolvables.GetIterator();
(otherResolvable = it.Next()) != NULL;) {
if (otherResolvable->Package()->Volume()->MountType()
<= mountType) {
break;
}
}
fResolvables.InsertBefore(otherResolvable, resolvable);
resolvable->SetFamily(this);
while ((resolvable = fResolvables.GetNext(resolvable)) != NULL)
resolvable->MoveDependencies(dependenciesToUpdate);
}
void
ResolvableFamily::RemoveResolvable(Resolvable* resolvable,
ResolvableDependencyList& dependenciesToUpdate)
{
resolvable->SetFamily(NULL);
fResolvables.Remove(resolvable);
resolvable->MoveDependencies(dependenciesToUpdate);
}
bool
ResolvableFamily::ResolveDependency(Dependency* dependency)
{
for (FamilyResolvableList::Iterator it = fResolvables.GetIterator();
Resolvable* resolvable = it.Next();) {
if (!dependency->ResolvableVersionMatches(resolvable->Version()))
continue;
Version* compatibleVersion = resolvable->CompatibleVersion() != NULL
? resolvable->CompatibleVersion() : resolvable->Version();
if (dependency->ResolvableCompatibleVersionMatches(compatibleVersion)) {
resolvable->AddDependency(dependency);
return true;
}
}
return false;
}