// File: /workspace/github_cpp_makefile_star2_O2/mh0fm4[P]SCDC/src/components/compcoup/compcoup_transport.cc
// Function: scdc_compcoup_transport::dataset_input_incoming_recv(scdc_transport_connection_t*, _scdc_dataset_inout_t*, bool*)
bool scdc_compcoup_transport::dataset_input_incoming_recv(scdc_transport_connection_t *conn, scdc_dataset_input_t *input, bool *next)
{
  SCDC_TRACE("dataset_input_incoming_recv:");

  SCDC_ASSERT(conn->current_incoming_input_size >= 0);

  /* empty input */
  SCDC_DATASET_INOUT_BUF_CURRENT(input) = 0;

  bool cont_recv = true;

  do
  {
    if (conn->current_incoming_input_size <= 0)
    {
      SCDC_TRACE("dataset_input_incoming_recv: read_input_info");
      if (!scdc_dataset_transport::read_input_info(conn, &conn->current_incoming_input, conn->current_incoming_input_next))
      {
        SCDC_FAIL("dataset_input_incoming_recv: read input info failed");
        return false;
      }

      conn->current_incoming_input_size = SCDC_DATASET_INOUT_BUF_CURRENT(&conn->current_incoming_input);
    }

    strncpy(input->format, conn->current_incoming_input.format, SCDC_FORMAT_MAX_SIZE);
    input->total_size = conn->current_incoming_input.total_size;
    input->total_size_given = conn->current_incoming_input.total_size_given;

    scdcint_t prev_current = SCDC_DATASET_INOUT_BUF_CURRENT(input);

    if (!conn->transport->recv_incoming_dataset_input(conn, input, conn->current_incoming_input_size, cont_recv))
    {
      SCDC_FAIL("dataset_input_incoming_recv: receive dataset input failed");
      return false;
    }

    conn->current_incoming_input_size -= SCDC_DATASET_INOUT_BUF_CURRENT(input) - prev_current;

    *next = (conn->current_incoming_input_next || conn->current_incoming_input_size > 0);

    SCDC_TRACE("dataset_input_incoming_recv: cont: '" << cont_recv << "', next: '" << *next << "', buf: " << SCDC_DATASET_INOUT_BUF_CURRENT(input) << " of " << SCDC_DATASET_INOUT_BUF_SIZE(input));

  } while (cont_recv && *next && SCDC_DATASET_INOUT_BUF_CURRENT(input) < SCDC_DATASET_INOUT_BUF_SIZE(input));

  return true;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x18, %rsp
movq %rdx, %rbx
movq %rsi, %r14
movq %rdi, %r15
movq 0x2c0(%rdi), %rbp
testq %rbp, %rbp
jns 0x4e5eb
leaq 0x27026(%rip), %r12     # 0x75580
movq (%r12), %rdi
cmpq $0x0, 0x18(%rdi)
je 0x4e5eb
addq $0x20, %rdi
callq 0xb800
movq (%r12), %rax
movq 0x18(%rax), %rdi
leaq 0x2fc8(%rip), %rsi      # 0x51549
callq 0xb520
leaq 0x68b0(%rip), %rsi      # 0x54e3d
movq %rax, %rdi
callq 0xb520
leaq 0x2da8(%rip), %rsi      # 0x51344
movq %rax, %rdi
callq 0xb520
movq %rax, %rdi
movl $0x3a8, %esi            # imm = 0x3A8
callq 0xb990
leaq 0x6aab(%rip), %rsi      # 0x55063
movq %rax, %rdi
callq 0xb520
leaq 0x48c9(%rip), %rsi      # 0x52e90
movq %rax, %rdi
callq 0xb520
movq %rax, %rdi
callq 0xb270
movq (%r12), %rdi
addq $0x20, %rdi
callq 0xb3e0
movq 0x2c0(%r15), %rbp
andq $0x0, 0x20(%r14)
leaq 0xf(%rsp), %r12
movb $0x1, (%r12)
leaq 0x210(%r15), %r13
leaq 0x2d0(%r15), %rax
movq %rax, 0x10(%rsp)
xorl %ecx, %ecx
testq %rbp, %rbp
movq %rcx, %rbp
jg 0x4e641
movq %r15, %rdi
movq %r13, %rsi
movq 0x10(%rsp), %rdx
callq 0x4f8ac
testb %al, %al
je 0x4e6e7
movq 0x230(%r15), %rax
movq %rax, 0x2c0(%r15)
movq 0x20(%r14), %rbp
movq %r14, %rdi
movq %r13, %rsi
pushq $0x10
popq %rdx
callq 0xb2c0
movq 0x238(%r15), %rax
movq %rax, 0x28(%r14)
movb 0x240(%r15), %al
movb %al, 0x30(%r14)
movq (%r15), %rdi
movq 0x2c0(%r15), %rcx
movq (%rdi), %rax
movq %r15, %rsi
movq %r14, %rdx
movq %r12, %r8
callq *0xa8(%rax)
testb %al, %al
je 0x4e6cd
movq 0x20(%r14), %rcx
subq %rcx, %rbp
addq 0x2c0(%r15), %rbp
movq %rbp, 0x2c0(%r15)
testq %rbp, %rbp
setg %dl
orb 0x2d0(%r15), %dl
movb %dl, (%rbx)
movb $0x1, %al
cmpb $0x1, 0xf(%rsp)
jne 0x4e752
testb %dl, %dl
je 0x4e752
cmpq 0x18(%r14), %rcx
jl 0x4e60f
jmp 0x4e752
leaq 0x26eac(%rip), %rax     # 0x75580
movq (%rax), %rdi
cmpq $0x0, 0x8(%rdi)
je 0x4e750
leaq 0x69dc(%rip), %rbx      # 0x550c1
jmp 0x4e6ff
leaq 0x26e92(%rip), %rax     # 0x75580
movq (%rax), %rdi
cmpq $0x0, 0x8(%rdi)
je 0x4e750
leaq 0x698e(%rip), %rbx      # 0x5508d
addq $0x20, %rdi
callq 0xb800
leaq 0x26e71(%rip), %r14     # 0x75580
movq (%r14), %rax
movq 0x8(%rax), %rdi
leaq 0x2a6b(%rip), %rsi      # 0x51188
callq 0xb520
leaq 0x66d6(%rip), %rsi      # 0x54dff
movq %rax, %rdi
callq 0xb520
movq %rax, %rdi
movq %rbx, %rsi
callq 0xb520
movq %rax, %rdi
callq 0xb270
movq (%r14), %rdi
addq $0x20, %rdi
callq 0xb3e0
xorl %eax, %eax
addq $0x18, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
nop