From 94434b5a2c3daa5db05baba88e192d0c8b8b5dad Mon Sep 17 00:00:00 2001 From: Chris Elrod Date: Tue, 13 Feb 2024 00:58:56 -0500 Subject: [PATCH] allow to specify TinyVector size type --- include/Containers/TinyVector.hpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/include/Containers/TinyVector.hpp b/include/Containers/TinyVector.hpp index 3392735..105735f 100644 --- a/include/Containers/TinyVector.hpp +++ b/include/Containers/TinyVector.hpp @@ -5,19 +5,22 @@ #include #include #include +#include namespace poly::containers { using utils::invariant; -template class TinyVector { + +template class TinyVector { static_assert(N > 0); + static_assert(std::numeric_limits::max() >= N); Storage data; - ptrdiff_t len{}; + L len{}; public: constexpr TinyVector() = default; constexpr TinyVector(const std::initializer_list &list) { invariant(list.size() <= N); - len = list.size(); + len = L(list.size()); std::copy(list.begin(), list.end(), data.data()); } constexpr TinyVector(T t) : len{1} { data.data()[0] = std::move(t); } @@ -70,8 +73,10 @@ template class TinyVector { --len; } [[nodiscard]] constexpr auto size() const -> ptrdiff_t { - invariant(len <= ptrdiff_t(N)); - return len; + ptrdiff_t l = ptrdiff_t(len); + invariant(l >= 0); + invariant(l <= ptrdiff_t(N)); + return l; } [[nodiscard]] constexpr auto empty() const -> bool { return len == 0; } constexpr void clear() { len = 0; }