// File: /workspace/github_cpp_makefile_star2_O3/giovifazi[P]knossos-bloodbath/Map.cpp
// Function: Map::delete_map(bool)
void Map::delete_map(bool garbage)
{
   if (garbage)
   {
      // Creo due iteratori per la mappa
      listaY *itery = NULL, *itery_prec = NULL;
      listaX *iterx = NULL, *iterx_prec = NULL;

      // Sposto itery fino all' ultimo nodo listaY della mappa e itery_prec al
      // penultimo
      for (int i = 0; i < height; i++)
      {
         //print_raw();
         itery = origin;
         itery_prec = itery;

         while (itery->down != NULL)
         {
            itery_prec = itery;
            itery = itery->down;
         }

         // Sposto iterx fino all' ultimo nodo listaX della mappa e iterx_prec
         // al penultimo
         for (int k = 0; k < width; k++)
         {
            //print_raw();
            iterx = itery->h;
            iterx_prec = iterx;

            while (iterx->next != NULL)
            {
               iterx_prec = iterx;
               iterx = iterx->next;
            }

            // Controllo se rimane un solo nodo nella riga piu in basso
            if (iterx != iterx_prec)
            {
               // Cancello il nodo più in basso a dx della mappa e rinizio il ciclo
               delete iterx;
               iterx_prec->next = NULL;
            }
            else
            {
               // Se rimane un solo nodo colonna non reimposto a NULL itery_prec
               if (itery_prec != itery)
                  itery_prec->down = NULL;
               
               // Se rimane un nodo riga cancello pure il puntatore colonna
               delete itery->h;           // Cancello ultimo nodo riga
               delete itery;              // Cancello il nodo colonna piu in basso
            }
         }       
      }
   }
      
   // Reinizializza il tutto
   origin = new listaY;
   origin->down = NULL;

   origin->h = new listaX;
   origin->h->next = NULL;
   origin->h->val = 0;

   width = 1;
   height = 1;

   mostUp = 0;
   mostLeft = 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %rbx
testl %esi, %esi
je 0x3568
movl 0xc(%rbx), %eax
testl %eax, %eax
jle 0x3568
xorl %edx, %edx
movq (%rbx), %rcx
movq %rcx, %r14
movq %r14, %r12
movq %rcx, %r14
movq (%rcx), %rcx
testq %rcx, %rcx
jne 0x34de
cmpl $0x0, 0x8(%rbx)
jle 0x355e
movl %edx, -0x2c(%rbp)
xorl %r13d, %r13d
movq 0x8(%r14), %rdi
movq %rdi, %rcx
movq %rdi, %rax
movq %rax, %r15
movq %rcx, %rax
movq (%rcx), %rcx
testq %rcx, %rcx
jne 0x3502
cmpq %r15, %rax
je 0x352b
movl $0x18, %esi
movq %rax, %rdi
callq 0x2120
movq $0x0, (%r15)
jmp 0x354f
cmpq %r14, %r12
je 0x3538
movq $0x0, (%r12)
movl $0x18, %esi
callq 0x2120
movl $0x10, %esi
movq %r14, %rdi
callq 0x2120
incl %r13d
cmpl 0x8(%rbx), %r13d
jl 0x34f8
movl 0xc(%rbx), %eax
movl -0x2c(%rbp), %edx
incl %edx
cmpl %eax, %edx
jl 0x34d8
movl $0x10, %edi
callq 0x2110
movq %rax, %r14
movq %rax, (%rbx)
xorl %r15d, %r15d
movq %r15, (%rax)
movl $0x18, %edi
callq 0x2110
movb $0x0, 0x10(%rax)
movq %rax, 0x8(%r14)
movq %r15, (%rax)
movl $0x0, 0x8(%rax)
movsd 0x6b1e(%rip), %xmm0     # 0xa0c0
movups %xmm0, 0x8(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop