/// <summary> Assigns the given L2-norm to the first leaf that does not have an
/// L2-norm value yet (i.e. l2norm is negative). The search is done
/// recursively and in the same order as that of the calcBasisWaveForms()
/// method, so that this method is used to assigne the l2norm of the
/// previously computed waveforms.
///
/// <p>This method can not be called on an element that ahs a non-negative
/// value in l2Norm, since that means that we are done.</p>
///
/// </summary>
/// <param name="l2n">The L2-norm to assign.
///
/// </param>
private void assignL2Norm(float l2n)
{
if (l2Norm < 0)
{
// We are not finished with this element yet
if (isNode)
{
// We are on a node => search on childs
if (subb_LL.l2Norm < 0f)
{
subb_LL.assignL2Norm(l2n);
}
else if (subb_HL.l2Norm < 0f)
{
subb_HL.assignL2Norm(l2n);
}
else if (subb_LH.l2Norm < 0f)
{
subb_LH.assignL2Norm(l2n);
}
else if (subb_HH.l2Norm < 0f)
{
subb_HH.assignL2Norm(l2n);
// If child now is done, we are done
if (subb_HH.l2Norm >= 0f)
{
l2Norm = 0f; // We are on a node, any non-neg value OK
}
}
else
{
// There is an error! If all childs have non-negative
// l2norm, then this node should have non-negative l2norm
throw new System.ApplicationException("You have found a bug in JJ2000!");
}
}
else
{
// This is a leaf, assign the L2-norm
l2Norm = l2n;
}
}
else
{
// This is an error! The assignL2Norm() method is never called on
// an element with non-negative l2norm
throw new System.ApplicationException("You have found a bug in JJ2000!");
}
}