/// <summary> /// Initializes a new instance of the <see cref="Polynomial"/> class. /// </summary> /// <param name="gfield">The gfield.</param> /// <param name="coefficients">The coefficients.</param> /// <remarks></remarks> internal Polynomial(GaloisField256 gfield, int[] coefficients) { int coefficientsLength = coefficients.Length; if (coefficientsLength == 0 || coefficients == null) { throw new ArithmeticException("Can not create empty Polynomial"); } m_GField = gfield; m_primitive = gfield.Primitive; if (coefficientsLength > 1 && coefficients[0] == 0) { int firstNonZeroIndex = 1; while (firstNonZeroIndex < coefficientsLength && coefficients[firstNonZeroIndex] == 0) { firstNonZeroIndex++; } if (firstNonZeroIndex == coefficientsLength) { m_Coefficients = new[] { 0 } } ; else { int newLength = coefficientsLength - firstNonZeroIndex; m_Coefficients = new int[newLength]; Array.Copy(coefficients, firstNonZeroIndex, m_Coefficients, 0, newLength); } } else { m_Coefficients = new int[coefficientsLength]; Array.Copy(coefficients, m_Coefficients, coefficientsLength); } }
/// <summary> /// After create GeneratorPolynomial. Keep it as long as possible. /// Unless QRCode encode is done or no more QRCode need to generate. /// </summary> /// <param name="gfield">The gfield.</param> /// <remarks></remarks> internal GeneratorPolynomial(GaloisField256 gfield) { m_gfield = gfield; m_cacheGenerator = new List <Polynomial>(10); m_cacheGenerator.Add(new Polynomial(m_gfield, new[] { 1 })); }