aboutsummaryrefslogtreecommitdiff
path: root/cpp08/ex01/span.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp08/ex01/span.cpp')
-rw-r--r--cpp08/ex01/span.cpp67
1 files changed, 67 insertions, 0 deletions
diff --git a/cpp08/ex01/span.cpp b/cpp08/ex01/span.cpp
new file mode 100644
index 0000000..a9bcaf6
--- /dev/null
+++ b/cpp08/ex01/span.cpp
@@ -0,0 +1,67 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* span.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/15 06:57:44 by charles #+# #+# */
+/* Updated: 2020/04/15 07:22:42 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "span.hpp"
+
+Span::Span() : m_under(new int[0]), m_size(0), m_fillIndex(0)
+{}
+
+Span::Span(Span const& other)
+ : m_under(new int[other.m_size]),
+ m_size(other.m_size),
+ m_fillIndex(other.m_fillIndex)
+{
+ for (unsigned int i = 0; i < m_fillIndex; i++)
+ m_under[i] = other.m_under[i];
+}
+
+void Span::operator=(Span const& other)
+{
+ delete [] m_under;
+ m_size = other.m_size;
+ m_under = new int[m_size];
+ m_fillIndex = other.m_fillIndex;
+ for (unsigned int i = 0; i < m_fillIndex; i++)
+ m_under[i] = other.m_under[i];
+}
+
+Span::~Span()
+{
+ delete [] m_under;
+}
+
+Span::Span(unsigned int n) : m_under(new int[n]), m_size(n), m_fillIndex(0)
+{}
+
+void Span::addNumber(int x)
+{
+ if (m_fillIndex == m_size)
+ throw std::exception();
+ m_under[m_fillIndex] = x;
+ m_fillIndex++;
+}
+
+int Span::shortestSpan() const
+{
+ if (m_size <= 1)
+ throw std::exception();
+ std::sort(m_under, m_under + m_fillIndex);
+ return m_under[1] - m_under[0];
+}
+
+int Span::longestSpan() const
+{
+ if (m_size <= 1)
+ throw std::exception();
+ std::sort(m_under, m_under + m_fillIndex);
+ return m_under[m_fillIndex - 1] - m_under[0];
+}