BAN: Make Array more constexpr

This commit is contained in:
Bananymous 2025-04-23 18:40:20 +03:00
parent 95a80bfe81
commit 4d840a8d9a
1 changed files with 17 additions and 17 deletions

View File

@ -18,78 +18,78 @@ namespace BAN
using const_iterator = ConstIteratorSimple<T, Array>; using const_iterator = ConstIteratorSimple<T, Array>;
public: public:
Array() = default; constexpr Array() = default;
Array(const T&); constexpr Array(const T&);
iterator begin() { return iterator(m_data); } iterator begin() { return iterator(m_data); }
iterator end() { return iterator(m_data + size()); } iterator end() { return iterator(m_data + size()); }
const_iterator begin() const { return const_iterator(m_data); } const_iterator begin() const { return const_iterator(m_data); }
const_iterator end() const { return const_iterator(m_data + size()); } const_iterator end() const { return const_iterator(m_data + size()); }
const T& operator[](size_type) const; constexpr const T& operator[](size_type) const;
T& operator[](size_type); constexpr T& operator[](size_type);
const T& back() const; constexpr const T& back() const;
T& back(); constexpr T& back();
const T& front() const; constexpr const T& front() const;
T& front(); constexpr T& front();
Span<T> span() { return Span(m_data, size()); } Span<T> span() { return Span(m_data, size()); }
const Span<T> span() const { return Span(m_data, size()); } const Span<T> span() const { return Span(m_data, size()); }
constexpr size_type size() const; constexpr size_type size() const;
const T* data() const { return m_data; } constexpr const T* data() const { return m_data; }
T* data() { return m_data; } constexpr T* data() { return m_data; }
private: private:
T m_data[S] {}; T m_data[S] {};
}; };
template<typename T, size_t S> template<typename T, size_t S>
Array<T, S>::Array(const T& value) constexpr Array<T, S>::Array(const T& value)
{ {
for (size_type i = 0; i < S; i++) for (size_type i = 0; i < S; i++)
m_data[i] = value; m_data[i] = value;
} }
template<typename T, size_t S> template<typename T, size_t S>
const T& Array<T, S>::operator[](size_type index) const constexpr const T& Array<T, S>::operator[](size_type index) const
{ {
ASSERT(index < S); ASSERT(index < S);
return m_data[index]; return m_data[index];
} }
template<typename T, size_t S> template<typename T, size_t S>
T& Array<T, S>::operator[](size_type index) constexpr T& Array<T, S>::operator[](size_type index)
{ {
ASSERT(index < S); ASSERT(index < S);
return m_data[index]; return m_data[index];
} }
template<typename T, size_t S> template<typename T, size_t S>
const T& Array<T, S>::back() const constexpr const T& Array<T, S>::back() const
{ {
ASSERT(S != 0); ASSERT(S != 0);
return m_data[S - 1]; return m_data[S - 1];
} }
template<typename T, size_t S> template<typename T, size_t S>
T& Array<T, S>::back() constexpr T& Array<T, S>::back()
{ {
ASSERT(S != 0); ASSERT(S != 0);
return m_data[S - 1]; return m_data[S - 1];
} }
template<typename T, size_t S> template<typename T, size_t S>
const T& Array<T, S>::front() const constexpr const T& Array<T, S>::front() const
{ {
ASSERT(S != 0); ASSERT(S != 0);
return m_data[0]; return m_data[0];
} }
template<typename T, size_t S> template<typename T, size_t S>
T& Array<T, S>::front() constexpr T& Array<T, S>::front()
{ {
ASSERT(S != 0); ASSERT(S != 0);
return m_data[0]; return m_data[0];