diff options
Diffstat (limited to 'cpp08/ex01/span.cpp')
| -rw-r--r-- | cpp08/ex01/span.cpp | 67 |
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]; +} |
