// File: arisKoutsou[P]oopproj/./src/livings/Hero.cpp
// Function: Hero::equip(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&)
bool Hero :: equip(const string& name) {
  Item* itemToEquip = inventory.getItemByName(name);

  if (itemToEquip != NULL) {
    string kind = itemToEquip->kindOf();

    if (kind == "Weapon") {
      Weapon* weaponToEquip = static_cast<Weapon*>(itemToEquip);
      this->equipWeapon(weaponToEquip);
    } else if (kind == "Armor") {
      Armor* armorToEquip = static_cast<Armor*>(itemToEquip);
      this->equipArmor(armorToEquip);

    } else if (kind == "Potion") {
      cout << endl << "You can't equip a potion" << endl;
      return false;
    }
    this->inventory.removeItem(itemToEquip);
    return true;
  }

  Spell* spellToEquip = inventory.getSpellByName(name);

  if (spellToEquip != NULL) {
    this->equipSpell(spellToEquip);
    this->inventory.removeSpell(spellToEquip);
    return true;
  }

  cout << endl << "There's no such item or spell in your inventory" << endl;
  return false;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq %rdi, -0x78(%rbp)
addq $0xc0, %rdi
movq -0x18(%rbp), %rsi
callq 0x172f0
movq %rax, -0x20(%rbp)
cmpq $0x0, -0x20(%rbp)
je 0x24117
movq -0x20(%rbp), %rsi
movq (%rsi), %rax
movq 0x18(%rax), %rax
leaq -0x40(%rbp), %rdi
movq %rdi, -0x88(%rbp)
callq *%rax
movq -0x88(%rbp), %rdi
leaq 0xabb2(%rip), %rsi      # 0x2eb92
callq 0x8e10
movb %al, -0x79(%rbp)
jmp 0x23fea
movb -0x79(%rbp), %al
testb $0x1, %al
jne 0x23ff3
jmp 0x24029
movq -0x78(%rbp), %rdi
movq -0x20(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rsi
callq 0x241b0
jmp 0x2400a
jmp 0x240eb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x55d0
jmp 0x241a0
leaq 0xab69(%rip), %rsi      # 0x2eb99
leaq -0x40(%rbp), %rdi
callq 0x8e10
movb %al, -0x89(%rbp)
jmp 0x24041
movb -0x89(%rbp), %al
testb $0x1, %al
jne 0x2404d
jmp 0x24069
movq -0x78(%rbp), %rdi
movq -0x20(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rsi
callq 0x24420
jmp 0x24064
jmp 0x240e9
leaq 0xae8f(%rip), %rsi      # 0x2eeff
leaq -0x40(%rbp), %rdi
callq 0x8e10
movb %al, -0x8a(%rbp)
jmp 0x24081
movb -0x8a(%rbp), %al
testb $0x1, %al
jne 0x2408d
jmp 0x240e7
movq 0x1bf2c(%rip), %rdi     # 0x3ffc0
movq 0x1bf05(%rip), %rsi     # 0x3ffa0
callq 0x5330
movq %rax, -0x98(%rbp)
jmp 0x240a9
movq -0x98(%rbp), %rdi
leaq 0xadc7(%rip), %rsi      # 0x2ee7e
callq 0x52f0
movq %rax, -0xa0(%rbp)
jmp 0x240c5
movq -0xa0(%rbp), %rdi
movq 0x1becd(%rip), %rsi     # 0x3ffa0
callq 0x5330
jmp 0x240da
movb $0x0, -0x1(%rbp)
movl $0x1, -0x64(%rbp)
jmp 0x2410c
jmp 0x240e9
jmp 0x240eb
movq -0x78(%rbp), %rdi
addq $0xc0, %rdi
movq -0x20(%rbp), %rsi
callq 0x17210
jmp 0x24101
movb $0x1, -0x1(%rbp)
movl $0x1, -0x64(%rbp)
leaq -0x40(%rbp), %rdi
callq 0x55d0
jmp 0x24192
movq -0x78(%rbp), %rdi
addq $0xc0, %rdi
movq -0x18(%rbp), %rsi
callq 0x173b0
movq %rax, -0x70(%rbp)
cmpq $0x0, -0x70(%rbp)
je 0x2415d
movq -0x78(%rbp), %rdi
movq -0x70(%rbp), %rsi
callq 0x24470
movq -0x78(%rbp), %rdi
addq $0xc0, %rdi
movq -0x70(%rbp), %rsi
callq 0x17270
movb $0x1, -0x1(%rbp)
jmp 0x24192
movq 0x1be5c(%rip), %rdi     # 0x3ffc0
movq 0x1be35(%rip), %rsi     # 0x3ffa0
callq 0x5330
movq %rax, %rdi
leaq 0xad1d(%rip), %rsi      # 0x2ee97
callq 0x52f0
movq %rax, %rdi
movq 0x1be17(%rip), %rsi     # 0x3ffa0
callq 0x5330
movb $0x0, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0xa0, %rsp
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0x5550
nopl (%rax)