1/*
2 * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include "Resolvable.h"
8
9#include <string.h>
10
11#include "Version.h"
12
13
14Resolvable::Resolvable(::Package* package)
15	:
16	fPackage(package),
17	fFamily(NULL),
18	fName(NULL),
19	fVersion(NULL),
20	fCompatibleVersion(NULL)
21{
22}
23
24
25Resolvable::~Resolvable()
26{
27	free(fName);
28	delete fVersion;
29	delete fCompatibleVersion;
30}
31
32
33status_t
34Resolvable::Init(const char* name, ::Version* version,
35	::Version* compatibleVersion)
36{
37	fVersion = version;
38	fCompatibleVersion = compatibleVersion;
39
40	fName = strdup(name);
41	if (fName == NULL)
42		return B_NO_MEMORY;
43
44	return B_OK;
45}
46
47
48void
49Resolvable::AddDependency(Dependency* dependency)
50{
51	fDependencies.Add(dependency);
52	dependency->SetResolvable(this);
53}
54
55
56void
57Resolvable::RemoveDependency(Dependency* dependency)
58{
59	fDependencies.Remove(dependency);
60	dependency->SetResolvable(NULL);
61}
62
63
64void
65Resolvable::MoveDependencies(ResolvableDependencyList& dependencies)
66{
67	if (fDependencies.IsEmpty())
68		return;
69
70	for (ResolvableDependencyList::Iterator it = fDependencies.GetIterator();
71			Dependency* dependency = it.Next();) {
72		dependency->SetResolvable(NULL);
73	}
74
75	dependencies.MoveFrom(&fDependencies);
76}
77