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(); } } }
public static MessageElement PackMultiDimArray(string name, MultiDimArray val) { if (val == null) { throw new NullReferenceException(); } return(NewMessageElementDispose(name, RobotRaconteurNode.s.PackMultiDimArray(val))); }
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(); } } }
public static MultiDimArray UnpackMultiDimArray(MessageElement m) { MultiDimArray a = RobotRaconteurNode.s.UnpackMultiDimArrayDispose( MessageElementUtil.CastDataAndDispose <MessageElementNestedElementList>(m)); if (a == null) { throw new NullReferenceException(); } return(a); }
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); } }
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); }
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(); } } }
public virtual void Attach(MultiDimArray memory) { this.multimemory = memory; }
public MultiDimArrayMemory(MultiDimArray memory) { multimemory = memory; }
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()); }
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()); }