// File: auton1[P]viterbi/vcf_entry.cpp
// Function: vcf_entry::parse_basic_entry(bool, bool, bool)
void vcf_entry::parse_basic_entry(bool parse_ALT, bool parse_FILTER, bool parse_INFO)
{
	if(!basic_parsed)
	{
		getline(data_stream, CHROM, '\t');

		getline(data_stream, ID, '\t');
		POS = atoi(ID.c_str());
		getline(data_stream, ID, '\t');
		getline(data_stream, REF, '\t');
		getline(data_stream, ALT_str, '\t');
		getline(data_stream, QUAL_str, '\t');
		getline(data_stream, FILTER_str, '\t');
		getline(data_stream, INFO_str, '\t');

		QUAL = header::str2double(QUAL_str);

		// Convert to uppercase for consistency
		// Note that VCF v4.1 allows mixtures of lower/upper case in REF and ALT.
		// However, the spec specifically states that tools using VCF are not required
		// to preserve the case.
		std::transform(REF.begin(), REF.end(), REF.begin(), ::toupper);
		std::transform(ALT_str.begin(), ALT_str.end(),ALT_str.begin(), ::toupper);
	}
	basic_parsed = true;

	if (parse_ALT && !parsed_ALT)
		set_ALT(ALT_str);
	if (parse_FILTER && !parsed_FILTER)
		set_FILTER(FILTER_str);
	if (parse_INFO && !parsed_INFO)
		set_INFO(INFO_str);
}

// Assembly:
subq $0x58, %rsp
movb %cl, %al
movb %dl, %cl
movb %sil, %dl
movq %rdi, 0x50(%rsp)
andb $0x1, %dl
movb %dl, 0x4f(%rsp)
andb $0x1, %cl
movb %cl, 0x4e(%rsp)
andb $0x1, %al
movb %al, 0x4d(%rsp)
movq 0x50(%rsp), %rax
movq %rax, (%rsp)
testb $0x1, 0x3d8(%rax)
jne 0x3ed3e
movq (%rsp), %rsi
movq %rsi, %rdi
addq $0x240, %rdi            # imm = 0x240
addq $0x3e0, %rsi            # imm = 0x3E0
movl $0x9, %edx
callq 0x6a80
movq (%rsp), %rsi
movq %rsi, %rdi
addq $0x240, %rdi            # imm = 0x240
addq $0x408, %rsi            # imm = 0x408
movl $0x9, %edx
callq 0x6a80
movq (%rsp), %rdi
addq $0x408, %rdi            # imm = 0x408
callq 0x61a0
movq %rax, %rdi
callq 0x6890
movq (%rsp), %rsi
movl %eax, 0x400(%rsi)
movq %rsi, %rdi
addq $0x240, %rdi            # imm = 0x240
addq $0x408, %rsi            # imm = 0x408
movl $0x9, %edx
callq 0x6a80
movq (%rsp), %rsi
movq %rsi, %rdi
addq $0x240, %rdi            # imm = 0x240
addq $0x428, %rsi            # imm = 0x428
movl $0x9, %edx
callq 0x6a80
movq (%rsp), %rsi
movq %rsi, %rdi
addq $0x240, %rdi            # imm = 0x240
addq $0x6b8, %rsi            # imm = 0x6B8
movl $0x9, %edx
callq 0x6a80
movq (%rsp), %rsi
movq %rsi, %rdi
addq $0x240, %rdi            # imm = 0x240
addq $0x738, %rsi            # imm = 0x738
movl $0x9, %edx
callq 0x6a80
movq (%rsp), %rsi
movq %rsi, %rdi
addq $0x240, %rdi            # imm = 0x240
addq $0x6d8, %rsi            # imm = 0x6D8
movl $0x9, %edx
callq 0x6a80
movq (%rsp), %rsi
movq %rsi, %rdi
addq $0x240, %rdi            # imm = 0x240
addq $0x6f8, %rsi            # imm = 0x6F8
movl $0x9, %edx
callq 0x6a80
movq (%rsp), %rdi
addq $0x738, %rdi            # imm = 0x738
movsd 0x362cd(%rip), %xmm0    # 0x74f40
callq 0x306c0
movq (%rsp), %rdi
movsd %xmm0, 0x460(%rdi)
addq $0x428, %rdi            # imm = 0x428
callq 0x6470
movq (%rsp), %rdi
movq %rax, 0x40(%rsp)
addq $0x428, %rdi            # imm = 0x428
callq 0x6270
movq (%rsp), %rdi
movq %rax, 0x38(%rsp)
addq $0x428, %rdi            # imm = 0x428
callq 0x6470
movq %rax, 0x30(%rsp)
movq 0x40(%rsp), %rdi
movq 0x38(%rsp), %rsi
movq 0x30(%rsp), %rdx
movq 0x54303(%rip), %rcx     # 0x92fd8
callq 0x39680
movq (%rsp), %rdi
movq %rax, 0x28(%rsp)
addq $0x6b8, %rdi            # imm = 0x6B8
callq 0x6470
movq (%rsp), %rdi
movq %rax, 0x20(%rsp)
addq $0x6b8, %rdi            # imm = 0x6B8
callq 0x6270
movq (%rsp), %rdi
movq %rax, 0x18(%rsp)
addq $0x6b8, %rdi            # imm = 0x6B8
callq 0x6470
movq %rax, 0x10(%rsp)
movq 0x20(%rsp), %rdi
movq 0x18(%rsp), %rsi
movq 0x10(%rsp), %rdx
movq 0x542a4(%rip), %rcx     # 0x92fd8
callq 0x39680
movq %rax, 0x8(%rsp)
movq (%rsp), %rax
movb $0x1, 0x3d8(%rax)
testb $0x1, 0x4f(%rsp)
je 0x3ed70
movq (%rsp), %rax
testb $0x1, 0x3da(%rax)
jne 0x3ed70
movq (%rsp), %rdi
movq %rdi, %rsi
addq $0x6b8, %rsi            # imm = 0x6B8
callq 0x4fe40
testb $0x1, 0x4e(%rsp)
je 0x3ed97
movq (%rsp), %rax
testb $0x1, 0x3db(%rax)
jne 0x3ed97
movq (%rsp), %rdi
movq %rdi, %rsi
addq $0x6d8, %rsi            # imm = 0x6D8
callq 0x517f0
testb $0x1, 0x4d(%rsp)
je 0x3edbe
movq (%rsp), %rax
testb $0x1, 0x3dc(%rax)
jne 0x3edbe
movq (%rsp), %rdi
movq %rdi, %rsi
addq $0x6f8, %rsi            # imm = 0x6F8
callq 0x51950
addq $0x58, %rsp
retq
nopw %cs:(%rax,%rax)