|
|
|
@ -29,12 +29,7 @@ class Decisions implements \Iterator, \Countable
|
|
|
|
|
public function __construct($pool)
|
|
|
|
|
{
|
|
|
|
|
$this->pool = $pool;
|
|
|
|
|
|
|
|
|
|
if (version_compare(PHP_VERSION, '5.3.4', '>=')) {
|
|
|
|
|
$this->decisionMap = new \SplFixedArray($this->pool->getMaxId() + 1);
|
|
|
|
|
} else {
|
|
|
|
|
$this->decisionMap = array_fill(0, $this->pool->getMaxId() + 1, 0);
|
|
|
|
|
}
|
|
|
|
|
$this->decisionMap = array();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function decide($literal, $level, $why)
|
|
|
|
@ -51,8 +46,8 @@ class Decisions implements \Iterator, \Countable
|
|
|
|
|
$packageId = abs($literal);
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
$literal > 0 && $this->decisionMap[$packageId] > 0 ||
|
|
|
|
|
$literal < 0 && $this->decisionMap[$packageId] < 0
|
|
|
|
|
$literal > 0 && isset($this->decisionMap[$packageId]) && $this->decisionMap[$packageId] > 0 ||
|
|
|
|
|
$literal < 0 && isset($this->decisionMap[$packageId]) && $this->decisionMap[$packageId] < 0
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -61,29 +56,36 @@ class Decisions implements \Iterator, \Countable
|
|
|
|
|
$packageId = abs($literal);
|
|
|
|
|
|
|
|
|
|
return (
|
|
|
|
|
($this->decisionMap[$packageId] > 0 && $literal < 0) ||
|
|
|
|
|
($this->decisionMap[$packageId] < 0 && $literal > 0)
|
|
|
|
|
(isset($this->decisionMap[$packageId]) && $this->decisionMap[$packageId] > 0 && $literal < 0) ||
|
|
|
|
|
(isset($this->decisionMap[$packageId]) && $this->decisionMap[$packageId] < 0 && $literal > 0)
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function decided($literalOrPackageId)
|
|
|
|
|
{
|
|
|
|
|
return $this->decisionMap[abs($literalOrPackageId)] != 0;
|
|
|
|
|
return !empty($this->decisionMap[abs($literalOrPackageId)]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function undecided($literalOrPackageId)
|
|
|
|
|
{
|
|
|
|
|
return $this->decisionMap[abs($literalOrPackageId)] == 0;
|
|
|
|
|
return empty($this->decisionMap[abs($literalOrPackageId)]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function decidedInstall($literalOrPackageId)
|
|
|
|
|
{
|
|
|
|
|
return $this->decisionMap[abs($literalOrPackageId)] > 0;
|
|
|
|
|
$packageId = abs($literalOrPackageId);
|
|
|
|
|
|
|
|
|
|
return isset($this->decisionMap[$packageId]) && $this->decisionMap[$packageId] > 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function decisionLevel($literalOrPackageId)
|
|
|
|
|
{
|
|
|
|
|
return abs($this->decisionMap[abs($literalOrPackageId)]);
|
|
|
|
|
$packageId = abs($literalOrPackageId);
|
|
|
|
|
if (isset($this->decisionMap[$packageId])) {
|
|
|
|
|
return abs($this->decisionMap[$packageId]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function decisionRule($literalOrPackageId)
|
|
|
|
@ -179,7 +181,7 @@ class Decisions implements \Iterator, \Countable
|
|
|
|
|
{
|
|
|
|
|
$packageId = abs($literal);
|
|
|
|
|
|
|
|
|
|
$previousDecision = $this->decisionMap[$packageId];
|
|
|
|
|
$previousDecision = isset($this->decisionMap[$packageId]) ? $this->decisionMap[$packageId] : null;
|
|
|
|
|
if ($previousDecision != 0) {
|
|
|
|
|
$literalString = $this->pool->literalToString($literal);
|
|
|
|
|
$package = $this->pool->literalToPackage($literal);
|
|
|
|
|