/// <summary>
/// Registers the occurrence of a value.
/// </summary>
///
/// <param name="value">The value to be registered.</param>
///
public void Push(int value)
{
if (!Started)
{
for (int i = 0; i < Current.Length; i++)
{
Current[i] = Model.LogInitial[i] + Model.LogEmissions[i][value];
}
Started = true;
}
else
{
for (int i = 0; i < Current.Length; i++)
{
previous[i] = Current[i];
}
for (int i = 0; i < Current.Length; i++)
{
double sum = Double.NegativeInfinity;
for (int j = 0; j < previous.Length; j++)
{
sum = Special.LogSum(sum, previous[j] + Model.LogTransitions[j][i]);
}
Current[i] = sum + Model.LogEmissions[i][value];
}
}
_base.Invalidate();
}