// File: fjamour[P]icentral/src/graph_hash_t.cc
// Function: graph_hash_t::find_conn_comp(std::vector<graph_hash_t, std::allocator<graph_hash_t>>&)
void graph_hash_t::find_conn_comp(vector<graph_hash_t>& out_vec)
{
    out_vec.clear();
    tr1_map_t(bool) visited_map;
    i_fill_map<bool>(visited_map, false);
    for(tr1::unordered_map<node_id_t, bool>::iterator it = visited_map.begin(); it != visited_map.end(); ++it) {
        if(!it->second) {
            graph_hash_t g;
            node_id_t s = it->first;
            it->second = true;
            g.insert_node(s);
            //do a BFS from s, count the number of vertices, and mark the visited
            queue<node_id_t> q;
            q.push(s);
            while(!q.empty()) {
                node_id_t node = q.front(); q.pop();
                for(int i = 0; i < nodes_map[node].nbrs_vec.size(); ++i) {
                    node_id_t nbr = nodes_map[node].nbrs_vec[i];
                    g.insert_edge(node, nbr);
                    if(!visited_map[nbr]) {
                        visited_map[nbr] = true;
                        q.push(nbr);
                    }
                }
            }
            out_vec.push_back(g);
        }
    }
}

// Assembly:
subq $0x418, %rsp            # imm = 0x418
movq %rdi, 0x410(%rsp)
movq %rsi, 0x408(%rsp)
movq 0x410(%rsp), %rax
movq %rax, 0x80(%rsp)
movq 0x408(%rsp), %rdi
callq 0x54680
leaq 0x3d5(%rsp), %rdi
movq %rdi, 0x88(%rsp)
callq 0x42720
movq 0x88(%rsp), %r8
leaq 0x3d8(%rsp), %rdi
movl $0xa, %esi
leaq 0x3d7(%rsp), %rdx
leaq 0x3d6(%rsp), %rcx
callq 0x42730
jmp 0x53015
leaq 0x3d5(%rsp), %rdi
callq 0x42770
movq 0x80(%rsp), %rdi
leaq 0x3d8(%rsp), %rsi
xorl %edx, %edx
callq 0x53e60
jmp 0x5303b
leaq 0x3d8(%rsp), %rdi
callq 0x54490
movq %rdx, 0x70(%rsp)
movq %rax, 0x78(%rsp)
jmp 0x53054
movq 0x70(%rsp), %rax
movq 0x78(%rsp), %rcx
movq %rcx, 0x3b0(%rsp)
movq %rax, 0x3b8(%rsp)
leaq 0x3d8(%rsp), %rdi
callq 0x544f0
movq %rdx, 0x60(%rsp)
movq %rax, 0x68(%rsp)
jmp 0x53087
movq 0x60(%rsp), %rax
movq 0x68(%rsp), %rcx
movq %rcx, 0x3a0(%rsp)
movq %rax, 0x3a8(%rsp)
leaq 0x3b0(%rsp), %rdi
leaq 0x3a0(%rsp), %rsi
callq 0x544d0
movb %al, 0x5f(%rsp)
jmp 0x530bc
movb 0x5f(%rsp), %al
testb $0x1, %al
jne 0x530c9
jmp 0x533c2
leaq 0x3b0(%rsp), %rdi
callq 0x54530
movq %rax, 0x50(%rsp)
jmp 0x530dd
movq 0x50(%rsp), %rax
testb $0x1, 0x4(%rax)
jne 0x533ac
leaq 0xf8(%rsp), %rdi
callq 0x41780
jmp 0x530fb
leaq 0x3b0(%rsp), %rdi
callq 0x54530
movq %rax, 0x48(%rsp)
jmp 0x5310f
movq 0x48(%rsp), %rax
movl (%rax), %eax
movl %eax, 0xf4(%rsp)
leaq 0x3b0(%rsp), %rdi
callq 0x54530
movq %rax, 0x40(%rsp)
jmp 0x53131
movq 0x40(%rsp), %rax
movb $0x1, 0x4(%rax)
movl 0xf4(%rsp), %esi
leaq 0xf8(%rsp), %rdi
callq 0x522c0
jmp 0x53150
leaq 0xa0(%rsp), %rdi
callq 0x10580
jmp 0x5315f
leaq 0xa0(%rsp), %rdi
leaq 0xf4(%rsp), %rsi
callq 0x105b0
jmp 0x53176
jmp 0x53178
leaq 0xa0(%rsp), %rdi
callq 0x105e0
movb %al, 0x3f(%rsp)
jmp 0x5318b
movb 0x3f(%rsp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x5319a
jmp 0x5336a
leaq 0xa0(%rsp), %rdi
callq 0x10600
movq %rax, 0x30(%rsp)
jmp 0x531ae
movq 0x30(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x9c(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0x10610
jmp 0x531cb
movl $0x0, 0x98(%rsp)
movq 0x80(%rsp), %rdi
movslq 0x98(%rsp), %rax
movq %rax, 0x20(%rsp)
leaq 0x9c(%rsp), %rsi
callq 0x3afc0
movq %rax, 0x28(%rsp)
jmp 0x531ff
movq 0x28(%rsp), %rdi
callq 0xfd50
movq %rax, %rcx
movq 0x20(%rsp), %rax
cmpq %rcx, %rax
jae 0x53365
movq 0x80(%rsp), %rdi
leaq 0x9c(%rsp), %rsi
callq 0x3afc0
movq %rax, 0x18(%rsp)
jmp 0x53236
movq 0x18(%rsp), %rdi
movslq 0x98(%rsp), %rsi
callq 0xfbc0
movl (%rax), %eax
movl %eax, 0x94(%rsp)
movl 0x9c(%rsp), %esi
movl 0x94(%rsp), %edx
leaq 0xf8(%rsp), %rdi
callq 0x52420
jmp 0x5326e
leaq 0x3d8(%rsp), %rdi
leaq 0x94(%rsp), %rsi
callq 0x54540
movq %rax, 0x10(%rsp)
jmp 0x5328a
movq 0x10(%rsp), %rax
testb $0x1, (%rax)
jne 0x5334d
leaq 0x3d8(%rsp), %rdi
leaq 0x94(%rsp), %rsi
callq 0x54540
movq %rax, 0x8(%rsp)
jmp 0x532b4
movq 0x8(%rsp), %rax
movb $0x1, (%rax)
leaq 0xa0(%rsp), %rdi
leaq 0x94(%rsp), %rsi
callq 0x105b0
jmp 0x532d3
jmp 0x5334d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c8(%rsp)
movl %eax, 0x3c4(%rsp)
leaq 0x3d5(%rsp), %rdi
callq 0x42770
jmp 0x533e4
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c8(%rsp)
movl %eax, 0x3c4(%rsp)
jmp 0x533d7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c8(%rsp)
movl %eax, 0x3c4(%rsp)
jmp 0x5339d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x3c8(%rsp)
movl %eax, 0x3c4(%rsp)
leaq 0xa0(%rsp), %rdi
callq 0x10620
jmp 0x5339d
jmp 0x5334f
movl 0x98(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x98(%rsp)
jmp 0x531d6
jmp 0x53178
movq 0x408(%rsp), %rdi
leaq 0xf8(%rsp), %rsi
callq 0x41ea0
jmp 0x53381
leaq 0xa0(%rsp), %rdi
callq 0x10620
leaq 0xf8(%rsp), %rdi
callq 0x41f20
jmp 0x533ac
leaq 0xf8(%rsp), %rdi
callq 0x41f20
jmp 0x533d7
jmp 0x533ae
leaq 0x3b0(%rsp), %rdi
callq 0x54650
jmp 0x533bd
jmp 0x5306e
leaq 0x3d8(%rsp), %rdi
callq 0x42780
addq $0x418, %rsp            # imm = 0x418
retq
leaq 0x3d8(%rsp), %rdi
callq 0x42780
movq 0x3c8(%rsp), %rdi
callq 0x9cf0
nopw %cs:(%rax,%rax)