// File: splatlab[P]debgr/debruijn_graph.cc
// Function: dna::debruijn_graph::edge_iterator<std::queue>::edge_iterator(dna::debruijn_graph const&, std::unordered_set<dna::canonical_kmer, std::hash<dna::canonical_kmer>, std::equal_to<dna::canonical_kmer>, std::allocator<dna::canonical_kmer>>, unsigned long)
debruijn_graph::edge_iterator<Q>::edge_iterator(const debruijn_graph &g,
																									const unordered_set<node> strts,
																									uint64_t dpth)
		: dbg(g),
		anode(g, strts, dpth),
		nodeend(dbg, unordered_set<node>(), infinite_depth),
		anode_edges(),
		aedge(anode_edges.end())
	{
		while (anode != nodeend) {
			anode_edges = dbg.edges(*anode);
			aedge = anode_edges.begin();
			while (aedge != anode_edges.end() &&
						 !is_loop(*aedge) &&
						 is_right_node(*aedge, *anode)) {
				++aedge;
			}
			if (aedge != anode_edges.end())
				return;
			++anode;
		}
	}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x1c0, %rsp            # imm = 0x1C0
movq %rdx, -0x150(%rbp)
movq %rsi, %rax
movq -0x150(%rbp), %rsi
movq %rdi, -0x8(%rbp)
movq %rax, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x148(%rbp)
movq -0x10(%rbp), %rcx
movq %rcx, (%rax)
addq $0x8, %rax
movq %rax, -0x140(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x138(%rbp)
leaq -0x58(%rbp), %rdi
movq %rdi, -0x130(%rbp)
callq 0x188c0
movq -0x140(%rbp), %rdi
movq -0x138(%rbp), %rsi
movq -0x130(%rbp), %rdx
movq -0x20(%rbp), %rcx
callq 0x1b710
jmp 0x1b314
leaq -0x58(%rbp), %rdi
callq 0xded0
movq -0x148(%rbp), %rax
movq %rax, %rcx
addq $0x98, %rcx
movq %rcx, -0x168(%rbp)
movq (%rax), %rax
movq %rax, -0x160(%rbp)
xorps %xmm0, %xmm0
movaps %xmm0, -0x80(%rbp)
movaps %xmm0, -0x90(%rbp)
movaps %xmm0, -0xa0(%rbp)
movq $0x0, -0x70(%rbp)
leaq -0xa0(%rbp), %rdi
movq %rdi, -0x158(%rbp)
callq 0xfa60
movq -0x168(%rbp), %rdi
movq -0x160(%rbp), %rsi
movq -0x158(%rbp), %rdx
movq $-0x1, %rcx
callq 0x1b710
jmp 0x1b392
leaq -0xa0(%rbp), %rdi
callq 0xded0
movq -0x148(%rbp), %rdi
addq $0x128, %rdi            # imm = 0x128
movq %rdi, -0x170(%rbp)
xorl %esi, %esi
movl $0x30, %edx
callq 0x3100
movq -0x170(%rbp), %rdi
callq 0xe080
movq -0x148(%rbp), %rdi
addq $0x128, %rdi            # imm = 0x128
callq 0xe1b0
movq %rax, %rcx
movq -0x148(%rbp), %rax
movq %rcx, 0x158(%rax)
movq -0x148(%rbp), %rsi
movq %rsi, %rdi
addq $0x8, %rdi
addq $0x98, %rsi
callq 0xfe40
movb %al, -0x171(%rbp)
jmp 0x1b411
movb -0x171(%rbp), %al
testb $0x1, %al
jne 0x1b420
jmp 0x1b6e6
movq -0x148(%rbp), %rdi
movq (%rdi), %rax
movq %rax, -0x188(%rbp)
addq $0x8, %rdi
callq 0xfe90
movq %rdx, -0x180(%rbp)
movl %eax, -0x178(%rbp)
jmp 0x1b449
movq -0x188(%rbp), %rsi
movq -0x180(%rbp), %rax
movl -0x178(%rbp), %ecx
movl %ecx, -0xe0(%rbp)
movq %rax, -0xd8(%rbp)
movl -0xe0(%rbp), %edx
movq -0xd8(%rbp), %rcx
leaq -0xd0(%rbp), %rdi
callq 0x5df0
jmp 0x1b485
movq -0x148(%rbp), %rdi
addq $0x128, %rdi            # imm = 0x128
leaq -0xd0(%rbp), %rsi
callq 0x1b870
leaq -0xd0(%rbp), %rdi
callq 0xe0f0
movq -0x148(%rbp), %rdi
addq $0x128, %rdi            # imm = 0x128
callq 0xe180
movq %rax, %rcx
movq -0x148(%rbp), %rax
movq %rcx, -0xe8(%rbp)
movq -0xe8(%rbp), %rcx
movq %rcx, 0x158(%rax)
movq -0x148(%rbp), %rdi
movq %rdi, %rax
addq $0x158, %rax            # imm = 0x158
movq %rax, -0x198(%rbp)
addq $0x128, %rdi            # imm = 0x128
callq 0xe1b0
movq -0x198(%rbp), %rdi
movq %rax, -0xf0(%rbp)
leaq -0xf0(%rbp), %rsi
callq 0xe1e0
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x189(%rbp)
jne 0x1b52e
jmp 0x1b609
movq -0x148(%rbp), %rdi
addq $0x158, %rdi            # imm = 0x158
callq 0xe210
movups (%rax), %xmm0
movaps %xmm0, -0x100(%rbp)
movl -0x100(%rbp), %edi
movq -0xf8(%rbp), %rsi
callq 0x7ef0
movb %al, -0x199(%rbp)
jmp 0x1b565
movb -0x199(%rbp), %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x189(%rbp)
jne 0x1b609
jmp 0x1b57e
movq -0x148(%rbp), %rdi
addq $0x158, %rdi            # imm = 0x158
callq 0xe210
movq -0x148(%rbp), %rdi
movups (%rax), %xmm0
movaps %xmm0, -0x110(%rbp)
addq $0x8, %rdi
callq 0xfe90
movq %rdx, -0x1a8(%rbp)
movl %eax, -0x1a0(%rbp)
jmp 0x1b5ba
movq -0x1a8(%rbp), %rax
movl -0x1a0(%rbp), %ecx
movl %ecx, -0x120(%rbp)
movq %rax, -0x118(%rbp)
movl -0x110(%rbp), %edi
movq -0x108(%rbp), %rsi
movl -0x120(%rbp), %edx
movq -0x118(%rbp), %rcx
callq 0x9d60
movb %al, -0x1a9(%rbp)
jmp 0x1b5fb
movb -0x1a9(%rbp), %al
movb %al, -0x189(%rbp)
jmp 0x1b609
movb -0x189(%rbp), %al
testb $0x1, %al
jne 0x1b615
jmp 0x1b68a
movq -0x148(%rbp), %rdi
addq $0x158, %rdi            # imm = 0x158
callq 0xe230
jmp 0x1b4dd
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0x58(%rbp), %rdi
callq 0xded0
jmp 0x1b6fb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
leaq -0xa0(%rbp), %rdi
callq 0xded0
jmp 0x1b6ef
movq -0x170(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x60(%rbp)
movl %eax, -0x64(%rbp)
callq 0xe0f0
movq -0x168(%rbp), %rdi
callq 0x10220
jmp 0x1b6ef
movq -0x148(%rbp), %rdi
movq %rdi, %rax
addq $0x158, %rax            # imm = 0x158
movq %rax, -0x1b8(%rbp)
addq $0x128, %rdi            # imm = 0x128
callq 0xe1b0
movq -0x1b8(%rbp), %rdi
movq %rax, -0x128(%rbp)
leaq -0x128(%rbp), %rsi
callq 0xe1e0
testb $0x1, %al
jne 0x1b6cd
jmp 0x1b6cf
jmp 0x1b6e6
movq -0x148(%rbp), %rdi
addq $0x8, %rdi
callq 0xfed0
jmp 0x1b6e1
jmp 0x1b3ef
addq $0x1c0, %rsp            # imm = 0x1C0
popq %rbp
retq
movq -0x140(%rbp), %rdi
callq 0x10220
movq -0x60(%rbp), %rdi
callq 0x3480
nopw %cs:(%rax,%rax)
nop