// File: /workspace/github_cpp_makefile_star2_O2/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 %rbx
subq $0x410, %rsp            # imm = 0x410
xorl %eax, %eax
leaq 0x5738(%rip), %rcx      # 0x9310
movb $-0x1, %dl
leaq 0x100572f(%rip), %rsi   # 0x1009310
leaq 0x2005728(%rip), %rdi   # 0x2009310
cmpq $0x1000000, %rax        # imm = 0x1000000
je 0x3bfe
movb %dl, (%rax,%rcx)
movb %dl, (%rax,%rsi)
movb %dl, (%rax,%rdi)
incq %rax
jmp 0x3be8
leaq 0x2473(%rip), %rsi      # 0x6078
leaq 0x208(%rsp), %rbx
pushq $0xc
popq %rdx
movq %rbx, %rdi
callq 0x22a0
movq (%rbx), %rax
movq -0x18(%rax), %rax
testb $0x5, 0x228(%rsp,%rax)
je 0x3d0c
movq 0x53a4(%rip), %rdi      # 0x8fd8
leaq 0x2449(%rip), %rsi      # 0x6084
callq 0x2170
movq %rax, %rdi
callq 0x2100
leaq 0x5641(%rip), %rdi      # 0x9290
leaq 0x566a(%rip), %rsi      # 0x92c0
leaq 0x56b3(%rip), %rdx      # 0x9310
callq 0x3a08
leaq 0x5637(%rip), %rdi      # 0x92a0
leaq 0x5660(%rip), %rsi      # 0x92d0
leaq 0x1005699(%rip), %rdx   # 0x1009310
callq 0x3a08
leaq 0x562d(%rip), %rdi      # 0x92b0
leaq 0x5656(%rip), %rsi      # 0x92e0
leaq 0x200567f(%rip), %rdx   # 0x2009310
callq 0x3a08
leaq 0x8(%rsp), %rdi
callq 0x2250
leaq 0x23d1(%rip), %rsi      # 0x6078
leaq 0x8(%rsp), %rdi
pushq $0x14
popq %rdx
callq 0x2030
leaq 0x5655(%rip), %rsi      # 0x9310
leaq 0x8(%rsp), %rdi
movl $0x1000000, %edx        # imm = 0x1000000
callq 0x21b0
leaq 0x100563f(%rip), %rsi   # 0x1009310
leaq 0x8(%rsp), %rdi
movl $0x1000000, %edx        # imm = 0x1000000
callq 0x21b0
leaq 0x2005629(%rip), %rsi   # 0x2009310
leaq 0x8(%rsp), %rdi
movl $0x1000000, %edx        # imm = 0x1000000
callq 0x21b0
leaq 0x8(%rsp), %rdi
callq 0x21d0
leaq 0x8(%rsp), %rdi
callq 0x21f0
jmp 0x3d64
leaq 0x55fd(%rip), %rsi      # 0x9310
leaq 0x208(%rsp), %rdi
movl $0x1000000, %edx        # imm = 0x1000000
callq 0x21a0
leaq 0x10055e4(%rip), %rsi   # 0x1009310
leaq 0x208(%rsp), %rdi
movl $0x1000000, %edx        # imm = 0x1000000
callq 0x21a0
leaq 0x20055cb(%rip), %rsi   # 0x2009310
leaq 0x208(%rsp), %rdi
movl $0x1000000, %edx        # imm = 0x1000000
callq 0x21a0
leaq 0x208(%rsp), %rdi
callq 0x2050
leaq 0x208(%rsp), %rdi
callq 0x2060
addq $0x410, %rsp            # imm = 0x410
popq %rbx
retq
jmp 0x3d8b
movq %rax, %rbx
leaq 0x8(%rsp), %rdi
callq 0x21f0
jmp 0x3d8e
movq %rax, %rbx
leaq 0x208(%rsp), %rdi
callq 0x2060
movq %rbx, %rdi
callq 0x2280