diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-04-14 18:02:14 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-04-14 18:02:14 +0200 |
| commit | efea8712aaf8169b1184cceb83705ca6b8783173 (patch) | |
| tree | 3c682f6af9d5877ddfa1740f4bac10f5f5123ddc /cpp04/ex02/Squad.cpp | |
| parent | 119f7f96e77a2d86d692e82645dde4c2dc054052 (diff) | |
| download | piscine_cpp-efea8712aaf8169b1184cceb83705ca6b8783173.tar.gz piscine_cpp-efea8712aaf8169b1184cceb83705ca6b8783173.tar.bz2 piscine_cpp-efea8712aaf8169b1184cceb83705ca6b8783173.zip | |
cpp04, ex03 not finished, require more sophisticated main
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; +} |
