FluxJpeg.Core.Decoder.JpegComponent.EmitQuantize C# (CSharp) Method

EmitQuantize() private method

private EmitQuantize ( ) : QuantizeDel
return QuantizeDel
        private QuantizeDel EmitQuantize()
        {
            Type[] args = { typeof(float[]) };

            DynamicMethod quantizeMethod = new DynamicMethod("Quantize",
                null, // no return type
                args); // input array

            ILGenerator il = quantizeMethod.GetILGenerator();

            for (int i = 0; i < quantizationTable.Length; i++)
            {
                float mult = (float)quantizationTable[i];

                                                       // Sz Stack:
                il.Emit(OpCodes.Ldarg_0);              // 1  {arr} 
                il.Emit(OpCodes.Ldc_I4_S, (short)i);   // 3  {arr,i}
                il.Emit(OpCodes.Ldarg_0);              // 1  {arr,i,arr}
                il.Emit(OpCodes.Ldc_I4_S, (short)i);   // 3  {arr,i,arr,i}
                il.Emit(OpCodes.Ldelem_R4);            // 1  {arr,i,arr[i]}
                il.Emit(OpCodes.Ldc_R4, mult);         // 5  {arr,i,arr[i],mult}
                il.Emit(OpCodes.Mul);                  // 1  {arr,i,arr[i]*mult}
                il.Emit(OpCodes.Stelem_R4);            // 1  {}

            }

            il.Emit(OpCodes.Ret);

            return (QuantizeDel)quantizeMethod.CreateDelegate(typeof(QuantizeDel));
        }
#endif