* Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de.
* Distributed under the terms of the MIT License.
*/
#ifndef DEPENDENCY_H
#define DEPENDENCY_H
#include <package/PackageResolvableOperator.h>
#include <Referenceable.h>
#include <util/DoublyLinkedList.h>
#include "String.h"
class DependencyFamily;
class Package;
class Resolvable;
class Version;
using BPackageKit::BPackageResolvableOperator;
class Dependency : public BReferenceable,
public DoublyLinkedListLinkImpl<Dependency> {
public:
Dependency(::Package* package);
virtual ~Dependency();
status_t Init(const char* name);
void SetVersionRequirement(
BPackageResolvableOperator op,
Version* version);
::Package* Package() const
{ return fPackage; }
void SetFamily(DependencyFamily* family)
{ fFamily = family; }
DependencyFamily* Family() const
{ return fFamily; }
void SetResolvable(::Resolvable* resolvable)
{ fResolvable = resolvable; }
::Resolvable* Resolvable() const
{ return fResolvable; }
bool ResolvableVersionMatches(
Version* resolvableVersion) const;
bool ResolvableCompatibleVersionMatches(
Version* resolvableVersion) const;
const String& Name() const { return fName; }
const String& FileName() const { return fFileName; }
private:
::Package* fPackage;
DependencyFamily* fFamily;
::Resolvable* fResolvable;
String fName;
String fFileName;
Version* fVersion;
BPackageResolvableOperator fVersionOperator;
public:
DoublyLinkedListLink<Dependency> fFamilyListLink;
DoublyLinkedListLink<Dependency> fResolvableListLink;
};
typedef DoublyLinkedList<Dependency> DependencyList;
typedef DoublyLinkedList<Dependency,
DoublyLinkedListMemberGetLink<Dependency,
&Dependency::fFamilyListLink> > FamilyDependencyList;
typedef DoublyLinkedList<Dependency,
DoublyLinkedListMemberGetLink<Dependency,
&Dependency::fResolvableListLink> > ResolvableDependencyList;
#endif