aboutsummaryrefslogtreecommitdiff
path: root/cpp04/ex02/Squad.cpp
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-04-14 18:02:14 +0200
committerCharles <sircharlesaze@gmail.com>2020-04-14 18:02:14 +0200
commitefea8712aaf8169b1184cceb83705ca6b8783173 (patch)
tree3c682f6af9d5877ddfa1740f4bac10f5f5123ddc /cpp04/ex02/Squad.cpp
parent119f7f96e77a2d86d692e82645dde4c2dc054052 (diff)
downloadpiscine_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.cpp73
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;
+}