// File: /workspace/github_cpp_makefile_star2_O3/abaheti95[P]HMM-LDA/Models/cpp_hmm_lda/model.cpp
// Function: HMMLDA::HMMLDA(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&, int, int, int, int, double, double, double, double, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
HMMLDA::HMMLDA(string &vocab_filename, int topics, int classes, int start_word, int end_word, 
	double n_alpha, double n_beta, double n_gamma, double n_delta, string save_directory): 
	num_topics(topics), num_classes(classes), start_word_id(start_word), end_word_id(end_word), alpha(n_alpha),
	beta(n_beta), gamma(n_gamma), delta(n_delta), save_dir(save_directory), rng(rd()), topic_dist(0,topics-1), 
	class_dist(0, classes-3) {
	// All 2D vectors are empty at the moment
	START_WORD_CLASS = num_classes - 2;
	END_WORD_CLASS = num_classes - 1;
	vocab_size = this->read_vocabulary(vocab_filename);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x58, %rsp
movl %ecx, %r14d
movl %edx, %ebx
movq %rsi, %r15
movq %rdi, %r12
movq 0x10(%rbp), %rax
movl %edx, (%rdi)
movl %ecx, 0x4(%rdi)
movl %r8d, 0x8(%rdi)
movl %r9d, 0xc(%rdi)
movsd %xmm0, 0x18(%rdi)
movsd %xmm1, 0x20(%rdi)
movsd %xmm2, 0x28(%rdi)
movsd %xmm3, 0x30(%rdi)
addq $0x38, %rdi
leaq 0x48(%r12), %rcx
movq %rcx, -0x70(%rbp)
movq %rcx, 0x38(%r12)
movq (%rax), %rsi
movq 0x8(%rax), %rdx
addq %rsi, %rdx
movq %rdi, -0x78(%rbp)
callq 0x6174
leaq 0x58(%r12), %rax
movq %rax, -0x68(%rbp)
xorl %eax, %eax
movq %rax, 0x68(%r12)
xorps %xmm0, %xmm0
movups %xmm0, 0x58(%r12)
leaq 0x70(%r12), %rcx
movq %rcx, -0x60(%rbp)
leaq 0x78(%r12), %rcx
movl $0x0, 0x78(%r12)
movq %rax, 0x80(%r12)
movq %rcx, 0x88(%r12)
movq %rcx, 0x90(%r12)
movq %rax, 0x98(%r12)
leaq 0xa8(%r12), %r13
leaq 0xc0(%r12), %rax
movq %rax, -0x58(%rbp)
leaq 0xd8(%r12), %rax
movq %rax, -0x50(%rbp)
leaq 0xf0(%r12), %rax
movq %rax, -0x48(%rbp)
leaq 0x108(%r12), %rax
movq %rax, -0x40(%rbp)
leaq 0x120(%r12), %rax
movq %rax, -0x38(%rbp)
leaq 0x138(%r12), %rax
movq %rax, -0x30(%rbp)
movl $0xd8, %edx
movq %r13, %rdi
xorl %esi, %esi
callq 0x2120
leaq 0x8a0c(%rip), %rdi      # 0xb210
callq 0x22b0
movl %eax, %ecx
movq %rcx, 0x180(%r12)
movl $0x31, %eax
movq %rcx, %rdx
shrq $0x1e, %rdx
xorl %ecx, %edx
imull $0x6c078965, %edx, %ecx # imm = 0x6C078965
addl %eax, %ecx
addl $-0x30, %ecx
movq %rcx, (%r12,%rax,8)
incq %rax
cmpq $0x2a0, %rax            # imm = 0x2A0
jne 0x2818
movq $0x270, 0x1500(%r12) # imm = 0x270
decl %ebx
xorl %eax, %eax
movl %eax, 0x1508(%r12)
movl %ebx, 0x150c(%r12)
addl $-0x3, %r14d
movl %eax, 0x1510(%r12)
movl %r14d, 0x1514(%r12)
movl 0x4(%r12), %eax
leal -0x2(%rax), %ecx
movl %ecx, 0x10(%r12)
decl %eax
movl %eax, 0x14(%r12)
movq %r12, %rdi
movq %r15, %rsi
callq 0x2936
movl %eax, 0xa0(%r12)
addq $0x58, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x168(%r12), %rdi
testq %rdi, %rdi
je 0x28ba
callq 0x2210
movq 0x150(%r12), %rdi
testq %rdi, %rdi
je 0x28cc
callq 0x2210
movq -0x30(%rbp), %rdi
callq 0x5a94
movq -0x38(%rbp), %rdi
callq 0x5a94
movq -0x40(%rbp), %rdi
callq 0x5a94
movq -0x48(%rbp), %rdi
callq 0x5a94
movq -0x50(%rbp), %rdi
callq 0x5a94
movq -0x58(%rbp), %rdi
callq 0x5a94
movq %r13, %rdi
callq 0x5a94
movq -0x60(%rbp), %rdi
callq 0x606e
movq -0x68(%rbp), %rdi
callq 0x5ae8
movq -0x78(%rbp), %rax
movq (%rax), %rdi
cmpq -0x70(%rbp), %rdi
je 0x292e
callq 0x2210
movq %rbx, %rdi
callq 0x2390