// File: /workspace/github_cpp_makefile_star2_O2/xbai0624[P]dnn/src/ConstructLayer.cpp
// Function: ConstructLayer::Print()
void ConstructLayer::Print()
{
    // layer id
    std::cout<<"----------- Layer ID: "<<GetID()<<" ------------"<<std::endl;
    // layer type
    if(__type == LayerType::cnn )std::cout<<"layer type: cnn"<<std::endl;
    else if(__type == LayerType::fullyConnected) std::cout<<"layer type: FC"<<std::endl;
    // drop out factor
    std::cout<<"drop out factor: "<<__dropOut<<std::endl;
    std::cout<<"use drop out: "<<__use_drop_out<<std::endl;
    if(__type == LayerType::fullyConnected)
        std::cout<<"number of fc neurons: "<<__n_neurons_fc<<std::endl;
    if(__type == LayerType::cnn)
    {
        std::cout<<"number of cnn kernels: "<<__n_kernels_cnn<<std::endl;
        std::cout<<"kernel  dimension: "<<__kernelDim<<std::endl;
    }
    // weight matrix
    std::cout<<" --- w&b "<<std::endl;
    for(size_t i=0;i<__weightMatrix.size();i++)
    {
        std::cout<<"weight matrix : "<<i<<std::endl;
        std::cout<<__weightMatrix[i]<<std::endl;
        std::cout<<"bias matrix: "<<i<<std::endl;
        std::cout<<__biasVector[i]<<std::endl;
    }
    // drop out filter
    std::cout<<" --- active flag matrix "<<std::endl;
    for(size_t i=0;i<__activeFlag.size();i++)
    {
        std::cout<<"active flag : "<<i<<std::endl;
        std::cout<<__activeFlag[i]<<std::endl;
    }

    // active weight matrix
    std::cout<<" --- active w&b "<<std::endl;
    for(size_t i=0;i<__weightMatrixActive.size();i++)
    {
        std::cout<<"active weight matrix : "<<i<<std::endl;
        std::cout<<__weightMatrixActive[i]<<std::endl;
        std::cout<<"active bias matrix: "<<i<<std::endl;
        std::cout<<__biasVectorActive[i]<<std::endl;
    }

    std::cout<<std::endl<<"==================================="<<std::endl;
    std::cout<<" --- neuron information: "<<std::endl;
    for(size_t ii=0;ii<__neurons.size();ii++)
    {
        auto __neuron_dimension = __neurons[ii].Dimension();
        std::cout<<"Neruon Matrix Dimension: "<<__neuron_dimension<<std::endl;

        for(size_t i=0;i<__neuron_dimension.first;i++)
        {
            for(size_t j=0;j<__neuron_dimension.second;j++)
            {
                std::cout<<"coord:  ("<<i<<", "<<j<<")"<<std::endl;
                __neurons[ii][i][j]->Print();
            }
        }
    }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdi, %rbp
movq 0x22e10(%rip), %rdi     # 0x32fd8
leaq 0x1315c(%rip), %rsi     # 0x2332b
callq 0x4240
movq %rax, %rbx
movq (%rbp), %rax
movq %rbp, %rdi
callq *0x298(%rax)
movq %rbx, %rdi
movl %eax, %esi
callq 0x43a0
leaq 0x1314d(%rip), %rsi     # 0x23342
movq %rax, %rdi
callq 0x4240
movq %rax, %rdi
callq 0x4130
movl 0xc(%rbp), %eax
cmpl $0x1, %eax
je 0x1021a
testl %eax, %eax
jne 0x10235
leaq 0x13148(%rip), %rsi     # 0x23360
jmp 0x10221
leaq 0x1312f(%rip), %rsi     # 0x23350
movq 0x22db0(%rip), %rdi     # 0x32fd8
callq 0x4240
movq %rax, %rdi
callq 0x4130
movq 0x22d9c(%rip), %rbx     # 0x32fd8
leaq 0x1312c(%rip), %rsi     # 0x2336f
movq %rbx, %rdi
callq 0x4240
movsd 0x3d8(%rbp), %xmm0
movq %rax, %rdi
callq 0x4320
movq %rax, %rdi
callq 0x4130
leaq 0x13117(%rip), %rsi     # 0x23381
movq %rbx, %rdi
callq 0x4240
movzbl 0x3c8(%rbp), %esi
movq %rax, %rdi
callq 0x4350
movq %rax, %rdi
callq 0x4130
movl 0xc(%rbp), %eax
testl %eax, %eax
jne 0x102ba
movq 0x22d41(%rip), %rdi     # 0x32fd8
leaq 0x130f2(%rip), %rsi     # 0x23390
callq 0x4240
movq 0x10(%rbp), %rsi
movq %rax, %rdi
callq 0x41a0
movq %rax, %rdi
callq 0x4130
movl 0xc(%rbp), %eax
cmpl $0x1, %eax
jne 0x1030c
movq 0x22d12(%rip), %rbx     # 0x32fd8
leaq 0x130da(%rip), %rsi     # 0x233a7
movq %rbx, %rdi
callq 0x4240
movq 0x18(%rbp), %rsi
movq %rax, %rdi
callq 0x41a0
movq %rax, %rdi
callq 0x4130
leaq 0x130cf(%rip), %rsi     # 0x233bf
movq %rbx, %rdi
callq 0x4240
leaq 0x20(%rbp), %rsi
movq %rax, %rdi
callq 0x17602
movq %rax, %rdi
callq 0x4130
movq 0x22cc5(%rip), %r14     # 0x32fd8
leaq 0x130b9(%rip), %rsi     # 0x233d3
movq %r14, %rdi
callq 0x4240
movq %rax, %rdi
callq 0x4130
xorl %ebx, %ebx
leaq 0x130ea(%rip), %r15     # 0x2341d
leaq 0x130fb(%rip), %r12     # 0x23435
xorl %r13d, %r13d
movq 0x68(%rbp), %rax
subq 0x60(%rbp), %rax
cqto
pushq $0x18
popq %rcx
idivq %rcx
cmpq %rax, %r13
jae 0x103c8
movq %r14, %rdi
movq %r15, %rsi
callq 0x4240
movq %rax, %rdi
movq %r13, %rsi
callq 0x41a0
movq %rax, %rdi
callq 0x4130
movq 0x60(%rbp), %rsi
addq %rbx, %rsi
movq %r14, %rdi
callq 0x18551
movq %rax, %rdi
callq 0x4130
movq %r14, %rdi
movq %r12, %rsi
callq 0x4240
movq %rax, %rdi
movq %r13, %rsi
callq 0x41a0
movq %rax, %rdi
callq 0x4130
movq 0x78(%rbp), %rsi
addq %rbx, %rsi
movq %r14, %rdi
callq 0x18551
movq %rax, %rdi
callq 0x4130
incq %r13
addq $0x18, %rbx
jmp 0x1033d
movq 0x22c09(%rip), %r14     # 0x32fd8
leaq 0x13007(%rip), %rsi     # 0x233dd
movq %r14, %rdi
callq 0x4240
movq %rax, %rdi
callq 0x4130
xorl %r12d, %r12d
leaq 0x13006(%rip), %r15     # 0x233f6
xorl %ebx, %ebx
movq 0x110(%rbp), %rax
subq 0x108(%rbp), %rax
cqto
pushq $0x18
popq %rcx
idivq %rcx
cmpq %rax, %rbx
jae 0x1044e
movq %r14, %rdi
movq %r15, %rsi
callq 0x4240
movq %rax, %rdi
movq %rbx, %rsi
callq 0x41a0
movq %rax, %rdi
callq 0x4130
movq 0x108(%rbp), %rsi
addq %r12, %rsi
movq %r14, %rdi
callq 0x1735e
movq %rax, %rdi
callq 0x4130
incq %rbx
addq $0x18, %r12
jmp 0x103f2
movq 0x22b83(%rip), %r14     # 0x32fd8
leaq 0x12fa9(%rip), %rsi     # 0x23405
movq %r14, %rdi
callq 0x4240
movq %rax, %rdi
callq 0x4130
xorl %ebx, %ebx
leaq 0x12fa1(%rip), %r15     # 0x23416
leaq 0x12fb2(%rip), %r12     # 0x2342e
xorl %r13d, %r13d
movq 0xe0(%rbp), %rax
subq 0xd8(%rbp), %rax
cqto
pushq $0x18
popq %rcx
idivq %rcx
cmpq %rax, %r13
jae 0x10516
movq %r14, %rdi
movq %r15, %rsi
callq 0x4240
movq %rax, %rdi
movq %r13, %rsi
callq 0x41a0
movq %rax, %rdi
callq 0x4130
movq 0xd8(%rbp), %rsi
addq %rbx, %rsi
movq %r14, %rdi
callq 0x18551
movq %rax, %rdi
callq 0x4130
movq %r14, %rdi
movq %r12, %rsi
callq 0x4240
movq %rax, %rdi
movq %r13, %rsi
callq 0x41a0
movq %rax, %rdi
callq 0x4130
movq 0xf0(%rbp), %rsi
addq %rbx, %rsi
movq %r14, %rdi
callq 0x18551
movq %rax, %rdi
callq 0x4130
incq %r13
addq $0x18, %rbx
jmp 0x1047f
movq 0x22abb(%rip), %rbx     # 0x32fd8
movq %rbx, %rdi
callq 0x4130
leaq 0x12f17(%rip), %rsi     # 0x23443
movq %rax, %rdi
callq 0x4240
movq %rax, %rdi
callq 0x4130
leaq 0x12f24(%rip), %rsi     # 0x23467
movq %rbx, %rdi
callq 0x4240
movq %rax, %rdi
callq 0x4130
xorl %esi, %esi
leaq 0x13726(%rip), %r15     # 0x23c82
movq 0x40(%rbp), %rdi
movq 0x48(%rbp), %rax
subq %rdi, %rax
cqto
pushq $0x18
popq %rcx
idivq %rcx
cmpq %rax, %rsi
jae 0x10645
movq %rsi, 0x10(%rsp)
imulq $0x18, %rsi, %r14
addq %r14, %rdi
callq 0x111fe
movq %rax, (%rsp)
movq %rdx, 0x8(%rsp)
movq 0x22a3f(%rip), %rdi     # 0x32fd8
leaq 0x12ee1(%rip), %rsi     # 0x23481
callq 0x4240
movq %rax, %rdi
movq %rsp, %rsi
callq 0x17602
movq %rax, %rdi
callq 0x4130
xorl %r12d, %r12d
cmpq (%rsp), %r12
jae 0x10638
imulq $0x18, %r12, %r13
xorl %ebx, %ebx
cmpq 0x8(%rsp), %rbx
jae 0x10633
movq 0x22a03(%rip), %rdi     # 0x32fd8
leaq 0x12ebf(%rip), %rsi     # 0x2349b
callq 0x4240
movq %rax, %rdi
movq %r12, %rsi
callq 0x41a0
movq %rax, %rdi
leaq 0x1490c(%rip), %rsi     # 0x24f02
callq 0x4240
movq %rax, %rdi
movq %rbx, %rsi
callq 0x41a0
movq %rax, %rdi
movq %r15, %rsi
callq 0x4240
movq %rax, %rdi
callq 0x4130
movq 0x40(%rbp), %rax
movq (%rax,%r14), %rax
movq (%rax,%r13), %rax
movq (%rax,%rbx,8), %rdi
callq 0x1d6a6
incq %rbx
jmp 0x105c7
incq %r12
jmp 0x105bb
movq 0x10(%rsp), %rsi
incq %rsi
jmp 0x1055c
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq