// File: /workspace/github_cpp_makefile_star2_O3/xjrueda[P]fixprime/src/Node.cpp
// Function: fprime::Node::operator=(fprime::Node const&)
fprime::Node& Node::operator=(const fprime::Node& other) {
        _type = other._type;
        value = other.value;
        isRequired = other.isRequired;
        field = other.field;
        protocolPtr = other.protocolPtr;
        componentPtr = other.componentPtr;

        fprime::DataHolderFactory factory;

        if (other._type == fprime::Node::NodeType::FIELD_NODE) {
            fprime::DataHolderFactory factory;
            value = factory.create(other.field->getDataType());
            this->value = factory.create(other.field->getDataType());
            const string val = other.value->get();
            this->value->set(val);
        }

        childsVector.clear();
        childsByFieldId.clear();

        for (NodeVector::const_iterator itr = other.childsVector.begin(); itr != other.childsVector.end(); itr++) {
            NodePtr newNode(new Node(**itr));
            childsVector.push_back(newNode);
            if (other._type == fprime::Node::NodeType::ROOT_NODE || other._type == fprime::Node::NodeType::GROUP_INSTANCE)
                childsByFieldId[newNode->getField()->getId()] = newNode;

            if (other._type == fprime::Node::NodeType::REPEATING_GROUP)
                childsByFieldId[childsVector.size()] = newNode;
        }
        return *this;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x108, %rsp            # imm = 0x108
movq %rsi, %r14
movq %rdi, %rbx
movl 0x8(%rsi), %eax
movl %eax, 0x8(%rdi)
movq 0x10(%rsi), %rax
movq %rax, 0x10(%rdi)
addq $0x18, %rdi
addq $0x18, %rsi
callq 0x30ce0
movb 0x20(%r14), %al
movb %al, 0x20(%rbx)
movq 0x28(%r14), %rax
movq %rax, 0x28(%rbx)
leaq 0x30(%rbx), %rdi
leaq 0x30(%r14), %rsi
callq 0x30ce0
movups 0xd0(%r14), %xmm0
movups %xmm0, 0xd0(%rbx)
movl $0xe0, %esi
movq %rbx, 0x8(%rsp)
leaq (%rbx,%rsi), %rdi
addq %r14, %rsi
callq 0x30ce0
leaq 0xd0(%rsp), %rdi
callq 0x30d60
cmpl $0x1, 0x8(%r14)
jne 0x3ec63
leaq 0x38(%rsp), %rdi
callq 0x30d60
movq 0x28(%r14), %rsi
leaq 0xb0(%rsp), %rdi
callq 0x2fdc0
leaq 0x10(%rsp), %rdi
leaq 0x38(%rsp), %rsi
leaq 0xb0(%rsp), %rdx
callq 0x2f9f0
movaps 0x10(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq 0x8(%rsp), %rax
movq 0x18(%rax), %rdi
movups %xmm0, 0x10(%rax)
testq %rdi, %rdi
je 0x3eb66
callq 0x2f370
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x3eb66
callq 0x2f370
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3eb7c
callq 0x2f6c0
movq 0x28(%r14), %rsi
leaq 0x90(%rsp), %rdi
callq 0x2fdc0
leaq 0x10(%rsp), %rdi
leaq 0x38(%rsp), %rsi
leaq 0x90(%rsp), %rdx
callq 0x2f9f0
movaps 0x10(%rsp), %xmm0
xorps %xmm1, %xmm1
movaps %xmm1, 0x10(%rsp)
movq 0x8(%rsp), %rax
movq 0x18(%rax), %rdi
movups %xmm0, 0x10(%rax)
testq %rdi, %rdi
je 0x3ebd7
callq 0x2f370
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x3ebd7
callq 0x2f370
leaq 0xa0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3ebed
callq 0x2f6c0
movq 0x10(%r14), %rsi
movq (%rsi), %rax
leaq 0x10(%rsp), %rdi
callq *0x18(%rax)
movq 0x8(%rsp), %rax
movq 0x10(%rax), %r15
leaq 0x80(%rsp), %r12
movq %r12, -0x10(%r12)
movq 0x10(%rsp), %rsi
movq 0x18(%rsp), %rdx
addq %rsi, %rdx
leaq 0x70(%rsp), %rdi
callq 0x2e8a0
movq (%r15), %rax
leaq 0x70(%rsp), %rsi
movq %r15, %rdi
callq *0x10(%rax)
movq 0x70(%rsp), %rdi
cmpq %r12, %rdi
je 0x3ec46
callq 0x2f6c0
leaq 0x20(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3ec59
callq 0x2f6c0
leaq 0x38(%rsp), %rdi
callq 0x30d90
movq 0x8(%rsp), %rbx
leaq 0x38(%rbx), %r15
movq %r15, %rdi
callq 0x30350
leaq 0x50(%rbx), %r12
movq %r12, %rdi
callq 0x2eb60
movq 0x38(%r14), %rbx
cmpq 0x40(%r14), %rbx
je 0x3ed84
leaq 0x40(%rsp), %r13
movl $0xe8, %edi
callq 0x2f830
movq %rax, %rbp
movq (%rbx), %rsi
movq %rax, %rdi
callq 0x30c80
movq %rbp, 0x38(%rsp)
movq %r13, %rdi
movq %rbp, %rsi
callq 0x2e4a0
movq %r15, %rdi
leaq 0x38(%rsp), %rsi
callq 0x2fd80
movl 0x8(%r14), %eax
cmpl $0x3, %eax
je 0x3ecd5
testl %eax, %eax
jne 0x3ed29
movq 0x38(%rsp), %rsi
leaq 0x10(%rsp), %rdi
callq 0x2f8c0
movq 0x10(%rsp), %rdi
callq 0x2f6e0
movl %eax, 0x34(%rsp)
movq %r12, %rdi
leaq 0x34(%rsp), %rsi
callq 0x2f1a0
movq 0x38(%rsp), %rcx
movq %rcx, (%rax)
addq $0x8, %rax
movq %rax, %rdi
movq %r13, %rsi
callq 0x30ce0
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x3ed25
callq 0x2f370
movl 0x8(%r14), %eax
cmpl $0x2, %eax
jne 0x3ed67
movq 0x8(%rsp), %rcx
movq 0x40(%rcx), %rax
subq 0x38(%rcx), %rax
shrq $0x4, %rax
movl %eax, 0x10(%rsp)
movq %r12, %rdi
leaq 0x10(%rsp), %rsi
callq 0x2f1a0
movq 0x38(%rsp), %rcx
movq %rcx, (%rax)
addq $0x8, %rax
movq %rax, %rdi
movq %r13, %rsi
callq 0x30ce0
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x3ed76
callq 0x2f370
addq $0x10, %rbx
cmpq 0x40(%r14), %rbx
jne 0x3ec93
leaq 0xd0(%rsp), %rdi
callq 0x30d90
movq 0x8(%rsp), %rax
addq $0x108, %rsp            # imm = 0x108
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
movq 0x70(%rsp), %rdi
cmpq %r12, %rdi
je 0x3edbf
callq 0x2f6c0
jmp 0x3edbf
movq %rax, %rbx
leaq 0x20(%rsp), %rax
jmp 0x3ede2
jmp 0x3edf2
movq %rax, %rbx
leaq 0xa0(%rsp), %rax
jmp 0x3ede2
jmp 0x3edf2
movq %rax, %rbx
leaq 0xc0(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x3edf5
callq 0x2f6c0
jmp 0x3edf5
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0x30d90
jmp 0x3ee3f
jmp 0x3ee3c
jmp 0x3ee14
jmp 0x3ee14
movq %rax, %rbx
movq %rbp, %rdi
callq 0x2f6c0
jmp 0x3ee3f
movq %rax, %rbx
jmp 0x3ee2b
movq %rax, %rbx
movq 0x18(%rsp), %rdi
testq %rdi, %rdi
je 0x3ee2b
callq 0x2f370
movq 0x40(%rsp), %rdi
testq %rdi, %rdi
je 0x3ee3f
callq 0x2f370
jmp 0x3ee3f
movq %rax, %rbx
leaq 0xd0(%rsp), %rdi
callq 0x30d90
movq %rbx, %rdi
callq 0x30a10