/// <summary> /// Adds the elements of the specified collection to the end of the List /// </summary> /// <param name="collection">The collection whose elements should be added to the end of the List. The collection itself cannot be null.</param> public unsafe void AddRange(doubleListAccessor collection) { if (collection == null) { throw new ArgumentNullException("collection is null."); } int delta = collection.length; if (collection.m_cellId != m_cellId) { m_ptr = ResizeFunction(m_ptr - 4, *(int *)(m_ptr - 4) + 4, delta); Memory.Copy(collection.m_ptr, m_ptr + *(int *)m_ptr + 4, delta); *(int *)m_ptr += delta; } else { byte[] tmpcell = new byte[delta]; fixed(byte *tmpcellptr = tmpcell) { Memory.Copy(collection.m_ptr, tmpcellptr, delta); m_ptr = ResizeFunction(m_ptr - 4, *(int *)(m_ptr - 4) + 4, delta); Memory.Copy(tmpcellptr, m_ptr + *(int *)m_ptr + 4, delta); *(int *)m_ptr += delta; } } this.m_ptr += 4; }
/// <summary> /// Adds the elements of the specified collection to the end of the List /// </summary> /// <param name="collection">The collection whose elements should be added to the end of the List. The collection itself cannot be null.</param> public unsafe void AddRange(List <double> collection) { if (collection == null) { throw new ArgumentNullException("collection is null."); } doubleListAccessor tcollection = collection; int delta = tcollection.length; m_ptr = ResizeFunction(m_ptr - 4, *(int *)(m_ptr - 4) + 4, delta); Memory.Copy(tcollection.m_ptr, m_ptr + *(int *)m_ptr + 4, delta); *(int *)m_ptr += delta; this.m_ptr += 4; }
/// <summary> /// Inserts the elements of a collection into the List at the specified index. /// </summary> /// <param name="index">The zero-based index at which the new elements should be inserted.</param> /// <param name="collection">The collection whose elements should be inserted into the List. The collection itself cannot be null, but it can contain elements that are null, if type T is a reference type.</param> public unsafe void InsertRange(int index, List <double> collection) { if (collection == null) { throw new ArgumentNullException("collection is null."); } if (index < 0) { throw new ArgumentOutOfRangeException("index is less than 0."); } if (index > Count) { throw new ArgumentOutOfRangeException("index is greater than Count."); } doubleListAccessor tmpAccessor = collection; byte *targetPtr = m_ptr + (index << 3); int offset = (int)(targetPtr - m_ptr); m_ptr = ResizeFunction(m_ptr - 4, offset + 4, tmpAccessor.length); Memory.Copy(tmpAccessor.m_ptr, m_ptr + offset + 4, tmpAccessor.length); *(int *)m_ptr += tmpAccessor.length; this.m_ptr += 4; }
internal _iterator(doubleListAccessor target) { targetPtr = target.m_ptr; endPtr = target.m_ptr + target.length; }