Skip to content

Commit

Permalink
allow to specify TinyVector size type
Browse files Browse the repository at this point in the history
  • Loading branch information
chriselrod committed Feb 13, 2024
1 parent 5bfa21c commit 94434b5
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions include/Containers/TinyVector.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,22 @@
#include <algorithm>
#include <cstddef>
#include <initializer_list>
#include <limits>

namespace poly::containers {
using utils::invariant;
template <class T, size_t N> class TinyVector {

template <class T, size_t N, typename L = ptrdiff_t> class TinyVector {
static_assert(N > 0);
static_assert(std::numeric_limits<L>::max() >= N);
Storage<T, N> data;
ptrdiff_t len{};
L len{};

public:
constexpr TinyVector() = default;
constexpr TinyVector(const std::initializer_list<T> &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); }
Expand Down Expand Up @@ -70,8 +73,10 @@ template <class T, size_t N> 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; }
Expand Down

0 comments on commit 94434b5

Please sign in to comment.