[END] // if t_data_type is array /// <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, t_list 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."); } t_list_accessor tmpAccessor = collection; byte * targetPtr = m_ptr; for (int i = 0; i < index; i++) { MODULE_CALL("PushPointerThroughFieldType", "$t_data_type"); } 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; }
/// <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(t_list_accessor 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(t_list collection) { if (collection == null) { throw new ArgumentNullException("collection is null."); } t_list_accessor 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; }
internal _iterator(t_list_accessor target) { targetPtr = target.m_ptr; endPtr = targetPtr + target.length; this.target = target; }