// File: /workspace/github_cpp_makefile_star2_O2/ldionne[P]hawick_circuits/boost/graph/hawick_circuits.hpp
// Function: void boost::hawick_circuits_detail::call_hawick_circuits<boost::hawick_circuits_detail::get_all_adjacent_vertices, boost::directed_graph<boost::no_property, boost::no_property, boost::no_property>, cycle_printer<std::ostream>, boost::adj_list_vertex_property_map<boost::adjacency_list<boost::listS, boost::listS, boost::bidirectionalS, boost::property<boost::vertex_index_t, unsigned int, boost::no_property>, boost::property<boost::edge_index_t, unsigned int, boost::no_property>, boost::no_property, boost::listS>, unsigned int, unsigned int const&, boost::vertex_index_t>>(boost::directed_graph<boost::no_property, boost::no_property, boost::no_property> const&, cycle_printer<std::ostream>, boost::adj_list_vertex_property_map<boost::adjacency_list<boost::listS, boost::listS, boost::bidirectionalS, boost::property<boost::vertex_index_t, unsigned int, boost::no_property>, boost::property<boost::edge_index_t, unsigned int, boost::no_property>, boost::no_property, boost::listS>, unsigned int, unsigned int const&, boost::vertex_index_t> const&)
void call_hawick_circuits(Graph const& graph,
                          Visitor /* by value */ visitor,
                          VertexIndexMap const& vertex_index_map) {
    typedef graph_traits<Graph> Traits;
    typedef typename Traits::vertex_descriptor Vertex;
    typedef typename Traits::vertices_size_type VerticesSize;
    typedef typename Traits::vertex_iterator VertexIterator;

    typedef std::vector<Vertex> Stack;
    typedef std::vector<std::vector<Vertex> > ClosedMatrix;

    typedef hawick_circuits_from<
                Graph, Visitor, VertexIndexMap, Stack, ClosedMatrix,
                GetAdjacentVertices
            > SubAlgorithm;

    VerticesSize const n_vertices = num_vertices(graph);
    Stack stack; stack.reserve(n_vertices);
    ClosedMatrix closed(n_vertices);

    VertexIterator start, last;
    for (boost::tie(start, last) = vertices(graph); start != last; ++start) {
        // Note1: The sub algorithm may NOT be reused once it has been called.

        // Note2: We reuse the Stack and the ClosedMatrix (after clearing them)
        // in each iteration to avoid redundant destruction and construction.
        // It would be strictly equivalent to have these as member variables
        // of the sub algorithm.
        SubAlgorithm sub_algo(graph, visitor, vertex_index_map,
                              stack, closed, n_vertices);
        sub_algo(*start);
        stack.clear();
        typename ClosedMatrix::iterator row, last_row = closed.end();
        for (row = closed.begin(); row != last_row; ++row)
            row->clear();
    }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x98, %rsp
movq %rdx, -0x48(%rbp)
movq %rdi, %r14
movq %rsi, -0x68(%rbp)
movq 0x38(%rdi), %r15
xorps %xmm0, %xmm0
leaq -0x40(%rbp), %rdi
movaps %xmm0, (%rdi)
andq $0x0, 0x10(%rdi)
movq %r15, %rsi
callq 0x3ba0
leaq -0x60(%rbp), %rdi
leaq -0xb0(%rbp), %rdx
movq %r15, %rsi
callq 0x3c36
leaq 0x18(%r14), %rbx
leaq -0xb0(%rbp), %r13
movq %rbx, %r12
movq (%r12), %r12
cmpq %rbx, %r12
je 0x3b49
movq %r15, (%rsp)
movq %r13, %rdi
movq %r14, %rsi
leaq -0x68(%rbp), %rdx
movq -0x48(%rbp), %rcx
leaq -0x40(%rbp), %r8
leaq -0x60(%rbp), %r9
callq 0x3c88
movq 0x10(%r12), %rsi
movq %r13, %rdi
callq 0x3d8e
movq -0x40(%rbp), %rax
cmpq %rax, -0x38(%rbp)
je 0x3b1e
movq %rax, -0x38(%rbp)
movq -0x60(%rbp), %rax
movq -0x58(%rbp), %rcx
cmpq %rcx, %rax
je 0x3b3e
movq (%rax), %rdx
cmpq %rdx, 0x8(%rax)
je 0x3b38
movq %rdx, 0x8(%rax)
addq $0x18, %rax
jmp 0x3b26
leaq -0x70(%rbp), %rdi
callq 0x41ec
jmp 0x3adb
leaq -0x60(%rbp), %rdi
callq 0x3d9c
leaq -0x40(%rbp), %rdi
callq 0x474c
addq $0x98, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
jmp 0x3b6f
movq %rax, %rbx
jmp 0x3b8e
movq %rax, %rbx
jmp 0x3b85
movq %rax, %rbx
leaq -0x70(%rbp), %rdi
callq 0x41ec
leaq -0x60(%rbp), %rdi
callq 0x3d9c
leaq -0x40(%rbp), %rdi
callq 0x474c
movq %rbx, %rdi
callq 0x2280
nop