// File: nikosgalanis[P]Vectors-Similarity-Search-and-Clustering/programs/Clustering/../../algorithms/Clustering/clustering.h
// Function: Clustering<double>::Clustering(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, std::vector<std::vector<double, std::allocator<double>>, std::allocator<std::vector<double, std::allocator<double>>>>, unsigned int)
Clustering(std::string assignment_method, std::vector<std::vector<T>> feature_vectors, uint32_t k)
		: feature_vectors(feature_vectors), k(k) {
			if (assignment_method != "lloyds") {
				cout << "Wrong assignment method selected\n";
				exit(EXIT_FAILURE);
			}
			// initialize all the classs fields necessary
			this->assignment_method = assignment_method;
			n_points = feature_vectors.size();
			assert(n_points);
			space_dim = feature_vectors.at(0).size();

			vector<int> assigned(n_points, 0);
			assigned_centroid = assigned;

		}

// Assembly:
subq $0xa8, %rsp
movq %rsi, 0x28(%rsp)
movq %rdx, 0x48(%rsp)
movq %rdi, 0xa0(%rsp)
movq %rsi, 0x98(%rsp)
movq %rdx, 0x90(%rsp)
movl %ecx, 0x8c(%rsp)
movq 0xa0(%rsp), %rdi
movq %rdi, 0x40(%rsp)
movl 0x8c(%rsp), %eax
movl %eax, (%rdi)
addq $0x10, %rdi
movq %rdi, 0x30(%rsp)
callq 0x22c0
movq 0x40(%rsp), %rdi
addq $0x30, %rdi
movq %rdi, 0x38(%rsp)
callq 0x3450
movq 0x40(%rsp), %rdi
movq 0x48(%rsp), %rsi
addq $0x48, %rdi
movq %rdi, 0x50(%rsp)
callq 0x5f70
jmp 0x60f1
movq 0x40(%rsp), %rdi
addq $0x60, %rdi
movq %rdi, 0x18(%rsp)
callq 0x8370
movq 0x28(%rsp), %rdi
leaq 0x15143(%rip), %rsi     # 0x1b253
callq 0x8380
movb %al, 0x27(%rsp)
jmp 0x611b
movb 0x27(%rsp), %al
testb $0x1, %al
jne 0x6125
jmp 0x6170
movq 0x20eac(%rip), %rdi     # 0x26fd8
leaq 0x15224(%rip), %rsi     # 0x1b357
callq 0x2200
jmp 0x613a
movl $0x1, %edi
callq 0x2260
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x80(%rsp)
movl %eax, 0x7c(%rsp)
jmp 0x62a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x80(%rsp)
movl %eax, 0x7c(%rsp)
jmp 0x628d
movq 0x28(%rsp), %rsi
movq 0x40(%rsp), %rdi
addq $0x10, %rdi
callq 0x2030
jmp 0x6185
movq 0x48(%rsp), %rdi
callq 0x4df0
movq %rax, %rcx
movq 0x40(%rsp), %rax
movl %ecx, 0x4(%rax)
cmpl $0x0, 0x4(%rax)
je 0x61a2
jmp 0x61c1
leaq 0x151d0(%rip), %rdi     # 0x1b379
leaq 0x151d2(%rip), %rsi     # 0x1b382
movl $0x83, %edx
leaq 0x15203(%rip), %rcx     # 0x1b3bf
callq 0x2170
movq 0x48(%rsp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0x6f30
movq %rax, 0x10(%rsp)
jmp 0x61d6
movq 0x10(%rsp), %rdi
callq 0x3f60
movq %rax, %rcx
movq 0x40(%rsp), %rax
movl %ecx, 0x8(%rax)
movslq 0x4(%rax), %rax
movq %rax, (%rsp)
movl $0x0, 0x5c(%rsp)
leaq 0x5b(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x83b0
movq (%rsp), %rsi
movq 0x8(%rsp), %rcx
leaq 0x60(%rsp), %rdi
leaq 0x5c(%rsp), %rdx
callq 0x83c0
jmp 0x6224
leaq 0x5b(%rsp), %rdi
callq 0x8440
movq 0x40(%rsp), %rdi
addq $0x60, %rdi
leaq 0x60(%rsp), %rsi
callq 0x8450
jmp 0x6243
leaq 0x60(%rsp), %rdi
callq 0x7a50
addq $0xa8, %rsp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x80(%rsp)
movl %eax, 0x7c(%rsp)
leaq 0x5b(%rsp), %rdi
callq 0x8440
jmp 0x628d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x80(%rsp)
movl %eax, 0x7c(%rsp)
leaq 0x60(%rsp), %rdi
callq 0x7a50
movq 0x18(%rsp), %rdi
callq 0x7a50
movq 0x50(%rsp), %rdi
callq 0x35b0
movq 0x38(%rsp), %rdi
callq 0x35b0
movq 0x30(%rsp), %rdi
callq 0x2150
movq 0x80(%rsp), %rdi
callq 0x2400
nopw %cs:(%rax,%rax)
nopl (%rax)