From ee83cd3430777ad2428971737c63f0d1a28c1a33 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Tue, 10 Jan 2023 17:52:00 +0200 Subject: [PATCH] BAN: Implement basic static array --- BAN/include/BAN/Array.h | 96 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 BAN/include/BAN/Array.h diff --git a/BAN/include/BAN/Array.h b/BAN/include/BAN/Array.h new file mode 100644 index 00000000..ad5ea4ef --- /dev/null +++ b/BAN/include/BAN/Array.h @@ -0,0 +1,96 @@ +#pragma once + +#include +#include + +namespace BAN +{ + + template + class Array + { + public: + using size_type = decltype(S); + using value_type = T; + + public: + Array(); + Array(const T&); + + const T& operator[](size_type) const; + T& operator[](size_type); + + const T& Back() const; + T& Back(); + const T& Front() const; + T& Front(); + + constexpr size_type Size() const; + + private: + T m_data[S]; + }; + + template + Array::Array() + { + for (size_type i = 0; i < S; i++) + m_data[i] = T(); + } + + template + Array::Array(const T& value) + { + for (size_type i = 0; i < S; i++) + m_data[i] = value; + } + + template + const T& Array::operator[](size_type index) const + { + ASSERT(index < S); + return m_data[index]; + } + + template + T& Array::operator[](size_type index) + { + ASSERT(index < S); + return m_data[index]; + } + + template + const T& Array::Back() const + { + ASSERT(S != 0); + return m_data[S - 1]; + } + + template + T& Array::Back() + { + ASSERT(S != 0); + return m_data[S - 1]; + } + + template + const T& Array::Front() const + { + ASSERT(S != 0); + return m_data[0]; + } + + template + T& Array::Front() + { + ASSERT(S != 0); + return m_data[0]; + } + + template + constexpr typename Array::size_type Array::Size() const + { + return S; + } + +} \ No newline at end of file