Another pass at fixing up references

This commit is contained in:
Jeff Moser
2010-09-30 08:25:31 -04:00
parent 5368f7528e
commit 803a0816a8
28 changed files with 168 additions and 103 deletions

View File

@ -50,7 +50,7 @@ abstract class Factor
{
Guard::argumentIsValidIndex($messageIndex, count($this->_messages), "messageIndex");
$message = &$this->_messages[$messageIndex];
$variable = &$this->_messageToVariableBinding->getValue($this->_messages[$messageIndex]);
$variable = &$this->_messageToVariableBinding->getValue($message);
return $this->updateMessageVariable($message, $variable);
}
@ -62,7 +62,8 @@ abstract class Factor
/// Resets the marginal of the variables a factor is connected to
public function resetMarginals()
{
foreach ($this->_messageToVariableBinding->getAllValues() as $currentVariable)
$allValues = &$this->_messageToVariableBinding->getAllValues();
foreach ($allValues as $currentVariable)
{
$currentVariable->resetToPrior();
}
@ -73,21 +74,21 @@ abstract class Factor
{
Guard::argumentIsValidIndex($messageIndex, count($this->_messages), "messageIndex");
$message = $this->_messages[$messageIndex];
$variable = $this->_messageToVariableBinding->getValue($message);
$message = &$this->_messages[$messageIndex];
$variable = &$this->_messageToVariableBinding->getValue($message);
return $this->sendMessageVariable($message, $variable);
}
protected abstract function sendMessageVariable(Message &$message, Variable &$variable);
public abstract function createVariableToMessageBinding(Variable &$variable);
public abstract function &createVariableToMessageBinding(Variable &$variable);
protected function createVariableToMessageBindingWithMessage(Variable &$variable, Message &$message)
protected function &createVariableToMessageBindingWithMessage(Variable &$variable, Message &$message)
{
$index = count($this->_messages);
$this->_messages[] = $message;
$this->_messages[] = &$message;
$this->_messageToVariableBinding->setValue($message, $variable);
$this->_variables[] = $variable;
$this->_variables[] = &$variable;
return $message;
}

View File

@ -1,16 +1,19 @@
<?php
namespace Moserware\Skills\FactorGraphs;
require_once(dirname(__FILE__) . "/VariableFactory.php");
class FactorGraph
{
private $_variableFactory;
public function &getVariableFactory()
{
return $this->_variableFactory;
$factory = &$this->_variableFactory;
return $factory;
}
public function setVariableFactory(&$factory)
public function setVariableFactory(VariableFactory &$factory)
{
$this->_variableFactory = &$factory;
}

View File

@ -1,6 +1,7 @@
<?php
namespace Moserware\Skills\FactorGraphs;
require_once(dirname(__FILE__) . "/Factor.php");
require_once(dirname(__FILE__) . "/FactorGraph.php");
require_once(dirname(__FILE__) . "/Schedule.php");
@ -18,24 +19,28 @@ abstract class FactorGraphLayer
protected function &getInputVariablesGroups()
{
return $this->_inputVariablesGroups;
$inputVariablesGroups = &$this->_inputVariablesGroups;
return $inputVariablesGroups;
}
// HACK
public function &getParentFactorGraph()
{
return $this->_parentFactorGraph;
$parentFactorGraph = &$this->_parentFactorGraph;
return $parentFactorGraph;
}
public function &getOutputVariablesGroups()
{
return $this->_outputVariablesGroups;
$outputVariablesGroups = &$this->_outputVariablesGroups;
return $outputVariablesGroups;
}
public function &getLocalFactors()
{
return $this->_localFactors;
$localFactors = &$this->_localFactors;
return $localFactors;
}
public function setInputVariablesGroups(&$value)
@ -43,12 +48,12 @@ abstract class FactorGraphLayer
$this->_inputVariablesGroups = $value;
}
protected function scheduleSequence($itemsToSequence, $name)
protected function scheduleSequence(array $itemsToSequence, $name)
{
return new ScheduleSequence($name, $itemsToSequence);
}
protected function addLayerFactor(&$factor)
protected function addLayerFactor(Factor &$factor)
{
$this->_localFactors[] = $factor;
}

View File

@ -13,7 +13,8 @@ class FactorList
public function getLogNormalization()
{
foreach($this->_list as $currentFactor)
$list = &$this->_list;
foreach($list as &$currentFactor)
{
$currentFactor->resetMarginals();
}
@ -36,7 +37,7 @@ class FactorList
$sumLogS = 0;
foreach($this->_list as $currentFactor)
foreach($list as &$currentFactor)
{
$sumLogS = $sumLogS + $currentFactor->getLogNormalization();
}
@ -49,7 +50,7 @@ class FactorList
return count($this->_list);
}
public function addFactor(Factor &$factor)
public function &addFactor(Factor &$factor)
{
$this->_list[] = $factor;
return $factor;

View File

@ -6,7 +6,7 @@ class Message
private $_name;
private $_value;
public function __construct($value = null, $name = null)
public function __construct(&$value = null, $name = null)
{
$this->_name = $name;
$this->_value = $value;
@ -14,7 +14,8 @@ class Message
public function& getValue()
{
return $this->_value;
$value = &$this->_value;
return $value;
}
public function setValue(&$value)

View File

@ -1,6 +1,8 @@
<?php
namespace Moserware\Skills\FactorGraphs;
require_once(dirname(__FILE__) . "/Factor.php");
abstract class Schedule
{
private $_name;
@ -23,7 +25,7 @@ class ScheduleStep extends Schedule
private $_factor;
private $_index;
public function __construct($name, $factor, $index)
public function __construct($name, Factor &$factor, $index)
{
parent::__construct($name);
$this->_factor = $factor;
@ -41,7 +43,7 @@ class ScheduleSequence extends Schedule
{
private $_schedules;
public function __construct($name, $schedules)
public function __construct($name, array $schedules)
{
parent::__construct($name);
$this->_schedules = $schedules;
@ -51,7 +53,8 @@ class ScheduleSequence extends Schedule
{
$maxDelta = 0;
foreach ($this->_schedules as $currentSchedule)
$schedules = &$this->_schedules;
foreach ($schedules as &$currentSchedule)
{
$maxDelta = max($currentSchedule->visit($depth + 1, $maxDepth), $maxDelta);
}
@ -65,7 +68,7 @@ class ScheduleLoop extends Schedule
private $_maxDelta;
private $_scheduleToLoop;
public function __construct($name, Schedule $scheduleToLoop, $maxDelta)
public function __construct($name, Schedule &$scheduleToLoop, $maxDelta)
{
parent::__construct($name);
$this->_scheduleToLoop = $scheduleToLoop;

View File

@ -7,7 +7,7 @@ class Variable
private $_prior;
private $_value;
public function __construct($name, $prior)
public function __construct($name, &$prior)
{
$this->_name = "Variable[" . $name . "]";
$this->_prior = $prior;
@ -16,7 +16,8 @@ class Variable
public function &getValue()
{
return $this->_value;
$value = &$this->_value;
return $value;
}
public function setValue(&$value)
@ -42,12 +43,12 @@ class DefaultVariable extends Variable
parent::__construct("Default", null);
}
public function getValue()
public function &getValue()
{
return null;
}
public function setValue($value)
public function setValue(&$value)
{
throw new Exception();
}
@ -56,7 +57,7 @@ class DefaultVariable extends Variable
class KeyedVariable extends Variable
{
private $_key;
public function __construct($key, $name, $prior)
public function __construct($key, $name, &$prior)
{
parent::__construct($name, $prior);
$this->_key = $key;

View File

@ -14,14 +14,14 @@ class VariableFactory
$this->_variablePriorInitializer = &$variablePriorInitializer;
}
public function createBasicVariable($name)
public function &createBasicVariable($name)
{
$initializer = $this->_variablePriorInitializer;
$newVar = new Variable($name, $initializer());
return $newVar;
}
public function createKeyedVariable($key, $name)
public function &createKeyedVariable(&$key, $name)
{
$initializer = $this->_variablePriorInitializer;
$newVar = new KeyedVariable($key, $name, $initializer());