1/* 2 * Copyright 2011, Ingo Weinhold, ingo_weinhold@gmx.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7#include "Dependency.h" 8 9#include <stdlib.h> 10#include <string.h> 11 12#include "Version.h" 13 14 15Dependency::Dependency(::Package* package) 16 : 17 fPackage(package), 18 fFamily(NULL), 19 fResolvable(NULL), 20 fName(NULL), 21 fVersion(NULL), 22 fVersionOperator(B_PACKAGE_RESOLVABLE_OP_EQUAL) 23{ 24} 25 26 27Dependency::~Dependency() 28{ 29 free(fName); 30 delete fVersion; 31} 32 33 34status_t 35Dependency::Init(const char* name) 36{ 37 fName = strdup(name); 38 if (fName == NULL) 39 return B_NO_MEMORY; 40 41 return B_OK; 42} 43 44 45void 46Dependency::SetVersionRequirement(BPackageResolvableOperator op, 47 Version* version) 48{ 49 fVersionOperator = op; 50 fVersion = version; 51} 52 53 54bool 55Dependency::ResolvableVersionMatches(Version* resolvableVersion) const 56{ 57 if (fVersion == NULL) 58 return true; 59 60 return resolvableVersion != NULL 61 && resolvableVersion->Compare(fVersionOperator, *fVersion); 62} 63 64 65bool 66Dependency::ResolvableCompatibleVersionMatches(Version* resolvableVersion) const 67{ 68 if (fVersion == NULL) 69 return true; 70 71 // Only compare the versions, if the operator indicates that our version is 72 // some kind of minimum required version. Only in that case the resolvable's 73 // actual version is required to be greater (or equal) and the backwards 74 // compatibility check makes sense. 75 if (fVersionOperator == B_PACKAGE_RESOLVABLE_OP_GREATER_EQUAL 76 || fVersionOperator == B_PACKAGE_RESOLVABLE_OP_GREATER) { 77 return resolvableVersion != NULL 78 && fVersion->Compare(*resolvableVersion) >= 0; 79 } 80 81 return true; 82} 83