12 template<
typename TItem>
15 static_assert(!std::is_void_v<TItem>,
"doesn't make sense");
22 for (
const auto &item :
list)
39 for (
size_t i = 0; i < other.
m_size; ++i)
47 other.m_storage =
nullptr;
61 other.m_storage =
nullptr;
84 auto &
at(
this auto &Self,
size_t index)
noexcept
86 const auto storage_item =
reinterpret_cast<TItem *
>(Self.m_storage);
87 return storage_item[index];
90 auto data(
this auto &Self)
noexcept
92 if constexpr (std::is_const_v<
decltype(Self)>)
93 return reinterpret_cast<const TItem *
>(Self.m_storage);
95 return reinterpret_cast<TItem *
>(Self.m_storage);
118 TItem *newStorage =
reinterpret_cast<TItem *
>(kcalloc<char>(newSize *
sizeof(TItem)));
120 for (
size_t i = 0; i <
m_size; ++i)
121 newStorage[i] = std::move(
at(i));
134 for (
size_t i =
m_size; i < new_size; ++i)
135 new (std::addressof(
at(
m_size))) TItem();
137 for (
size_t i = new_size; i <
m_size; ++i)
147 new (std::addressof(
at(
m_size))) TItem(value);
155 new (std::addressof(
at(
m_size))) TItem(std::move(value));
186 while (cap < newSize)
192 template<
typename TPo
inter,
typename TReference>
204 return m_index != other.m_index;
base_iterator(void *storage, size_t index) noexcept
TReference operator*() const noexcept
base_iterator & operator++() noexcept
bool operator!=(const base_iterator &other) const noexcept
auto end() const noexcept
vector & operator=(vector &&other) noexcept
auto size() const noexcept
auto & operator[](size_t index) const noexcept
auto capacity() const noexcept
auto resize(size_t new_size) noexcept
vector(std::initializer_list< TItem > list)
auto data(this auto &Self) noexcept
vector(const vector &other)
auto & at(this auto &Self, size_t index) noexcept
auto begin() const noexcept
vector & operator=(const vector &other)
base_iterator< TItem *, TItem & > iterator
static constexpr size_t GetNewCapacityForSize(size_t newSize) noexcept
auto push_back(const TItem &value) noexcept
base_iterator< const TItem *, const TItem & > const_iterator
auto push_back(TItem &&value) noexcept
auto empty() const noexcept
auto reserve(size_t newSize) noexcept
vector(vector &&other) noexcept