MateriaSource.cpp
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* MateriaSource.cpp :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: gychoi <gychoi@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2023/08/17 23:21:28 by gychoi #+# #+# */ 9 /* Updated: 2023/08/18 18:31:56 by gychoi ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "MateriaSource.hpp" 14 #include <iostream> 15 16 /****************************** 17 * Constructor and Destructor * 18 ******************************/ 19 20 MateriaSource::MateriaSource(void) 21 { 22 for (std::size_t i = 0; i < 4; i++) 23 this->list[i] = 0; 24 } 25 26 MateriaSource::~MateriaSource(void) 27 { 28 for (std::size_t i = 0; i < 4; i++) 29 delete this->list[i]; 30 } 31 32 MateriaSource::MateriaSource(MateriaSource const& target) 33 { 34 if (this != &target) 35 { 36 for (std::size_t i = 0; i < 4; i++) 37 this->list[i] = 0; 38 *this = target; 39 } 40 } 41 42 MateriaSource& MateriaSource::operator=(MateriaSource const& target) 43 { 44 if (this != &target) 45 { 46 for (std::size_t i = 0; i < 4; i++) 47 { 48 delete this->list[i]; 49 if (target.list[i]) 50 this->list[i] = target.list[i]->clone(); 51 else 52 this->list[i] = 0; 53 } 54 } 55 return *this; 56 } 57 58 /****************************** 59 * Public Member function * 60 ******************************/ 61 62 void MateriaSource::learnMateria(AMateria* m) 63 { 64 for (std::size_t i = 0; i < 4; i++) 65 { 66 if (!this->list[i]) 67 { 68 this->list[i] = m; 69 return ; 70 } 71 } 72 delete m; 73 std::cout << "[MateriaSource] : List is full" << std::endl; 74 } 75 76 AMateria* MateriaSource::createMateria(std::string const& type) 77 { 78 for (std::size_t i = 0; i < 4; i++) 79 { 80 if (this->list[i] && this->list[i]->getType() == type) 81 return this->list[i]->clone(); 82 } 83 std::cout << "[MateriaSource] : Cannot find Materia : " << type << std::endl; 84 return 0; 85 } 86 87 void MateriaSource::showMateria(void) 88 { 89 std::cout << "[INFO] : Learned Materia list : " << std::endl; 90 for (std::size_t i = 0; i < 4; i++) 91 { 92 if (this->list[i]) 93 std::cout << "[" << i << "] : " << this->list[i]->getType() << std::endl; 94 else 95 std::cout << "[" << i << "] : " << "(empty)" << std::endl; 96 } 97 std::cout << std::endl; 98 }