// File: DoubleString[P]RtConverter/src/Json/json_value.cpp
// Function: Json::Value::operator<(Json::Value const&) const
bool Value::operator<(const Value& other) const {
  int typeDelta = type_ - other.type_;
  if (typeDelta)
    return typeDelta < 0 ? true : false;
  switch (type_) {
  case nullValue:
    return false;
  case intValue:
    return value_.int_ < other.value_.int_;
  case uintValue:
    return value_.uint_ < other.value_.uint_;
  case realValue:
    return value_.real_ < other.value_.real_;
  case booleanValue:
    return value_.bool_ < other.value_.bool_;
  case stringValue: {
    if ((value_.string_ == 0) || (other.value_.string_ == 0)) {
      if (other.value_.string_)
        return true;
      else
        return false;
    }
    unsigned this_len;
    unsigned other_len;
    char const* this_str;
    char const* other_str;
    decodePrefixedString(this->allocated_, this->value_.string_, &this_len,
                         &this_str);
    decodePrefixedString(other.allocated_, other.value_.string_, &other_len,
                         &other_str);
    unsigned min_len = std::min<unsigned>(this_len, other_len);
    JSON_ASSERT(this_str && other_str);
    int comp = memcmp(this_str, other_str, min_len);
    if (comp < 0)
      return true;
    if (comp > 0)
      return false;
    return (this_len < other_len);
  }
  case arrayValue:
  case objectValue: {
    int delta = int(value_.map_->size() - other.value_.map_->size());
    if (delta)
      return delta < 0;
    return (*value_.map_) < (*other.value_.map_);
  }
  default:
    JSON_ASSERT_UNREACHABLE;
  }
  return false; // unreachable
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x88(%rbp)
movw 0x8(%rax), %ax
andw $0xff, %ax
movzwl %ax, %eax
movq -0x18(%rbp), %rcx
movw 0x8(%rcx), %cx
andw $0xff, %cx
movzwl %cx, %ecx
subl %ecx, %eax
movl %eax, -0x1c(%rbp)
cmpl $0x0, -0x1c(%rbp)
je 0x1f474
movl -0x1c(%rbp), %eax
sarl $0x1f, %eax
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x1f721
movq -0x88(%rbp), %rax
movzbl 0x8(%rax), %eax
movzwl %ax, %ecx
movq %rcx, -0x90(%rbp)
subw $0x7, %ax
ja 0x1f702
movq -0x90(%rbp), %rax
leaq 0x9c817(%rip), %rcx     # 0xbbcb8
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movb $0x0, -0x1(%rbp)
jmp 0x1f721
movq -0x88(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
cmpq (%rcx), %rax
setl %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x1f721
movq -0x88(%rbp), %rax
movq (%rax), %rax
movq -0x18(%rbp), %rcx
cmpq (%rcx), %rax
setb %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x1f721
movq -0x88(%rbp), %rax
movsd (%rax), %xmm1
movq -0x18(%rbp), %rax
movsd (%rax), %xmm0
ucomisd %xmm1, %xmm0
seta %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x1f721
movq -0x88(%rbp), %rax
movb (%rax), %al
andb $0x1, %al
movzbl %al, %eax
movq -0x18(%rbp), %rcx
movb (%rcx), %cl
andb $0x1, %cl
movzbl %cl, %ecx
cmpl %ecx, %eax
setl %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x1f721
movq -0x88(%rbp), %rax
cmpq $0x0, (%rax)
je 0x1f553
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
jne 0x1f56f
movq -0x18(%rbp), %rax
cmpq $0x0, (%rax)
je 0x1f566
movb $0x1, -0x1(%rbp)
jmp 0x1f721
movb $0x0, -0x1(%rbp)
jmp 0x1f721
movq -0x88(%rbp), %rcx
movw 0x8(%rcx), %ax
shrw $0x8, %ax
andw $0x1, %ax
movzwl %ax, %eax
cmpl $0x0, %eax
setne %al
movq (%rcx), %rsi
movzbl %al, %edi
andl $0x1, %edi
leaq -0x20(%rbp), %rdx
leaq -0x30(%rbp), %rcx
callq 0x1f770
movq -0x18(%rbp), %rax
movw 0x8(%rax), %ax
shrw $0x8, %ax
andw $0x1, %ax
movzwl %ax, %eax
cmpl $0x0, %eax
setne %al
movq -0x18(%rbp), %rcx
movq (%rcx), %rsi
movzbl %al, %edi
andl $0x1, %edi
leaq -0x24(%rbp), %rdx
leaq -0x38(%rbp), %rcx
callq 0x1f770
leaq -0x20(%rbp), %rdi
leaq -0x24(%rbp), %rsi
callq 0x25600
movl (%rax), %eax
movl %eax, -0x3c(%rbp)
cmpq $0x0, -0x30(%rbp)
je 0x1f5f4
cmpq $0x0, -0x38(%rbp)
jne 0x1f659
leaq -0x61(%rbp), %rdi
movq %rdi, -0x98(%rbp)
callq 0x9d30
movq -0x98(%rbp), %rdx
leaq 0x9c8b5(%rip), %rsi     # 0xbbec7
leaq -0x60(%rbp), %rdi
callq 0x9a30
jmp 0x1f61d
leaq -0x60(%rbp), %rdi
callq 0x1ddc0
jmp 0x1f628
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
jmp 0x1f64b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x70(%rbp)
movl %eax, -0x74(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x9480
leaq -0x61(%rbp), %rdi
callq 0x97e0
jmp 0x1f72f
movq -0x30(%rbp), %rdi
movq -0x38(%rbp), %rsi
movl -0x3c(%rbp), %eax
movl %eax, %edx
callq 0x9310
movl %eax, -0x78(%rbp)
cmpl $0x0, -0x78(%rbp)
jge 0x1f67d
movb $0x1, -0x1(%rbp)
jmp 0x1f721
cmpl $0x0, -0x78(%rbp)
jle 0x1f68c
movb $0x0, -0x1(%rbp)
jmp 0x1f721
movl -0x20(%rbp), %eax
cmpl -0x24(%rbp), %eax
setb %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x1f721
movq -0x88(%rbp), %rax
movq (%rax), %rdi
callq 0x25740
movq %rax, -0xa0(%rbp)
movq -0x18(%rbp), %rax
movq (%rax), %rdi
callq 0x25740
movq %rax, %rcx
movq -0xa0(%rbp), %rax
subq %rcx, %rax
movl %eax, -0x7c(%rbp)
cmpl $0x0, -0x7c(%rbp)
je 0x1f6e5
cmpl $0x0, -0x7c(%rbp)
setl %al
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x1f721
movq -0x88(%rbp), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rax
movq (%rax), %rsi
callq 0x25760
andb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x1f721
leaq 0x9c80a(%rip), %rdi     # 0xbbf13
leaq 0x9c809(%rip), %rsi     # 0xbbf19
movl $0x232, %edx            # imm = 0x232
leaq 0x9c85b(%rip), %rcx     # 0xbbf77
callq 0x94e0
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0xa0, %rsp
popq %rbp
retq
movq -0x70(%rbp), %rdi
callq 0x9d20
nopl (%rax,%rax)