public void Clear() { if (m_data.Length > 0) { PinnedListImpl.SetCount(m_list, 0); } }
public void Assign(List <T> sourceList) { var sourceData = PinnedListImpl.GetInternalArray(sourceList); var count = sourceList.Count; ResizeDiscard(count); System.Array.Copy(sourceData, m_data, count); }
public void LockList(Action <List <T> > body) { if (m_gch.IsAllocated) { m_gch.Free(); } body(m_list); m_data = PinnedListImpl.GetInternalArray(m_list); m_gch = GCHandle.Alloc(m_data, GCHandleType.Pinned); }
public void Resize(int size) { if (size > m_data.Length) { LockList(l => { l.Capacity = size; }); } PinnedListImpl.SetCount(m_list, size); }
public void ResizeDiscard(int size) { if (size > m_data.Length) { if (m_gch.IsAllocated) { m_gch.Free(); } m_data = new T[size]; m_list = PinnedListImpl.CreateIntrusiveList(m_data); m_gch = GCHandle.Alloc(m_data, GCHandleType.Pinned); } else { PinnedListImpl.SetCount(m_list, size); } }
public PinnedList(List <T> data, bool clone = false) { m_list = clone ? new List <T>(data) : data; m_data = PinnedListImpl.GetInternalArray(m_list); m_gch = GCHandle.Alloc(m_data, GCHandleType.Pinned); }
public PinnedList(T[] data, bool clone = false) { m_data = clone ? (T[])data.Clone() : data; m_list = PinnedListImpl.CreateIntrusiveList(m_data); m_gch = GCHandle.Alloc(m_data, GCHandleType.Pinned); }
public PinnedList(int size = 0) { m_data = new T[size]; m_list = PinnedListImpl.CreateIntrusiveList(m_data); m_gch = GCHandle.Alloc(m_data, GCHandleType.Pinned); }