Beispiel #1
0
        private unsafe void LLt(Decimal[,] value)
        {
            n = value.GetLength(0);
            L = new Decimal[n, n];
            D = new Decimal[n];

            for (int i = 0; i < D.Length; i++)
            {
                D[i] = 1;
            }

            robust = false;

            Decimal[,] a = value;

            this.positiveDefinite = true;
            this.symmetric        = true;

            fixed(Decimal *ptrL = L)
            {
                for (int j = 0; j < n; j++)
                {
                    Decimal *Lrowj = ptrL + j * n;
                    Decimal  d     = 0;
                    for (int k = 0; k < j; k++)
                    {
                        Decimal *Lrowk = ptrL + k * n;

                        Decimal s = 0;
                        for (int i = 0; i < k; i++)
                        {
                            s += Lrowk[i] * Lrowj[i];
                        }

                        Lrowj[k] = s = (a[j, k] - s) / Lrowk[k];
                        d       += s * s;

                        this.symmetric = this.symmetric & (a[k, j] == a[j, k]);
                    }

                    d = a[j, j] - d;

                    // Use a tolerance for positive-definiteness
                    this.positiveDefinite &= (d > (Decimal)1e-14 * Math.Abs(a[j, j]));

                    Lrowj[j] = (Decimal)System.Math.Sqrt((double)System.Math.Max(d, 0));

                    for (int k = j + 1; k < n; k++)
                    {
                        Lrowj[k] = 0;
                    }
                }
            }
        }
Beispiel #2
0
        /// <summary>
        ///   Constructs a new LU decomposition.
        /// </summary>
        /// <param name="value">The matrix A to be decomposed.</param>
        /// <param name="transpose">True if the decomposition should be performed on
        /// the transpose of A rather than A itself, false otherwise. Default is false.</param>
        /// <param name="inPlace">True if the decomposition should be performed over the
        /// <paramref name="value"/> matrix rather than on a copy of it. If true, the
        /// matrix will be destroyed during the decomposition. Default is false.</param>
        ///
        public LuDecompositionD(Decimal[,] value, bool transpose, bool inPlace)
        {
            if (value == null)
            {
                throw new ArgumentNullException("value", "Matrix cannot be null.");
            }

            if (transpose)
            {
                this.lu = value.Transpose(inPlace);
            }
            else
            {
                this.lu = inPlace ? value : (Decimal[, ])value.Clone();
            }

            this.rows      = lu.GetLength(0);
            this.cols      = lu.GetLength(1);
            this.pivotSign = 1;

            this.pivotVector = new int[rows];
            for (int i = 0; i < rows; i++)
            {
                pivotVector[i] = i;
            }

            var LUcolj = new Decimal[rows];


            unsafe
            {
                fixed(Decimal *LU = lu)
                {
                    // Outer loop.
                    for (int j = 0; j < cols; j++)
                    {
                        // Make a copy of the j-th column to localize references.
                        for (int i = 0; i < rows; i++)
                        {
                            LUcolj[i] = lu[i, j];
                        }

                        // Apply previous transformations.
                        for (int i = 0; i < rows; i++)
                        {
                            Decimal s = 0;

                            // Most of the time is spent in
                            // the following dot product:
                            int      kmax   = Math.Min(i, j);
                            Decimal *LUrowi = &LU[i * cols];
                            for (int k = 0; k < kmax; k++)
                            {
                                s += LUrowi[k] * LUcolj[k];
                            }

                            LUrowi[j] = LUcolj[i] -= s;
                        }

                        // Find pivot and exchange if necessary.
                        int p = j;
                        for (int i = j + 1; i < rows; i++)
                        {
                            if (Math.Abs(LUcolj[i]) > Math.Abs(LUcolj[p]))
                            {
                                p = i;
                            }
                        }

                        if (p != j)
                        {
                            for (int k = 0; k < cols; k++)
                            {
                                var t = lu[p, k];
                                lu[p, k] = lu[j, k];
                                lu[j, k] = t;
                            }

                            int v = pivotVector[p];
                            pivotVector[p] = pivotVector[j];
                            pivotVector[j] = v;

                            pivotSign = -pivotSign;
                        }

                        // Compute multipliers.
                        if (j < rows && lu[j, j] != 0)
                        {
                            for (int i = j + 1; i < rows; i++)
                            {
                                lu[i, j] /= lu[j, j];
                            }
                        }
                    }
                }
            }
        }
Beispiel #3
0
        public static int Func_0()
        {
            Decimal *a36_0 = stackalloc Decimal[1];

            *a36_0 = 137438953472M;

            vtstatic_0.a0_0              = 3.7914999471280252E-09;
            vtstatic_0.a2_0              = 5.0980403367171836E-10;
            vtstatic_0.a11_0             = 43182.316630581954;
            vtstatic_0.a21_0             = 0.03125;
            vtstatic_0.a25_0             = 2228713468L;
            vtstatic_0.a31_0             = 246082L;
            vtstatic_0.a38_0             = 37004L;
            vtstatic_0.a70_0             = 7745;
            vtstatic_0.a74_0             = 37005;
            s_arr2d_0[2, 10]             = 1267746681;
            clstatic_0.arr1d_0[28]       = 54765;
            clstatic_0.arr3d_0[4, 54, 3] = -1267746680;
            double asgop0 = 8.3079175512520556E-13;

            asgop0 += ((8.3079175512520556E-13 + -43182.324443081954));
            Decimal asgop1 = s_a91_0;

            asgop1 -= (Convert.ToDecimal(Convert.ToDecimal((Convert.ToDecimal(clstatic_0.a26_0) * (Convert.ToDecimal((Convert.ToDecimal(s_a91_0) + Convert.ToDecimal(0M))) - Convert.ToDecimal((Convert.ToDecimal(clstatic_0.a17_0) * -78.675448098098607849784913059M)))))));
            long asgop2 = s_a16_0;

            asgop2 /= (Convert.ToInt64((s_a16_0 + 3938106313891559120L)));
            double asgop3 = clstatic_0.a57_0;

            asgop3 -= (((clstatic_0.a57_0 + clstatic_0.a40_0)));
            double asgop4 = -0.00384521484375;

            asgop4 -= (156519.99615478516);
            double asgop5 = clstatic_0.a94_0;

            asgop5 -= (((clstatic_0.a94_0 - (clstatic_0.a94_0 - ((1 * -0.14578177034854889))))));
            short asgop6 = 16062;

            asgop6 /= (1);
            double asgop7 = vtstatic_0.a21_0;

            asgop7 -= (43182.324443081954);
            Decimal asgop8 = 10.4980392156863M;

            asgop8 -= (Convert.ToDecimal(Convert.ToDecimal((Convert.ToDecimal(10.4980392156863M) - Convert.ToDecimal(37.0933021099920M)))));
            float asgop9 = 1.0F;

            asgop9 += (8191.0F);
            Decimal asgop10 = s_a91_0;

            asgop10 += (Convert.ToDecimal(Convert.ToDecimal(0M)));
            asgop7  += (vtstatic_0.a11_0);
            Decimal asgop12 = s_a91_0;

            asgop12 -= (Convert.ToDecimal(Convert.ToDecimal(0M)));
            asgop12 += (Convert.ToDecimal(Convert.ToDecimal((Convert.ToDecimal(asgop10) - Convert.ToDecimal(-270597565911.875M)))));
            long asgop14 = vtstatic_0.a31_0;

            asgop14 /= (Convert.ToInt64(vtstatic_0.a31_0));
            long asgop15 = 1L;

            asgop15 /= (Convert.ToInt64(1L));
            int asgop16 = s_arr2d_0[2, 10];

            asgop16 *= ((Convert.ToInt32(vtstatic_0.a74_0) + (Convert.ToInt32(s_arr2d_0[2, 10] * -2.91887965905075E-05))));
            long asgop17 = 1L;

            asgop17 -= ((Convert.ToInt64(Convert.ToUInt16(vtstatic_0.a74_0) - Convert.ToInt64(clstatic_0.a89_0))));
            long asgop18 = 64L;

            asgop18 /= (Convert.ToInt64(1L));
            double asgop19 = -0.00384521484375;

            asgop19 -= (((-0.00384521484375 + asgop4)));
            long asgop20 = clstatic_0.a27_0;

            asgop20  *= (Convert.ToInt64(Convert.ToInt64(1L)));
            (*a36_0) -= (Convert.ToDecimal((Convert.ToDecimal(asgop1))));
            long asgop22 = clstatic_0.a96_0;

            asgop22 *= (Convert.ToInt64(Convert.ToInt64(Convert.ToInt64(Convert.ToUInt16(vtstatic_0.a74_0) + Convert.ToInt64(clstatic_0.a48_0)))));
            asgop3  += ((((asgop9 * 1.0F) * -5.2712798392434026) + vtstatic_0.a21_0));
            double asgop24 = -0.14578177034854889;

            asgop24 /= (1.0);
            long asgop25 = vtstatic_0.a31_0;

            asgop25 *= (Convert.ToInt64(Convert.ToInt64((Convert.ToInt64((Convert.ToInt64(vtstatic_0.a31_0) * Convert.ToInt64(1L)) / (Convert.ToInt64(vtstatic_0.a31_0 / asgop14)))))));
            int asgop26 = s_arr2d_0[2, 10];

            asgop26 /= ((Convert.ToInt32((Convert.ToInt32((Convert.ToInt32(Convert.ToInt64(vtstatic_0.a31_0) - Convert.ToInt64((-1625069246L)))))) % (Convert.ToInt32((Convert.ToInt32(s_arr2d_0[2, 10] * 1.2820505479201487)))))));
            int asgop27 = s_a18_0;

            asgop27 -= (clstatic_0.arr1d_0[28]);
            asgop3  -= (asgop7);
            asgop3  += ((((vtstatic_0.a70_0 - (((vtstatic_0.a70_0 - 62509) - 997234106))) / (vtstatic_0.a70_0 * clstatic_0.a50_0)) + ((vtstatic_0.a70_0 * s_a66_0) + ((s_a66_0 - 0.0) + (clstatic_0.a26_0 / vtstatic_0.a0_0)))));
            asgop3  += ((Convert.ToSingle(Convert.ToInt16(8192.0F - (clstatic_0.a6_0)) / asgop19) / (((s_a8_0 - s_a83_0) - ((s_a83_0 - 0.0) - 156518.00390625)) - ((Convert.ToUInt64(Convert.ToUInt16(Convert.ToUInt16(vtstatic_0.a70_0 * Convert.ToSingle(4.777921F))) + Convert.ToInt64(Convert.ToInt64(Convert.ToDouble(3938106313891559120L) * clstatic_0.a88_0))) / (clstatic_0.a88_0 - 74.645457766197779))))));
            short asgop31 = 32537;

            asgop31 %= Convert.ToInt16((Convert.ToInt16((Convert.ToInt16(16475)))));
            double asgop32 = -2517.6143380671915;

            asgop32 += (2517.6768380671915);
            asgop24 /= (vtstatic_0.a2_0);
            int asgop34 = s_arr2d_0[2, 10];

            asgop34 += (clstatic_0.arr3d_0[4, 54, 3]);
            double asgop35 = 8.3079175512520556E-13;

            asgop35 -= ((asgop0));
            return(Convert.ToInt32((Convert.ToInt32((Convert.ToInt32((Convert.ToInt32(Convert.ToInt64(Convert.ToInt64(Convert.ToDouble(Convert.ToInt64(Convert.ToUInt16(Convert.ToUInt16(asgop26 / Convert.ToSingle(Convert.ToSingle(Convert.ToUInt64(Convert.ToInt16(asgop6) + Convert.ToInt64(Convert.ToInt64(Convert.ToUInt16(vtstatic_0.a74_0) - Convert.ToInt64((Convert.ToInt64(clstatic_0.a17_0) + -1747119413L))))) * asgop5)))) - Convert.ToInt64(Convert.ToInt64(Convert.ToDouble(asgop25) * asgop24)))) * (Convert.ToDouble((Convert.ToInt64((Convert.ToInt64(Convert.ToInt64(Convert.ToDouble(Convert.ToInt64(Convert.ToDouble(clstatic_0.a27_0) * -1.1920928960153885E-07)) * (Convert.ToInt16(1 * s_a18_0) * (clstatic_0.a27_0 / -4503599625452928.0)))) * Convert.ToInt64(Convert.ToInt64(Convert.ToDouble(asgop20) / (Convert.ToUInt32(vtstatic_0.a74_0 + 1746873331) * -2517.6143380671915))))) * Convert.ToInt64((Convert.ToInt64((Convert.ToInt64(Convert.ToInt64(Convert.ToDouble(s_a61_0) * asgop32)) * Convert.ToInt64(64L)) / (Convert.ToInt64((Convert.ToInt64((asgop18 + 0L) / asgop15)) / clstatic_0.a96_0)))))) * (Convert.ToUInt32(Convert.ToUInt32(Convert.ToInt32(s_a18_0 / 7.8880111854144145E-10) / Convert.ToDouble(Convert.ToDecimal(10.4980392156863M) / Convert.ToDecimal(35.3437719552881165816490907M))) % Convert.ToUInt32(Convert.ToInt64(asgop22) + Convert.ToInt64(vtstatic_0.a25_0))) * (Convert.ToDouble((Convert.ToInt64(Convert.ToInt64(Convert.ToDouble(vtstatic_0.a25_0) * 1.7947574048581106E-09)) * Convert.ToInt64(Convert.ToInt64(Convert.ToDouble(vtstatic_0.a25_0) * 4.4868935121452766E-10))) * 8.3079175512520556E-13))))))) + Convert.ToInt64(Convert.ToInt64(Convert.ToUInt16((Convert.ToUInt16(Convert.ToUInt16(Convert.ToInt16(Convert.ToDecimal(asgop31) / (Convert.ToDecimal(clstatic_0.a26_0) * s_a75_0)) + Convert.ToInt16(Convert.ToInt64(Convert.ToInt64(clstatic_0.a26_0 - 7UL)) + Convert.ToInt64(asgop17))) % (Convert.ToUInt16(asgop16 / asgop35))))) - Convert.ToInt64(Convert.ToInt64(Convert.ToUInt16(Convert.ToUInt16(Convert.ToInt16(Convert.ToInt16(16475 / s_a18_0) * Convert.ToSingle(0.4701062F)) * Convert.ToSingle(Convert.ToSingle(vtstatic_0.a70_0 * (s_a42_0 / 223377976.25057024))))) - Convert.ToInt64((Convert.ToInt64(Convert.ToInt64(Convert.ToUInt16(Convert.ToUInt16(0.00013283314898831372 + (0.00013283314898831372 + (0.00013283314898831372 + 37004.999601500553)))) - Convert.ToInt64(vtstatic_0.a38_0))) * Convert.ToInt64((Convert.ToInt64(Convert.ToInt64(Convert.ToUInt32(clstatic_0.a17_0) - Convert.ToInt64(clstatic_0.a98_0))) * Convert.ToInt64((Convert.ToInt64(clstatic_0.a17_0) + clstatic_0.a68_0)))))))))))))) % (Convert.ToInt32(Convert.ToInt32((Convert.ToInt32((Convert.ToInt32(Convert.ToInt32(Convert.ToDecimal((Convert.ToInt32((Convert.ToUInt16((Convert.ToUInt16(Convert.ToInt32(asgop34) - Convert.ToInt32((asgop27)))) % vtstatic_0.a74_0))) + (Convert.ToInt32(Convert.ToInt64(s_a16_0) + Convert.ToInt64(Convert.ToInt64(Convert.ToInt32((clstatic_0.arr1d_0[28] + -109529)) - Convert.ToInt64(s_a86_0))))))) * (Convert.ToDecimal(Convert.ToInt64(Convert.ToDouble(s_a16_0) * clstatic_0.a57_0)) / asgop8)))) % (Convert.ToInt32(Convert.ToInt32((*a36_0) + (Convert.ToDecimal(asgop2 * asgop12))))))) / asgop3)))))));
        }
Beispiel #4
0
        private unsafe string EncodeObject(
            object data,
            MofField *mofField,
            char *ptr,
            ref uint offSet)
        {
            if (data == null)
            {
                mofField->DataLength  = 0U;
                mofField->DataPointer = null;
                return(null);
            }
            Type type = data.GetType();

            if (type.IsEnum)
            {
                data = Convert.ChangeType(data, Enum.GetUnderlyingType(type), CultureInfo.InvariantCulture);
            }
            switch (data)
            {
            case sbyte num:
                mofField->DataLength = 1U;
                sbyte *numPtr1 = (sbyte *)ptr;
                *      numPtr1 = num;
                mofField->DataPointer = numPtr1;
                ++offSet;
                break;

            case byte num:
                mofField->DataLength = 1U;
                byte *numPtr2 = (byte *)ptr;
                *     numPtr2 = num;
                mofField->DataPointer = numPtr2;
                ++offSet;
                break;

            case short num:
                mofField->DataLength = 2U;
                short *numPtr3 = (short *)ptr;
                *      numPtr3 = num;
                mofField->DataPointer = numPtr3;
                offSet += 2U;
                break;

            case ushort num:
                mofField->DataLength = 2U;
                ushort *numPtr4 = (ushort *)ptr;
                *       numPtr4 = num;
                mofField->DataPointer = numPtr4;
                offSet += 2U;
                break;

            case int num:
                mofField->DataLength = 4U;
                int *numPtr5 = (int *)ptr;
                *    numPtr5 = num;
                mofField->DataPointer = numPtr5;
                offSet += 4U;
                break;

            case uint num:
                mofField->DataLength = 4U;
                uint *numPtr6 = (uint *)ptr;
                *     numPtr6 = num;
                mofField->DataPointer = numPtr6;
                offSet += 4U;
                break;

            case long num:
                mofField->DataLength = 8U;
                long *numPtr7 = (long *)ptr;
                *     numPtr7 = num;
                mofField->DataPointer = numPtr7;
                offSet += 8U;
                break;

            case ulong num:
                mofField->DataLength = 8U;
                ulong *numPtr8 = (ulong *)ptr;
                *      numPtr8 = num;
                mofField->DataPointer = numPtr8;
                offSet += 8U;
                break;

            case char ch:
                mofField->DataLength = 2U;
                char *chPtr = ptr;
                *     chPtr = ch;
                mofField->DataPointer = chPtr;
                offSet += 2U;
                break;

            case float num:
                mofField->DataLength = 4U;
                float *numPtr9 = (float *)ptr;
                *      numPtr9 = num;
                mofField->DataPointer = numPtr9;
                offSet += 4U;
                break;

            case double num:
                mofField->DataLength = 8U;
                double *numPtr10 = (double *)ptr;
                *       numPtr10 = num;
                mofField->DataPointer = numPtr10;
                offSet += 8U;
                break;

            case bool flag:
                mofField->DataLength = 1U;
                bool *flagPtr = (bool *)ptr;
                *     flagPtr = flag;
                mofField->DataPointer = flagPtr;
                ++offSet;
                break;

            case Decimal num:
                mofField->DataLength = 16U;
                Decimal *numPtr11 = (Decimal *)ptr;
                *        numPtr11 = num;
                mofField->DataPointer = numPtr11;
                offSet += 16U;
                break;

            default:
                return(data.ToString());
            }
            return(null);
        }
Beispiel #5
0
        private unsafe string EncodeObject(object data, TraceProvider.MofField *mofField, char *ptr, ref uint offSet, byte *ptrArgInfo)
        {
            if (data == null)
            {
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)0;
                    *(short *)(ptrArgInfo + 1) = (short)0;
                }
                mofField->DataLength  = 0U;
                mofField->DataPointer = (void *)null;
                return((string)null);
            }
            string str1 = data as string;

            if (str1 != null)
            {
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)2;
                    *(short *)(ptrArgInfo + 1) = str1.Length < (int)ushort.MaxValue ? (short)(ushort)str1.Length : (short)-1;
                }
                else
                {
                    mofField->DataLength = 2U;
                    ushort *numPtr = (ushort *)ptr;
                    *       numPtr = str1.Length * 2 < (int)ushort.MaxValue ? (ushort)(str1.Length * 2) : ushort.MaxValue;
                    mofField->DataPointer = (void *)numPtr;
                    offSet += 2U;
                }
                return(str1);
            }
            if (data is sbyte)
            {
                mofField->DataLength = 1U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)3;
                }
                sbyte *numPtr = (sbyte *)ptr;
                *      numPtr = (sbyte)data;
                mofField->DataPointer = (void *)numPtr;
                ++offSet;
            }
            else if (data is byte)
            {
                mofField->DataLength = 1U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)4;
                }
                byte *numPtr = (byte *)ptr;
                *     numPtr = (byte)data;
                mofField->DataPointer = (void *)numPtr;
                ++offSet;
            }
            else if (data is short)
            {
                mofField->DataLength = 2U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)5;
                }
                short *numPtr = (short *)ptr;
                *      numPtr = (short)data;
                mofField->DataPointer = (void *)numPtr;
                offSet += 2U;
            }
            else if (data is ushort)
            {
                mofField->DataLength = 2U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)6;
                }
                ushort *numPtr = (ushort *)ptr;
                *       numPtr = (ushort)data;
                mofField->DataPointer = (void *)numPtr;
                offSet += 2U;
            }
            else if (data is int)
            {
                mofField->DataLength = 4U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)7;
                }
                int *numPtr = (int *)ptr;
                *    numPtr = (int)data;
                mofField->DataPointer = (void *)numPtr;
                offSet += 4U;
            }
            else if (data is uint)
            {
                mofField->DataLength = 4U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)8;
                }
                uint *numPtr = (uint *)ptr;
                *     numPtr = (uint)data;
                mofField->DataPointer = (void *)numPtr;
                offSet += 4U;
            }
            else if (data is long)
            {
                mofField->DataLength = 8U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)9;
                }
                long *numPtr = (long *)ptr;
                *     numPtr = (long)data;
                mofField->DataPointer = (void *)numPtr;
                offSet += 8U;
            }
            else if (data is ulong)
            {
                mofField->DataLength = 8U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)10;
                }
                ulong *numPtr = (ulong *)ptr;
                *      numPtr = (ulong)data;
                mofField->DataPointer = (void *)numPtr;
                offSet += 8U;
            }
            else if (data is char)
            {
                mofField->DataLength = 2U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)11;
                }
                char *chPtr = ptr;
                *     chPtr = (char)data;
                mofField->DataPointer = (void *)chPtr;
                offSet += 2U;
            }
            else if (data is float)
            {
                mofField->DataLength = 4U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)12;
                }
                float *numPtr = (float *)ptr;
                *      numPtr = (float)data;
                mofField->DataPointer = (void *)numPtr;
                offSet += 4U;
            }
            else if (data is double)
            {
                mofField->DataLength = 8U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)13;
                }
                double *numPtr = (double *)ptr;
                *       numPtr = (double)data;
                mofField->DataPointer = (void *)numPtr;
                offSet += 8U;
            }
            else if (data is bool)
            {
                mofField->DataLength = 1U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)14;
                }
                bool *flagPtr = (bool *)ptr;
                *     flagPtr = (bool)data;
                mofField->DataPointer = (void *)flagPtr;
                ++offSet;
            }
            else if (data is Decimal)
            {
                mofField->DataLength = 16U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)15;
                }
                Decimal *numPtr = (Decimal *)ptr;
                *        numPtr = (Decimal)data;
                mofField->DataPointer = (void *)numPtr;
                offSet += 16U;
            }
            else if (data.GetType().IsEnum)
            {
                mofField->DataLength = 8U;
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)9;
                }
                long *numPtr = (long *)ptr;
                *     numPtr = Convert.ToInt64(data);
                mofField->DataPointer = (void *)numPtr;
                offSet += 8U;
            }
            else
            {
                string str2 = data.ToString();
                if ((IntPtr)ptrArgInfo != IntPtr.Zero)
                {
                    *ptrArgInfo = (byte)2;
                    *(short *)(ptrArgInfo + 1) = str2.Length < (int)ushort.MaxValue ? (short)(ushort)str2.Length : (short)-1;
                }
                else
                {
                    mofField->DataLength = 2U;
                    ushort *numPtr = (ushort *)ptr;
                    *       numPtr = str2.Length * 2 < (int)ushort.MaxValue ? (ushort)(str2.Length * 2) : ushort.MaxValue;
                    mofField->DataPointer = (void *)numPtr;
                    offSet += 2U;
                }
                return(str2);
            }
            if ((IntPtr)ptrArgInfo != IntPtr.Zero)
            {
                *(short *)(ptrArgInfo + 1) = (short)(ushort)mofField->DataLength;
            }
            return(str1);
        }