// File: /workspace/github_cpp_makefile_star2_O3/yasz24[P]eau2/src/network/./../application/../dataframe/distributedDataframe.h
// Function: DistributedDataFrame::add_column(Column*, String*)
void add_column(Column* col, String* name) {
      if (col == nullptr) {
        return;
      }
      size_t col_size = col->size();
      // if (col_size > this->schema_->length()) {
      //   return;
      // }
      if (schema_->num_rows_ == 0) {
        schema_->num_rows_ = col_size;
      }
      char col_type = col->get_type();
      this->schema_->add_column(col_type, name);
      if (col_size < this->schema_->length()) {
        //padding columns with dummy data.
        switch (col_type) {
        case 'I': {
            DistributedIntColumn* intCol = col->as_dist_int();
            for (size_t i = col_size; i < this->schema_->length(); i++) {
              intCol->push_back(0);
            }
            break;
          }
        case 'S': {
            DistributedStringColumn* strCol = col->as_dist_string();
            for (size_t i = col_size; i < this->schema_->length(); i++) {
              strCol->push_back(nullptr);
            }
            break;
          }
        case 'B': {
            DistributedBoolColumn* boolCol = col->as_dist_bool();
            for (size_t i = col_size; i < this->schema_->length(); i++) {
              boolCol->push_back(false);
            }
            break;
          }
        case 'F': {
            DistributedFloatColumn* floatCol = col->as_dist_float();
            for (size_t i = col_size; i < this->schema_->length(); i++) {
              floatCol->push_back((float) 0);
            }
            break;
          }
        case 'D': {
          DistributedDoubleColumn* doublCol = col->as_dist_double();
          for (size_t i = col_size; i < this->schema_->length(); i++) {
            doublCol->push_back((double) 0);
          }
          break;
        }
        default:
          //do nothing.
          break;
        }
      }
      this->cols_->pushBack(col);
    }

// Assembly:
testq %rsi, %rsi
je 0x9ab0
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
movq %rdx, %r12
movq %rsi, %rbx
movq %rdi, %r14
movq (%rsi), %rax
movq %rsi, %rdi
callq *0xc8(%rax)
movq %rax, %r15
movq 0x10(%r14), %rax
cmpq $0x0, 0x28(%rax)
jne 0x9a3a
movq %r15, 0x28(%rax)
movq (%rbx), %rax
movq %rbx, %rdi
callq *0xd0(%rax)
movl %eax, %r13d
movq 0x10(%r14), %rdi
movsbl %al, %esi
movq %r12, %rdx
callq 0x13200
movq 0x10(%r14), %rax
cmpq 0x28(%rax), %r15
jae 0x9b6e
movzbl %r13b, %ecx
leal -0x42(%rcx), %eax
cmpl $0x7, %eax
ja 0x9ab1
leaq 0x135ab(%rip), %rcx     # 0x1d024
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x78(%rax)
movq %rax, %r12
movq 0x10(%r14), %rax
cmpq 0x28(%rax), %r15
jae 0x9b6e
movq (%r12), %rax
movq %r12, %rdi
xorl %esi, %esi
callq *0xa8(%rax)
incq %r15
jmp 0x9a8e
retq
cmpl $0x53, %ecx
jne 0x9b6e
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x88(%rax)
movq %rax, %r12
movq 0x10(%r14), %rax
cmpq 0x28(%rax), %r15
jae 0x9b6e
movq (%r12), %rax
movq %r12, %rdi
xorl %esi, %esi
callq *0xb8(%rax)
incq %r15
jmp 0x9ac9
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x80(%rax)
movq %rax, %r12
movq 0x10(%r14), %rax
cmpq 0x28(%rax), %r15
jae 0x9b6e
movq (%r12), %rax
xorps %xmm0, %xmm0
movq %r12, %rdi
callq *0xb0(%rax)
incq %r15
jmp 0x9afa
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x68(%rax)
movq %rax, %r12
movq 0x10(%r14), %rax
cmpq 0x28(%rax), %r15
jae 0x9b6e
movq (%r12), %rax
movq %r12, %rdi
xorl %esi, %esi
callq *0x98(%rax)
incq %r15
jmp 0x9b25
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x70(%rax)
movq %rax, %r12
movq 0x10(%r14), %rax
cmpq 0x28(%rax), %r15
jae 0x9b6e
movq (%r12), %rax
xorps %xmm0, %xmm0
movq %r12, %rdi
callq *0xa0(%rax)
incq %r15
jmp 0x9b4f
movq 0x18(%r14), %rdi
movq (%rdi), %rax
movq 0x58(%rax), %rax
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmpq *%rax