// File: /workspace/github_cpp_makefile_star2_O2/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 0x3314
xorl %eax, %eax
cmpl 0xc(%rbx), %eax
jge 0x3314
movl %eax, -0x2c(%rbp)
movq (%rbx), %rax
movq %rax, %r12
movq %r12, %r13
movq %rax, %r12
movq (%rax), %rax
testq %rax, %rax
jne 0x32a5
xorl %r15d, %r15d
cmpl 0x8(%rbx), %r15d
jge 0x330d
movq 0x8(%r12), %rdi
movq %rdi, %rcx
movq %rdi, %rax
movq %rax, %r14
movq %rcx, %rax
movq (%rcx), %rcx
testq %rcx, %rcx
jne 0x32c7
cmpq %r14, %rax
je 0x32eb
movq %rax, %rdi
pushq $0x18
popq %rsi
callq 0x2140
andq $0x0, (%r14)
jmp 0x3308
cmpq %r12, %r13
je 0x32f5
andq $0x0, (%r13)
pushq $0x18
popq %rsi
callq 0x2140
movq %r12, %rdi
pushq $0x10
popq %rsi
callq 0x2140
incl %r15d
jmp 0x32b6
movl -0x2c(%rbp), %eax
incl %eax
jmp 0x3297
pushq $0x10
popq %rdi
callq 0x2130
movq %rax, %r14
movq %rax, (%rbx)
andq $0x0, (%rax)
pushq $0x18
popq %rdi
callq 0x2130
movb $0x0, 0x10(%rax)
andq $0x0, (%rax)
andl $0x0, 0x8(%rax)
movq %rax, 0x8(%r14)
movsd 0x4d7a(%rip), %xmm0     # 0x80c0
movups %xmm0, 0x8(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop