// File: /workspace/github_cpp_makefile_star2_O2/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 0x184fb
movq %rsi, %r15
movq %rdi, %r14
leaq 0x8(%rdi), %rax
cmpq %rsi, %rax
je 0x18500
leaq 0x18(%r14), %rbx
movq %rbx, %rdi
callq 0x180d6
leaq 0xc(%rsp), %rsi
andl $0x0, (%rsi)
movq (%r15), %rax
movq %r15, %rdi
callq *0x30(%rax)
testl %eax, %eax
je 0x18504
pushq $0x2
jmp 0x18555
pushq $0x5
popq %rbp
jmp 0x1855e
xorl %ebp, %ebp
jmp 0x1855e
movl 0xc(%rsp), %eax
cmpl 0x40(%r14), %eax
jne 0x18553
testl %eax, %eax
je 0x1856b
leaq 0x24(%rsp), %rsi
andl $0x0, (%rsi)
movq (%r15), %rax
movq %r15, %rdi
callq *0x28(%rax)
testl %eax, %eax
jne 0x184f7
movl 0x24(%rsp), %eax
cmpl 0x44(%r14), %eax
jne 0x18553
leaq 0x10(%rsp), %rdx
andq $0x0, (%rdx)
movl 0xc(%rsp), %esi
movq (%r15), %rax
movq %r15, %rdi
callq *0x38(%rax)
testl %eax, %eax
je 0x1856f
pushq $0x2
popq %rbp
jmp 0x185f8
pushq $0x1
popq %rbp
movq %rbx, %rdi
callq 0x14630
movl %ebp, %eax
addq $0x38, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
xorl %ebp, %ebp
jmp 0x18556
andq $0x0, 0x30(%rsp)
leaq 0x20(%rsp), %rsi
andl $0x0, (%rsi)
movq 0x10(%rsp), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
pushq $0x2
popq %rbp
testl %eax, %eax
jne 0x185f8
movq 0x10(%rsp), %rdi
movq (%rdi), %rax
leaq 0x30(%rsp), %rsi
callq *0x28(%rax)
testl %eax, %eax
jne 0x185f8
andq $0x0, 0x28(%rsp)
leaq 0x1c(%rsp), %rsi
andl $0x0, (%rsi)
movq 0x48(%r14), %rdi
movq (%rdi), %rax
callq *0x30(%rax)
pushq $0x2
popq %rbp
testl %eax, %eax
jne 0x185f8
movq 0x48(%r14), %rdi
movq (%rdi), %rax
leaq 0x28(%rsp), %rsi
callq *0x28(%rax)
testl %eax, %eax
jne 0x185f8
movl 0x20(%rsp), %edx
xorl %ebp, %ebp
cmpl 0x1c(%rsp), %edx
jne 0x185f8
movq 0x30(%rsp), %rdi
movq 0x28(%rsp), %rsi
callq 0x143c0
xorl %ebp, %ebp
testl %eax, %eax
sete %bpl
leaq 0x10(%rsp), %rdi
callq 0x18f9e
jmp 0x18556
jmp 0x1860b
jmp 0x1860b
movq %rdx, %r15
movq %rax, %r14
leaq 0x10(%rsp), %rdi
callq 0x18f9e
jmp 0x18625
jmp 0x1861f
movq %rdx, %r15
movq %rax, %r14
movq %rbx, %rdi
callq 0x14630
jmp 0x18635
movq %rdx, %r15
movq %rax, %r14
movq %r14, %rdi
cmpl $0x1, %r15d
jne 0x1864f
callq 0x19e60
callq 0x19ed0
pushq $0x2
jmp 0x184fd
callq 0xbadf0