Exemple #1
0
        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);
        }