Beispiel #1
0
        public static void AddXYTran(float a, AlignedArray x, AlignedArray y, int[] mprowiv,
                                     int[] mprowcol, int[] mprowrun, int[] runs, float[] coefs, int crow)
        {
            Contracts.Assert(Compat(x));
            Contracts.Assert(Compat(y));
            Contracts.Assert(0 < crow && crow <= x.Size);
            Contracts.AssertNonEmpty(mprowiv);
            Contracts.Assert(mprowiv.Length == crow);
            Contracts.AssertNonEmpty(mprowcol);
            Contracts.Assert(mprowcol.Length == crow);
            Contracts.Assert(mprowrun == null || mprowrun.Length == crow);
            Contracts.AssertNonEmpty(runs);
            Contracts.AssertNonEmpty(coefs);

            unsafe
            {
                fixed(float *px = &x.Items[0])
                fixed(float *py      = &y.Items[0])
                fixed(int *pmprowiv  = &mprowiv[0])
                fixed(int *pmprowcol = &mprowcol[0])
                fixed(int *pruns     = &runs[0])
                fixed(float *pcoefs  = &coefs[0])
                {
                    if (mprowrun == null)
                    {
                        Thunk.AddXYTranCX(a, Ptr(x, px), Ptr(y, py), pmprowiv, pmprowcol, pruns, pcoefs, crow);
                    }
                    else
                    {
                        fixed(int *pmprowrun = mprowrun)
                        Thunk.AddXYTranDX(a, Ptr(x, px), Ptr(y, py), pmprowiv, pmprowcol, pmprowrun, pruns, pcoefs, crow);
                    }
                }
            }
        }