// File: lluchs[P]sparsearray/./sparsearray.h
// Function: LinkedListBitmapSA<C4PXS, 10000ul>::Delete(C4PXS*)
void Delete(T *dataEl)
	{
		ListElement *el = reinterpret_cast<ListElement*>(dataEl);
		assert(el >= &array[0] && el < &array[N]);
		assert(UsedElements[el - array]);
		UsedElements.reset(el - array);

		ListElement *next = el->next;
		bool lookingForUsed = false, lookingForFree = !!firstFree;
		if (el == firstUsed)
			firstUsed = next;
		else
			lookingForUsed = true;

		ListElement *prevEl = el;
		while (--prevEl >= array && (lookingForUsed || lookingForFree))
		{
			if (lookingForUsed && UsedElements[prevEl - array])
			{
				prevEl->next = next;
				lookingForUsed = false;
			}
			if (lookingForFree && !UsedElements[prevEl - array])
			{
				el->next = prevEl->next;
				prevEl->next = el;
				lookingForFree = false;
			}
		}

		if (!!firstFree == lookingForFree)
		{
			if (firstFree)
				el->next = firstFree;
			else
				el->next = nullptr;
			firstFree = el;
		}
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdx
movq %rdx, -0x78(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rcx
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, -0x6a(%rbp)
jb 0x6e89
movq -0x78(%rbp), %rcx
movq -0x18(%rbp), %rax
addq $0x4e200, %rcx          # imm = 0x4E200
cmpq %rcx, %rax
setb %al
movb %al, -0x6a(%rbp)
movb -0x6a(%rbp), %al
testb $0x1, %al
jne 0x6e92
jmp 0x6e94
jmp 0x6eb3
leaq 0x24dd(%rip), %rdi      # 0x9378
leaq 0x2252(%rip), %rsi      # 0x90f4
movl $0x1f4, %edx            # imm = 0x1F4
leaq 0x2539(%rip), %rcx      # 0x93e7
callq 0x20c0
movq -0x78(%rbp), %rax
movq %rax, %rsi
addq $0x4e210, %rsi          # imm = 0x4E210
movq -0x18(%rbp), %rdx
subq %rax, %rdx
sarq $0x5, %rdx
leaq -0x28(%rbp), %rdi
callq 0x5070
leaq -0x28(%rbp), %rdi
callq 0x50b0
testb $0x1, %al
jne 0x6ee4
jmp 0x6ee6
jmp 0x6f05
leaq 0x2544(%rip), %rdi      # 0x9431
leaq 0x2200(%rip), %rsi      # 0x90f4
movl $0x1f5, %edx            # imm = 0x1F5
leaq 0x24e7(%rip), %rcx      # 0x93e7
callq 0x20c0
leaq -0x28(%rbp), %rdi
callq 0x50f0
movq -0x78(%rbp), %rax
movq %rax, %rdi
addq $0x4e210, %rdi          # imm = 0x4E210
movq -0x18(%rbp), %rsi
subq %rax, %rsi
sarq $0x5, %rsi
callq 0x54e0
movq -0x78(%rbp), %rcx
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x30(%rbp)
movb $0x0, -0x31(%rbp)
cmpq $0x0, 0x4e208(%rcx)
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movb %al, -0x32(%rbp)
movq -0x18(%rbp), %rax
cmpq 0x4e200(%rcx), %rax
jne 0x6f72
movq -0x78(%rbp), %rax
movq -0x30(%rbp), %rcx
movq %rcx, 0x4e200(%rax)
jmp 0x6f76
movb $0x1, -0x31(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x78(%rbp), %rdx
movq -0x40(%rbp), %rcx
addq $-0x20, %rcx
movq %rcx, -0x40(%rbp)
xorl %eax, %eax
cmpq %rdx, %rcx
movb %al, -0x79(%rbp)
jb 0x6faf
movb $0x1, %al
testb $0x1, -0x31(%rbp)
movb %al, -0x7a(%rbp)
jne 0x6fa9
movb -0x32(%rbp), %al
movb %al, -0x7a(%rbp)
movb -0x7a(%rbp), %al
movb %al, -0x79(%rbp)
movb -0x79(%rbp), %al
testb $0x1, %al
jne 0x6fbb
jmp 0x70b8
movb -0x31(%rbp), %cl
movb $0x0, -0x51(%rbp)
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x7b(%rbp)
je 0x6ffe
movq -0x78(%rbp), %rax
movq %rax, %rsi
addq $0x4e210, %rsi          # imm = 0x4E210
movq -0x40(%rbp), %rdx
subq %rax, %rdx
sarq $0x5, %rdx
leaq -0x50(%rbp), %rdi
callq 0x5070
movb $0x1, -0x51(%rbp)
leaq -0x50(%rbp), %rdi
callq 0x50b0
movb %al, -0x7b(%rbp)
movb -0x7b(%rbp), %al
movb %al, -0x7c(%rbp)
testb $0x1, -0x51(%rbp)
jne 0x700c
jmp 0x7015
leaq -0x50(%rbp), %rdi
callq 0x50f0
movb -0x7c(%rbp), %al
testb $0x1, %al
jne 0x701e
jmp 0x702e
movq -0x30(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x18(%rax)
movb $0x0, -0x31(%rbp)
movb -0x32(%rbp), %cl
movb $0x0, -0x69(%rbp)
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x7d(%rbp)
je 0x7073
movq -0x78(%rbp), %rax
movq %rax, %rsi
addq $0x4e210, %rsi          # imm = 0x4E210
movq -0x40(%rbp), %rdx
subq %rax, %rdx
sarq $0x5, %rdx
leaq -0x68(%rbp), %rdi
callq 0x5070
movb $0x1, -0x69(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x50b0
xorb $-0x1, %al
movb %al, -0x7d(%rbp)
movb -0x7d(%rbp), %al
movb %al, -0x7e(%rbp)
testb $0x1, -0x69(%rbp)
jne 0x7081
jmp 0x708a
leaq -0x68(%rbp), %rdi
callq 0x50f0
movb -0x7e(%rbp), %al
testb $0x1, %al
jne 0x7093
jmp 0x70b3
movq -0x40(%rbp), %rax
movq 0x18(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x18(%rbp), %rcx
movq -0x40(%rbp), %rax
movq %rcx, 0x18(%rax)
movb $0x0, -0x32(%rbp)
jmp 0x6f7e
movq -0x78(%rbp), %rax
cmpq $0x0, 0x4e208(%rax)
setne %al
xorb $-0x1, %al
xorb $-0x1, %al
andb $0x1, %al
movzbl %al, %eax
movb -0x32(%rbp), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
jne 0x711b
movq -0x78(%rbp), %rax
cmpq $0x0, 0x4e208(%rax)
je 0x7100
movq -0x78(%rbp), %rax
movq 0x4e208(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x18(%rax)
jmp 0x710c
movq -0x18(%rbp), %rax
movq $0x0, 0x18(%rax)
movq -0x78(%rbp), %rax
movq -0x18(%rbp), %rcx
movq %rcx, 0x4e208(%rax)
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nop