public int?RemoveAt(int index) { if (index < 0 || (long)head == 0) { return(null); } Node *toFree = head->RemoveAt(index, (Node *)0, head); if ((long)toFree == 0) { return(null); } int result = toFree->GetPayload(); if (toFree == head) { head = (Node *)toFree->GetLink(); } else if (toFree == tail) { tail = (Node *)toFree->GetLink(); } unmanagedMemory.FreeHGlobal((IntPtr)toFree); return(result); }
public void DeleteAll(IUnmanagedMemory unmanagedMemory, Node *previousAddress, Node *ownAddress) { Node *nextAddress = MakeNextAddress(previousAddress); if ((long)nextAddress == 0) { return; } nextAddress->DeleteAll(unmanagedMemory, ownAddress, nextAddress); unmanagedMemory.FreeHGlobal((IntPtr)nextAddress); }