From 65ac5d42c9209c4b89c590c93cfa8d985e66b168 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Thu, 15 Aug 2024 11:41:35 +1000 Subject: Remove unused ConstexprVector and rename constexpr_utils.hh to array.hh --- src/array.hh | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/array.hh (limited to 'src/array.hh') diff --git a/src/array.hh b/src/array.hh new file mode 100644 index 00000000..ec8b098b --- /dev/null +++ b/src/array.hh @@ -0,0 +1,48 @@ +#ifndef array_hh_INCLUDED +#define array_hh_INCLUDED + +#include +#include + +#include "array_view.hh" + +namespace Kakoune +{ + +template +struct Array +{ + constexpr size_t size() const { return N; } + constexpr const T& operator[](int i) const { return m_data[i]; } + constexpr const T* begin() const { return m_data; } + constexpr const T* end() const { return m_data+N; } + + constexpr T& operator[](int i) { return m_data[i]; } + constexpr T* begin() { return m_data; } + constexpr T* end() { return m_data+N; } + + constexpr operator ArrayView() { return {m_data, N}; } + constexpr operator ConstArrayView() const { return {m_data, N}; } + + T m_data[N]; +}; + +template requires (std::is_same_v and ...) +Array(T, U...) -> Array; + +template +constexpr Array make_array(const T (&data)[N], std::index_sequence) +{ + static_assert(sizeof...(Indices) == N, "size mismatch"); + return {{data[Indices]...}}; +} + +template +constexpr Array make_array(const T (&data)[N]) +{ + return make_array(data, std::make_index_sequence()); +} + +} + +#endif // array_hh_INCLUDED -- cgit v1.2.3