// File: /workspace/github_cpp_makefile_star2_O3/massykezzoul[P]jeu-de-la-vie/population/population.cpp
// Function: Population::Population(int, char const**)
Population::Population(int argc,const char** argv)
	:T(new Cellule[1]),generation(1),alive(0),alloc(1),probability(0.25),dimension(10),graine(0),speed(100000) {
	Option_tab tableau;
	int i = 1;
	int j = -1;
	float proba = -1;
	int dimension = -1;
	int speed = -1;
	string config = "";

	while (i < argc) {
		j = -1;
		if (tableau.is_nom(argv[i])) {
			// Est une option avec son nom long spécifié
			j = tableau.get_option(tableau.cherche(&argv[i][2]));
		} else if (tableau.is_raccourci(argv[i])) {
			// Est une option avec son raccourci spécifié
			j = tableau.get_option(tableau.cherche(argv[i][1]));
		}

		switch (j) {
			case 0:
				/* help */
				affiche_help();
				exit(0);
				break;
			case 1:
				/* version */
				affiche_version();
				exit(0);
				break;
			case 2:
				/* dimension */
				if ( (i + 1 < argc)  &&  (argv[i+1][0] != '-') ) {
					++i; // passe à l'argument de l'option
					dimension = strtod(argv[i],NULL); // recupere l'entier
				} else {
					cerr << "Argument manquant pour '" << argv[i] <<"'"
						<< endl;
				}	
				break;
			case 3:
				/* config */
				if ((i + 1 < argc)  &&  (argv[i+1][0] != '-')) {
					++i; // passe à l'argument de l'option
					config = argv[i]; // recupere la chaine
				} else {
					cerr << "Argument manquant pour '" << argv[i] <<"'"
						<< endl;
				}	
				break;
			case 4:
				/* probability */
				if ((i + 1 < argc)  &&  (argv[i+1][0] != '-')) {
					++i; // passe à l'argument de l'option
					proba = strtod(argv[i],NULL); // recupere l'entier
				} else {
					cerr << "Argument manquant pour '" << argv[i] <<"'"
						<< endl;
				}	
				break;
			case 5:
				/* speed */
				if ((i + 1 < argc)  &&  (argv[i+1][0] != '-')) {
					++i; // passe à l'argument de l'option
					speed = strtod(argv[i],NULL); // recupere l'entier
				} else {
					cerr << "Argument manquant pour '" << argv[i] <<"'"
						<< endl;
				}	
				break;
			default:
				cerr << "L'option \"" << argv[i] 
					<< "\" n'existe pas" << endl;
				break;
			}
			++i;
	}

	if (config != "") {
		// Initialisation avec un fichier de configuration
		string ligne,cle,valeur;
		ifstream file(config.c_str());
		if(file) {
			while (getline(file,ligne))
				if ( extraire_cle_valeur(ligne,cle,valeur) )
					set_cle_valeur(*this,cle,valeur);
		} else
			cerr << "Lecture du fichier de configuration impossible" << endl;
	}

	if (proba != -1) set_probability(proba);
	if (dimension != -1) set_dimension(dimension);
	if (speed != -1) set_speed(speed);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x668, %rsp            # imm = 0x668
movq %rdx, %r14
movl %esi, (%rsp)
movq %rdi, %rbx
movl $0x20, %edi
callq 0x2030
movq %rax, %r15
movq %rax, %rdi
callq 0x5088
movq %r15, (%rbx)
movl $0x1, %eax
movq %rax, 0x8(%rbx)
xorl %ecx, %ecx
movq %rcx, 0x10(%rbx)
movq %rax, 0x18(%rbx)
movl $0x3e800000, 0x20(%rbx) # imm = 0x3E800000
movq $0xa, 0x28(%rbx)
movq %rcx, 0x30(%rbx)
movq %rbx, 0x10(%rsp)
movl $0x186a0, 0x38(%rbx)    # imm = 0x186A0
leaq 0x340(%rsp), %rdi
callq 0x61e8
leaq 0x48(%rsp), %rax
movq %rax, -0x10(%rax)
leaq 0x4389(%rip), %rdx      # 0x70aa
leaq 0x38(%rsp), %rdi
movq %rdx, %rsi
callq 0x4f4c
cmpl $0x2, (%rsp)
jl 0x3141
movl $0x1, %r13d
movss 0x42be(%rip), %xmm0     # 0x7004
movss %xmm0, 0xc(%rsp)
movl $0xffffffff, 0x8(%rsp)  # imm = 0xFFFFFFFF
leaq 0x18(%rsp), %rbp
leaq 0x340(%rsp), %r15
movl $0xffffffff, 0x4(%rsp)  # imm = 0xFFFFFFFF
movslq %r13d, %r12
movq (%r14,%r12,8), %rsi
movq %rbp, %rdi
leaq 0x138(%rsp), %rdx
callq 0x4e24
movq %r15, %rbx
movq %r15, %rdi
movq %rbp, %rsi
callq 0x6c8a
movl %eax, %r15d
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x2dad
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x21a0
testb %r15b, %r15b
je 0x2e3c
movq (%r14,%r12,8), %rbp
leaq 0x2(%rbp), %r15
leaq 0x148(%rsp), %rax
movq %rax, 0x138(%rsp)
movq %r15, %rdi
callq 0x20c0
leaq (%rax,%rbp), %rdx
addq $0x2, %rdx
leaq 0x138(%rsp), %rbp
movq %rbp, %rdi
movq %r15, %rsi
callq 0x4f4c
movq %rbx, %r15
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x6ba8
movq %r15, %rdi
movl %eax, %esi
callq 0x6b1a
movl %eax, %r15d
movq 0x138(%rsp), %rdi
leaq 0x148(%rsp), %rax
cmpq %rax, %rdi
leaq 0x18(%rsp), %rbp
je 0x2ead
movq 0x148(%rsp), %rsi
incq %rsi
callq 0x21a0
jmp 0x2ead
movq (%r14,%r12,8), %rsi
leaq 0x118(%rsp), %r15
movq %r15, %rdi
leaq 0x138(%rsp), %rdx
callq 0x4e24
movq %rbx, %rdi
movq %r15, %rsi
callq 0x6d32
movl %eax, %r15d
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x2e8b
movq 0x128(%rsp), %rsi
incq %rsi
callq 0x21a0
testb %r15b, %r15b
je 0x2f01
movq (%r14,%r12,8), %rax
movsbl 0x1(%rax), %esi
movq %rbx, %rdi
callq 0x6c66
movq %rbx, %rdi
movl %eax, %esi
callq 0x6b1a
movl %eax, %r15d
cmpl $0x5, %r15d
ja 0x2f01
movl %r15d, %eax
leaq 0x4153(%rip), %rcx      # 0x7010
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leal 0x1(%r13), %ebp
cmpl (%rsp), %ebp
jge 0x2edf
movslq %ebp, %rax
movq (%r14,%rax,8), %rdi
cmpb $0x2d, (%rdi)
jne 0x3128
movl $0x18, %edx
movq 0x8105(%rip), %rdi      # 0xaff0
leaq 0x41b9(%rip), %rsi      # 0x70ab
callq 0x21d0
leaq 0x18(%rsp), %rbp
jmp 0x3025
movl $0xa, %edx
movq 0x80e3(%rip), %rdi      # 0xaff0
leaq 0x41b0(%rip), %rsi      # 0x70c4
callq 0x21d0
movq (%r14,%r12,8), %r12
testq %r12, %r12
je 0x2f4e
movq %r12, %rdi
callq 0x20c0
movl $0xe, %r15d
movq 0x80b9(%rip), %rdi      # 0xaff0
movq %r12, %rsi
movq %rax, %rdx
callq 0x21d0
leaq 0x4186(%rip), %rsi      # 0x70cf
jmp 0x3082
movq 0x809b(%rip), %rcx      # 0xaff0
movq (%rcx), %rax
movq -0x18(%rax), %rax
leaq (%rcx,%rax), %rdi
movl 0x20(%rcx,%rax), %esi
orl $0x1, %esi
movl $0xe, %r15d
callq 0x22c0
leaq 0x4156(%rip), %rsi      # 0x70cf
jmp 0x3082
leal 0x1(%r13), %ebp
cmpl (%rsp), %ebp
jge 0x2f97
movslq %ebp, %rax
movq (%r14,%rax,8), %rdi
cmpb $0x2d, (%rdi)
jne 0x30d8
movl $0x18, %edx
movq 0x804d(%rip), %rdi      # 0xaff0
leaq 0x4101(%rip), %rsi      # 0x70ab
callq 0x21d0
leaq 0x18(%rsp), %rbp
jmp 0x3025
leal 0x1(%r13), %ebp
cmpl (%rsp), %ebp
jge 0x2fcf
movslq %ebp, %rax
movq (%r14,%rax,8), %rdi
cmpb $0x2d, (%rdi)
jne 0x30eb
movl $0x18, %edx
movq 0x8015(%rip), %rdi      # 0xaff0
leaq 0x40c9(%rip), %rsi      # 0x70ab
callq 0x21d0
leaq 0x18(%rsp), %rbp
jmp 0x3025
leal 0x1(%r13), %ebp
cmpl (%rsp), %ebp
jge 0x3008
movslq %ebp, %rax
movq (%r14,%rax,8), %r15
cmpb $0x2d, (%r15)
jne 0x30fc
movl $0x18, %edx
movq 0x7fdc(%rip), %rdi      # 0xaff0
leaq 0x4090(%rip), %rsi      # 0x70ab
callq 0x21d0
leaq 0x18(%rsp), %rbp
movq (%r14,%r12,8), %r12
testq %r12, %r12
je 0x3057
movq %r12, %rdi
callq 0x20c0
movl $0x1, %r15d
movq 0x7fad(%rip), %rdi      # 0xaff0
movq %r12, %rsi
movq %rax, %rdx
callq 0x21d0
leaq 0x406d(%rip), %rsi      # 0x70c2
jmp 0x3082
movq 0x7f92(%rip), %rcx      # 0xaff0
movq (%rcx), %rax
movq -0x18(%rax), %rax
leaq (%rcx,%rax), %rdi
movl 0x20(%rcx,%rax), %esi
orl $0x1, %esi
movl $0x1, %r15d
callq 0x22c0
leaq 0x4040(%rip), %rsi      # 0x70c2
movq 0x7f67(%rip), %rdi      # 0xaff0
movq %r15, %rdx
callq 0x21d0
movq 0x7f58(%rip), %rcx      # 0xaff0
movq (%rcx), %rax
movq -0x18(%rax), %rdi
addq %rcx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x7f3a(%rip), %rdi      # 0xaff0
callq 0x2040
movq %rax, %rdi
callq 0x2100
incl %r13d
cmpl (%rsp), %r13d
movq %rbx, %r15
jl 0x2d69
jmp 0x315f
xorl %esi, %esi
callq 0x2130
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0xc(%rsp)
jmp 0x3137
xorl %esi, %esi
callq 0x2130
cvttsd2si %xmm0, %eax
movl %eax, 0x8(%rsp)
jmp 0x3137
movq 0x40(%rsp), %r12
movq %r15, %rdi
callq 0x20c0
leaq 0x38(%rsp), %rdi
xorl %esi, %esi
movq %r12, %rdx
movq %r15, %rcx
movq %rax, %r8
callq 0x2290
movl %ebp, %r13d
leaq 0x18(%rsp), %rbp
jmp 0x30c3
xorl %esi, %esi
callq 0x2130
cvttsd2si %xmm0, %eax
movl %eax, 0x4(%rsp)
movl %ebp, %r13d
leaq 0x18(%rsp), %rbp
jmp 0x30c3
movl $0xffffffff, 0x4(%rsp)  # imm = 0xFFFFFFFF
movss 0x3eb3(%rip), %xmm0     # 0x7004
movss %xmm0, 0xc(%rsp)
movl $0xffffffff, 0x8(%rsp)  # imm = 0xFFFFFFFF
leaq 0x3f44(%rip), %rsi      # 0x70aa
leaq 0x38(%rsp), %rdi
callq 0x20a0
testl %eax, %eax
movq 0x10(%rsp), %rbx
movl 0x8(%rsp), %ebp
je 0x32b2
leaq 0xc8(%rsp), %rcx
movq %rcx, -0x10(%rcx)
xorl %eax, %eax
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0xa8(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
leaq 0x88(%rsp), %rcx
movq %rcx, -0x10(%rcx)
movq %rax, -0x8(%rcx)
movb %al, (%rcx)
movq 0x38(%rsp), %rsi
leaq 0x138(%rsp), %rdi
movl $0x8, %edx
callq 0x2300
movq 0x138(%rsp), %rax
movq -0x18(%rax), %rax
testb $0x5, 0x158(%rsp,%rax)
je 0x3359
movq 0x7dff(%rip), %rbx      # 0xaff0
leaq 0x3ee6(%rip), %rsi      # 0x70de
movl $0x2e, %edx
movq %rbx, %rdi
callq 0x21d0
movq (%rbx), %rax
addq -0x18(%rax), %rbx
movq %rbx, %rdi
movl $0xa, %esi
callq 0x2180
movsbl %al, %esi
movq 0x7dcd(%rip), %rdi      # 0xaff0
callq 0x2040
movq %rax, %rdi
callq 0x2100
leaq 0x138(%rsp), %rdi
callq 0x2070
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x325f
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x21a0
movq 0x98(%rsp), %rdi
leaq 0xa8(%rsp), %rax
cmpq %rax, %rdi
movq 0x10(%rsp), %rbx
movl 0x8(%rsp), %ebp
je 0x328d
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x21a0
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x32b2
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x21a0
movss 0xc(%rsp), %xmm0
ucomiss 0x3d45(%rip), %xmm0     # 0x7004
jne 0x32c3
jnp 0x32cb
movq %rbx, %rdi
callq 0x3772
cmpl $-0x1, 0x4(%rsp)
je 0x32df
movslq 0x4(%rsp), %rsi
movq %rbx, %rdi
callq 0x3808
testl %ebp, %ebp
js 0x32e6
movl %ebp, 0x38(%rbx)
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x3302
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x21a0
movq $-0x320, %rbx           # imm = 0xFCE0
leaq 0x658(%rsp), %r14
movq -0x10(%r14), %rdi
cmpq %rdi, %r14
je 0x3325
movq (%r14), %rsi
incq %rsi
callq 0x21a0
movq -0x38(%r14), %rdi
leaq -0x28(%r14), %rax
cmpq %rdi, %rax
je 0x333d
movq (%rax), %rsi
incq %rsi
callq 0x21a0
addq $-0x50, %r14
addq $0x50, %rbx
jne 0x3311
addq $0x668, %rsp            # imm = 0x668
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x108(%rsp), %rbp
leaq 0x138(%rsp), %rbx
leaq 0xb8(%rsp), %r14
leaq 0xf8(%rsp), %r15
leaq 0xd8(%rsp), %r12
leaq (%rsp,%rax), %rdi
addq $0x138, %rdi            # imm = 0x138
movl $0xa, %esi
callq 0x2180
movsbl %al, %edx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2310
movq (%rax), %rcx
movq -0x18(%rcx), %rcx
testb $0x5, 0x20(%rax,%rcx)
jne 0x3230
movq %rbp, 0xf8(%rsp)
movq 0xb8(%rsp), %rsi
movq 0xc0(%rsp), %rdx
addq %rsi, %rdx
movq %r15, %rdi
callq 0x4eb6
movq %r15, %rdi
leaq 0x98(%rsp), %rsi
leaq 0x78(%rsp), %rdx
callq 0x564f
movl %eax, %r13d
movq 0xf8(%rsp), %rdi
cmpq %rbp, %rdi
je 0x340e
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x21a0
testb %r13b, %r13b
je 0x34b9
leaq 0x68(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x98(%rsp), %rsi
movq 0xa0(%rsp), %rdx
addq %rsi, %rdx
leaq 0x58(%rsp), %rdi
callq 0x4eb6
leaq 0xe8(%rsp), %rax
movq %rax, 0xd8(%rsp)
movq 0x78(%rsp), %rsi
movq 0x80(%rsp), %rdx
addq %rsi, %rdx
movq %r12, %rdi
callq 0x4eb6
movq 0x10(%rsp), %rdi
leaq 0x58(%rsp), %rsi
movq %r12, %rdx
callq 0x5984
movq 0xd8(%rsp), %rdi
leaq 0xe8(%rsp), %rax
cmpq %rax, %rdi
je 0x349d
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x21a0
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x34b9
movq 0x68(%rsp), %rsi
incq %rsi
callq 0x21a0
movq 0x138(%rsp), %rax
movq -0x18(%rax), %rax
jmp 0x3381
callq 0x372e
jmp 0x34d6
callq 0x36ac
xorl %edi, %edi
callq 0x21e0
movq %rax, %rbx
jmp 0x360a
movq %rax, %rbx
jmp 0x3697
movq %rax, %rbx
movl $0x20, %esi
movq %r15, %rdi
callq 0x2320
jmp 0x36a4
jmp 0x35fa
movq %rax, %rbx
movq 0xd8(%rsp), %rdi
leaq 0xe8(%rsp), %rax
cmpq %rax, %rdi
je 0x3534
movq 0xe8(%rsp), %rsi
incq %rsi
callq 0x21a0
jmp 0x3534
movq %rax, %rbx
movq 0x58(%rsp), %rdi
leaq 0x68(%rsp), %rax
cmpq %rax, %rdi
je 0x35fd
movq 0x68(%rsp), %rsi
jmp 0x356f
jmp 0x3678
movq %rax, %rbx
movq 0xf8(%rsp), %rdi
cmpq %rbp, %rdi
je 0x35fd
movq 0x108(%rsp), %rsi
incq %rsi
callq 0x21a0
jmp 0x35fd
movq %rax, %rbx
movq 0x118(%rsp), %rdi
leaq 0x128(%rsp), %rax
cmpq %rax, %rdi
je 0x367b
movq 0x128(%rsp), %rsi
jmp 0x366e
jmp 0x3678
jmp 0x3678
jmp 0x3678
movq %rax, %rbx
movq 0x18(%rsp), %rdi
leaq 0x28(%rsp), %rax
cmpq %rax, %rdi
je 0x367b
movq 0x28(%rsp), %rsi
jmp 0x366e
movq %rax, %rbx
movq 0x138(%rsp), %rdi
leaq 0x148(%rsp), %rax
cmpq %rax, %rdi
je 0x367b
movq 0x148(%rsp), %rsi
jmp 0x366e
movq %rax, %rbx
leaq 0x138(%rsp), %rdi
callq 0x2070
movq 0x78(%rsp), %rdi
leaq 0x88(%rsp), %rax
cmpq %rax, %rdi
je 0x362c
movq 0x88(%rsp), %rsi
incq %rsi
callq 0x21a0
movq 0x98(%rsp), %rdi
leaq 0xa8(%rsp), %rax
cmpq %rax, %rdi
je 0x3651
movq 0xa8(%rsp), %rsi
incq %rsi
callq 0x21a0
movq 0xb8(%rsp), %rdi
leaq 0xc8(%rsp), %rax
cmpq %rax, %rdi
je 0x367b
movq 0xc8(%rsp), %rsi
incq %rsi
callq 0x21a0
jmp 0x367b
movq %rax, %rbx
movq 0x38(%rsp), %rdi
leaq 0x48(%rsp), %rax
cmpq %rax, %rdi
je 0x3697
movq 0x48(%rsp), %rsi
incq %rsi
callq 0x21a0
leaq 0x340(%rsp), %rdi
callq 0x4e62
movq %rbx, %rdi
callq 0x22e0