// File: jenniferdr[P]proyectoIAI/basepatrones.cc
// Function: generarBD()
void generarBD() {
  // Llena la base de datos inicialmente con 'infinito'
  for (int i = 0; i < (16*16*16*16*16*16); i++) {
    bd1[i] = 255;
    bd2[i] = 255;
    bd3[i] = 255;
  }

  // Si un archivo con nombre 'patrones.bd' ya existe, se carga de allí en vez
  // de generarla. Sino, se genera y se escribe en disco.
  std::ifstream entrada("patrones.bd", std::ios::in | std::ios::binary);
  if (!entrada) {
    std::cout << "No existe la base de datos de patrones, se generará" << std::endl;
    llenarBDPat(set1, estado_inicial1, bd1);
    llenarBDPat(set2, estado_inicial2, bd2);
    llenarBDPat(set3, estado_inicial3, bd3);

    std::ofstream salida;
    salida.open("patrones.bd", std::ios::out | std::ios::binary);
    salida.write((char*) bd1, 16*16*16*16*16*16*sizeof(unsigned char));
    salida.write((char*) bd2, 16*16*16*16*16*16*sizeof(unsigned char));
    salida.write((char*) bd3, 16*16*16*16*16*16*sizeof(unsigned char));
    salida.close();

  } else {
    entrada.read((char*) bd1, 16*16*16*16*16*16*sizeof(unsigned char));
    entrada.read((char*) bd2, 16*16*16*16*16*16*sizeof(unsigned char));
    entrada.read((char*) bd3, 16*16*16*16*16*16*sizeof(unsigned char));
    entrada.close();
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x440, %rsp            # imm = 0x440
movl $0x0, -0x4(%rbp)
cmpl $0x1000000, -0x4(%rbp)  # imm = 0x1000000
jge 0x8ad3
movslq -0x4(%rbp), %rcx
leaq 0xa8ca(%rip), %rax      # 0x13370
movb $-0x1, (%rax,%rcx)
movslq -0x4(%rbp), %rcx
leaq 0x100a8bb(%rip), %rax   # 0x1013370
movb $-0x1, (%rax,%rcx)
movslq -0x4(%rbp), %rcx
leaq 0x200a8ac(%rip), %rax   # 0x2013370
movb $-0x1, (%rax,%rcx)
movl -0x4(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
jmp 0x8a92
movl $0x8, %edi
movl $0x4, %esi
callq 0x9010
movl %eax, %edx
leaq 0x357d(%rip), %rsi      # 0xc068
leaq -0x210(%rbp), %rdi
callq 0x2350
movq -0x210(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x210(%rbp,%rax), %rdi
callq 0x20e0
movb %al, -0x421(%rbp)
jmp 0x8b17
movb -0x421(%rbp), %al
testb $0x1, %al
jne 0x8b26
jmp 0x8c8f
movq 0xa4ab(%rip), %rdi      # 0x12fd8
leaq 0x3540(%rip), %rsi      # 0xc074
callq 0x21a0
movq %rax, -0x430(%rbp)
jmp 0x8b42
movq -0x430(%rbp), %rdi
movq 0xa478(%rip), %rsi      # 0x12fc8
callq 0x21d0
jmp 0x8b57
leaq 0xa792(%rip), %rdi      # 0x132f0
leaq 0xa7bb(%rip), %rsi      # 0x13320
leaq 0xa804(%rip), %rdx      # 0x13370
callq 0x8650
jmp 0x8b73
leaq 0xa786(%rip), %rdi      # 0x13300
leaq 0xa7af(%rip), %rsi      # 0x13330
leaq 0x100a7e8(%rip), %rdx   # 0x1013370
callq 0x8650
jmp 0x8b8f
leaq 0xa77a(%rip), %rdi      # 0x13310
leaq 0xa7a3(%rip), %rsi      # 0x13340
leaq 0x200a7cc(%rip), %rdx   # 0x2013370
callq 0x8650
jmp 0x8bab
leaq -0x420(%rbp), %rdi
callq 0x22f0
jmp 0x8bb9
movl $0x10, %edi
movl $0x4, %esi
callq 0x9010
movl %eax, -0x434(%rbp)
jmp 0x8bd0
movl -0x434(%rbp), %edx
leaq 0x348b(%rip), %rsi      # 0xc068
leaq -0x420(%rbp), %rdi
callq 0x2030
jmp 0x8beb
leaq 0xa77e(%rip), %rsi      # 0x13370
leaq -0x420(%rbp), %rdi
movl $0x1000000, %edx        # imm = 0x1000000
callq 0x2250
jmp 0x8c05
leaq 0x100a764(%rip), %rsi   # 0x1013370
leaq -0x420(%rbp), %rdi
movl $0x1000000, %edx        # imm = 0x1000000
callq 0x2250
jmp 0x8c1f
leaq 0x200a74a(%rip), %rsi   # 0x2013370
leaq -0x420(%rbp), %rdi
movl $0x1000000, %edx        # imm = 0x1000000
callq 0x2250
jmp 0x8c39
leaq -0x420(%rbp), %rdi
callq 0x2270
jmp 0x8c47
leaq -0x420(%rbp), %rdi
callq 0x2290
jmp 0x8ced
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x218(%rbp)
movl %eax, -0x21c(%rbp)
jmp 0x8d02
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x218(%rbp)
movl %eax, -0x21c(%rbp)
leaq -0x420(%rbp), %rdi
callq 0x2290
jmp 0x8d02
leaq 0xa6da(%rip), %rsi      # 0x13370
leaq -0x210(%rbp), %rdi
movl $0x1000000, %edx        # imm = 0x1000000
callq 0x2240
jmp 0x8ca9
leaq 0x100a6c0(%rip), %rsi   # 0x1013370
leaq -0x210(%rbp), %rdi
movl $0x1000000, %edx        # imm = 0x1000000
callq 0x2240
jmp 0x8cc3
leaq 0x200a6a6(%rip), %rsi   # 0x2013370
leaq -0x210(%rbp), %rdi
movl $0x1000000, %edx        # imm = 0x1000000
callq 0x2240
jmp 0x8cdd
leaq -0x210(%rbp), %rdi
callq 0x2060
jmp 0x8ceb
jmp 0x8ced
leaq -0x210(%rbp), %rdi
callq 0x2070
addq $0x440, %rsp            # imm = 0x440
popq %rbp
retq
leaq -0x210(%rbp), %rdi
callq 0x2070
movq -0x218(%rbp), %rdi
callq 0x2320
nopw (%rax,%rax)