Ejemplo n.º 1
0
        public override void Write(ulong[] memorypos, MultiDimArray buffer, ulong[] bufferpos, ulong[] count)
        {
            RRMultiDimArrayUntyped dat2      = null;
            RRBaseArray            dat2Dims  = null;
            RRBaseArray            dat2Array = null;

            try
            {
                int elemcount = 1;
                foreach (ulong v in count)
                {
                    elemcount *= (int)v;
                }
                uint[] count2 = count.Select(x => (uint)x).ToArray();
                T[]    array  = new T[elemcount];


                MultiDimArray writedat1 = new MultiDimArray(count2, array);
                writedat1.AssignSubArray(new uint[count.Length], buffer, bufferpos.Select(x => (uint)x).ToArray(), count.Select(x => (uint)x).ToArray());

                dat2       = new RRMultiDimArrayUntyped();
                dat2Dims   = MessageElementDataUtil.ArrayToRRBaseArray(count2);
                dat2.Dims  = dat2Dims;
                dat2Array  = MessageElementDataUtil.ArrayToRRBaseArray(array);
                dat2.Array = dat2Array;

                vector_uint64_t memorypos3 = new vector_uint64_t();
                foreach (ulong val in memorypos)
                {
                    memorypos3.Add(val);
                }
                vector_uint64_t count3 = new vector_uint64_t();
                foreach (ulong val in count)
                {
                    count3.Add(val);
                }
                vector_uint64_t bufferpos3 = new vector_uint64_t();
                for (int i = 0; i < count.Length; i++)
                {
                    bufferpos3.Add(0);
                }
                WrappedMultiDimArrayMemoryClientUtil.Write(innermem, memorypos3, dat2, bufferpos3, count3);
            }
            finally
            {
                if (dat2 != null)
                {
                    if (dat2Dims != null)
                    {
                        dat2Dims.Dispose();
                    }
                    if (dat2Array != null)
                    {
                        dat2Array.Dispose();
                    }
                    dat2.Dispose();
                }
            }
        }
Ejemplo n.º 2
0
        public static MessageElement PackMultiDimArray(string name, MultiDimArray val)
        {
            if (val == null)
            {
                throw new NullReferenceException();
            }

            return(NewMessageElementDispose(name, RobotRaconteurNode.s.PackMultiDimArray(val)));
        }
Ejemplo n.º 3
0
        public override void Write(WrappedMultiDimArrayMemoryParams p)
        {
            RRMultiDimArrayUntyped pbuffer      = null;
            RRBaseArray            pbufferDims  = null;
            RRBaseArray            pbufferArray = null;

            try
            {
                ulong[] count     = p.count.ToArray();
                ulong[] bufferpos = p.bufferpos.ToArray();
                ulong[] memorypos = p.memorypos.ToArray();

                ulong elemcount = 1;
                foreach (ulong e in count)
                {
                    elemcount *= e;
                }

                pbuffer      = p.buffer;
                pbufferDims  = pbuffer.Dims;
                pbufferArray = pbuffer.Array;

                int[] dims  = (int[])MessageElementDataUtil.RRBaseArrayToArray(pbufferDims);
                T[]   array = (T[])MessageElementDataUtil.RRBaseArrayToArray(pbufferArray);

                MultiDimArray m = new MultiDimArray(count.Select(x => (uint)x).ToArray(), array);

                mem.Write(memorypos, m, bufferpos, count);
            }
            catch (Exception e)
            {
                using (MessageEntry merr = new MessageEntry())
                {
                    RobotRaconteurExceptionUtil.ExceptionToMessageEntry(e, merr);
                    RRDirectorExceptionHelper.SetError(merr, e.ToString());
                }
            }
            finally
            {
                if (p != null && pbuffer != null)
                {
                    if (pbufferDims != null)
                    {
                        pbufferDims.Dispose();
                    }
                    if (pbufferArray != null)
                    {
                        pbufferArray.Dispose();
                    }
                }
                if (p != null)
                {
                    p.Dispose();
                }
            }
        }
Ejemplo n.º 4
0
        public static MultiDimArray UnpackMultiDimArray(MessageElement m)
        {
            MultiDimArray a = RobotRaconteurNode.s.UnpackMultiDimArrayDispose(
                MessageElementUtil.CastDataAndDispose <MessageElementNestedElementList>(m));

            if (a == null)
            {
                throw new NullReferenceException();
            }
            return(a);
        }
Ejemplo n.º 5
0
        public virtual void AssignSubArray(uint[] memorypos, MultiDimArray buffer, uint[] bufferpos, uint[] count)
        {
            MultiDimArray mema = this;
            MultiDimArray memb = buffer;

            MultiDimArray_CalculateCopyIndicesIter iter = RobotRaconteurNET.MultiDimArray_CalculateCopyIndicesBeginIter(new vectoruint32(mema.Dims), new vectoruint32(memorypos), new vectoruint32(memb.Dims), new vectoruint32(bufferpos), new vectoruint32(count));

            uint indexa;
            uint indexb;
            uint len;

            while (iter.Next(out indexa, out indexb, out len))
            {
                Array.Copy(memb.Array_, (long)indexb, mema.Array_, (long)indexa, (long)len);
            }
        }
Ejemplo n.º 6
0
        public static MultiDimArray VerifyArrayLength(MultiDimArray a, int n_elems, uint[] len)
        {
            if (a.Dims.Length != len.Length)
            {
                throw new DataTypeException("Array dimension mismatch");
            }

            for (int i = 0; i < len.Length; i++)
            {
                if (a.Dims[i] != len[i])
                {
                    throw new DataTypeException("Array dimension mismatch");
                }
            }
            return(a);
        }
Ejemplo n.º 7
0
        public override void Read(ulong[] memorypos, MultiDimArray buffer, ulong[] bufferpos, ulong[] count)
        {
            RRMultiDimArrayUntyped dat      = null;
            RRBaseArray            datDims  = null;
            RRBaseArray            datArray = null;

            try
            {
                vector_uint64_t memorypos2 = new vector_uint64_t();
                foreach (ulong val in memorypos)
                {
                    memorypos2.Add(val);
                }
                vector_uint64_t count2 = new vector_uint64_t();
                foreach (ulong val in count)
                {
                    count2.Add(val);
                }

                dat = WrappedMultiDimArrayMemoryClientUtil.Read(innermem, memorypos2, count2);

                datDims  = dat.Dims;
                datArray = dat.Array;
                uint[] dims  = (uint[])MessageElementDataUtil.RRBaseArrayToArray(datDims);
                T[]    array = (T[])MessageElementDataUtil.RRBaseArrayToArray(datArray);

                MultiDimArray dat2 = new MultiDimArray(dims, array);
                buffer.AssignSubArray(bufferpos.Select(x => (uint)x).ToArray(), dat2, new uint[count.Length],
                                      count.Select(x => (uint)x).ToArray());
            }
            finally
            {
                if (dat != null)
                {
                    if (datDims != null)
                    {
                        datDims.Dispose();
                    }
                    if (datArray != null)
                    {
                        datArray.Dispose();
                    }
                    dat.Dispose();
                }
            }
        }
Ejemplo n.º 8
0
 public virtual void Attach(MultiDimArray memory)
 {
     this.multimemory = memory;
 }
Ejemplo n.º 9
0
 public MultiDimArrayMemory(MultiDimArray memory)
 {
     multimemory = memory;
 }
Ejemplo n.º 10
0
 public virtual void Write(ulong[] memorypos, MultiDimArray buffer, ulong[] bufferpos, ulong[] count)
 {
     multimemory.AssignSubArray(memorypos.Select(x => (uint)x).ToArray(), buffer, bufferpos.Select(x => (uint)x).ToArray(), count.Select(x => (uint)x).ToArray());
 }
Ejemplo n.º 11
0
 public virtual void Read(ulong[] memorypos, MultiDimArray buffer, ulong[] bufferpos, ulong[] count)
 {
     multimemory.RetrieveSubArray(memorypos.Select(x => (uint)x).ToArray(), buffer, bufferpos.Select(x => (uint)x).ToArray(), count.Select(x => (uint)x).ToArray());
 }