1/* 2 * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef DEPENDENCY_H 6#define DEPENDENCY_H 7 8 9#include <package/PackageResolvableOperator.h> 10 11#include <Referenceable.h> 12 13#include <util/DoublyLinkedList.h> 14 15 16class DependencyFamily; 17class Package; 18class Resolvable; 19class Version; 20 21 22using BPackageKit::BPackageResolvableOperator; 23 24 25class Dependency : public BReferenceable, 26 public DoublyLinkedListLinkImpl<Dependency> { 27public: 28 Dependency(::Package* package); 29 virtual ~Dependency(); 30 31 status_t Init(const char* name); 32 void SetVersionRequirement( 33 BPackageResolvableOperator op, 34 Version* version); 35 // version is optional; object takes over 36 // ownership 37 38 ::Package* Package() const 39 { return fPackage; } 40 41 void SetFamily(DependencyFamily* family) 42 { fFamily = family; } 43 DependencyFamily* Family() const 44 { return fFamily; } 45 46 void SetResolvable(::Resolvable* resolvable) 47 { fResolvable = resolvable; } 48 ::Resolvable* Resolvable() const 49 { return fResolvable; } 50 bool ResolvableVersionMatches( 51 Version* resolvableVersion) const; 52 bool ResolvableCompatibleVersionMatches( 53 Version* resolvableVersion) const; 54 55 const char* Name() const { return fName; } 56 57private: 58 ::Package* fPackage; 59 DependencyFamily* fFamily; 60 ::Resolvable* fResolvable; 61 char* fName; 62 Version* fVersion; 63 BPackageResolvableOperator fVersionOperator; 64 65public: // conceptually package private 66 DoublyLinkedListLink<Dependency> fFamilyListLink; 67 DoublyLinkedListLink<Dependency> fResolvableListLink; 68}; 69 70 71typedef DoublyLinkedList<Dependency> DependencyList; 72 73typedef DoublyLinkedList<Dependency, 74 DoublyLinkedListMemberGetLink<Dependency, 75 &Dependency::fFamilyListLink> > FamilyDependencyList; 76 77typedef DoublyLinkedList<Dependency, 78 DoublyLinkedListMemberGetLink<Dependency, 79 &Dependency::fResolvableListLink> > ResolvableDependencyList; 80 81 82#endif // DEPENDENCY_H 83