diff options
Diffstat (limited to 'cpp04/ex02/Squad.cpp')
| -rw-r--r-- | cpp04/ex02/Squad.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/cpp04/ex02/Squad.cpp b/cpp04/ex02/Squad.cpp new file mode 100644 index 0000000..ba825b9 --- /dev/null +++ b/cpp04/ex02/Squad.cpp @@ -0,0 +1,73 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Squad.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 15:08:35 by charles #+# #+# */ +/* Updated: 2020/04/14 15:54:17 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Squad.hpp" + +Squad::Squad() : m_units(new ISpaceMarine*[0]), m_size(0) +{ +} + +Squad::Squad(Squad const& other) +{ + *this = other; +} + +void Squad::operator=(Squad const& other) +{ + destroyUnits(); + m_size = other.m_size; + m_units = new ISpaceMarine*[m_size]; + for (int i = 0; i < m_size; i++) + m_units[i] = other.m_units[i]->clone(); +} + +Squad::~Squad() +{ + destroyUnits(); +} + +int Squad::getCount() const +{ + return m_size; +} + +ISpaceMarine* Squad::getUnit(int n) const +{ + if (n < 0 || n >= m_size) + return nullptr; + return m_units[n]; +} + +int Squad::push(ISpaceMarine* spaceMarine) +{ + if (spaceMarine == nullptr) + return (-1); + for (int i = 0; i < m_size; i++) + if (m_units[i] == spaceMarine) + return (-1); + + ISpaceMarine** new_units = new ISpaceMarine*[m_size + 1]; + for (int i = 0; i < m_size; i++) + new_units[i] = m_units[i]; + new_units[m_size] = spaceMarine; + delete [] m_units; + m_size++; + m_units = new_units; + return m_size; +} + +void Squad::destroyUnits() +{ + for (int i = 0; i < m_size; i++) + delete m_units[i]; + delete [] m_units; +} |
