// File: /workspace/github_cpp_makefile_star2_O1/tdv[P]boss/boss/include/common/string.h
// Function: Boss::String::IsEqual(Boss::IString*) const
virtual RetCode BOSS_CALL IsEqual(IString *str) const
    {
      if (!str)
        return Status::InvalidArgument;
      if (str == this)
        return Status::Ok;
      try
      {
        std::lock_guard<std::recursive_mutex> Lock(Mtx);
        UInt StrType = UnknownStringType;
        if (str->GetType(&StrType) != Status::Ok)
          return Status::Fail;
        if (StrType != Type)
          return Status::False;
        if (Type == UnknownStringType)
          return Status::Ok;
        UInt StrLength = 0;
        if (str->GetLength(&StrLength) != Status::Ok)
          return Status::Fail;
        if (StrLength != Length)
          return Status::False;
        RefObjPtr<IBuffer> Buf;
        if (str->GetString(StrType, Buf.GetPPtr()) != Status::Ok)
          return Status::Fail;
        void const *StrBufData = 0;
        UInt StrBufSize = 0;
        if (Buf->GetSize(&StrBufSize) != Status::Ok || Buf->GetData(&StrBufData) != Status::Ok)
          return Status::Fail;
        void const *BufData = 0;
        UInt BufSize = 0;
        if (Data->GetSize(&BufSize) != Status::Ok || Data->GetData(&BufData) != Status::Ok)
          return Status::Fail;
        return StrBufSize == BufSize && !std::memcmp(StrBufData, BufData, StrBufSize);
      }
      catch (std::exception const &)
      {
      }
      return Status::Fail;
    }

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
subq $0x38, %rsp
testq %rsi, %rsi
je 0x19811
movq %rsi, %r15
movq %rdi, %r14
leaq 0x8(%rdi), %rax
cmpq %rsi, %rax
je 0x19818
leaq 0x18(%r14), %rbx
movq %rbx, %rdi
callq 0x155d0
testl %eax, %eax
jne 0x19833
leaq 0xc(%rsp), %rsi
movl $0x0, (%rsi)
movq (%r15), %rax
movq %r15, %rdi
callq *0x30(%rax)
movl $0x2, %ebp
testl %eax, %eax
jne 0x1981e
movl 0x40(%r14), %eax
movl $0x1, %ebp
cmpl %eax, 0xc(%rsp)
jne 0x1981e
testl %eax, %eax
je 0x1981c
leaq 0x24(%rsp), %rsi
movl $0x0, (%rsi)
movq (%r15), %rax
movq %r15, %rdi
callq *0x28(%rax)
movl $0x2, %ebp
testl %eax, %eax
jne 0x1981e
movl 0x24(%rsp), %eax
movl $0x1, %ebp
cmpl 0x44(%r14), %eax
jne 0x1981e
leaq 0x10(%rsp), %rdx
movq $0x0, (%rdx)
movl 0xc(%rsp), %esi
movq (%r15), %rax
movq %r15, %rdi
callq *0x38(%rax)
movl $0x2, %ebp
testl %eax, %eax
jne 0x197ff
movq $0x0, 0x30(%rsp)
leaq 0x20(%rsp), %rsi
movl $0x0, (%rsi)
movq 0x10(%rsp), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movl $0x2, %ebp
testl %eax, %eax
jne 0x197ff
movq 0x10(%rsp), %rdi
movq (%rdi), %rax
leaq 0x30(%rsp), %rsi
callq *0x28(%rax)
testl %eax, %eax
jne 0x197ff
movq $0x0, 0x28(%rsp)
leaq 0x1c(%rsp), %rsi
movl $0x0, (%rsi)
movq 0x48(%r14), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
movl $0x2, %ebp
testl %eax, %eax
jne 0x197ff
movq 0x48(%r14), %rdi
movq (%rdi), %rax
leaq 0x28(%rsp), %rsi
callq *0x28(%rax)
testl %eax, %eax
jne 0x197ff
movl 0x20(%rsp), %edx
xorl %ebp, %ebp
cmpl 0x1c(%rsp), %edx
jne 0x197ff
movq 0x30(%rsp), %rdi
movq 0x28(%rsp), %rsi
callq 0x153c0
xorl %ebp, %ebp
testl %eax, %eax
sete %bpl
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x1981e
movq (%rdi), %rax
callq *0x18(%rax)
jmp 0x1981e
movl $0x5, %ebp
jmp 0x19826
xorl %ebp, %ebp
jmp 0x19826
xorl %ebp, %ebp
movq %rbx, %rdi
callq 0x15630
movl %ebp, %eax
addq $0x38, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
movl %eax, %edi
callq 0x1718b
jmp 0x19846
jmp 0x19846
movq %rax, %rdi
callq 0x188b5
movq %rdx, %r15
movq %rax, %r14
movq 0x10(%rsp), %rdi
testq %rdi, %rdi
je 0x19868
movq (%rdi), %rax
callq *0x18(%rax)
jmp 0x19868
jmp 0x1983e
jmp 0x19862
movq %rdx, %r15
movq %rax, %r14
movq %rbx, %rdi
callq 0x15630
jmp 0x19878
movq %rdx, %r15
movq %rax, %r14
movq %r14, %rdi
cmpl $0x1, %r15d
jne 0x19892
callq 0x1b070
callq 0x1b0e0
movl $0x2, %ebp
jmp 0x19826
callq 0xbb570
nop