/ CPP_Modules / CPP_Module_04 / ex03 / MateriaSource.cpp
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  }