135 using value_type = T;
145 constexpr vector_span() noexcept : _begin(
nullptr), _end(
nullptr), _max(
nullptr) {}
147 constexpr vector_span(value_type *buffer, ssize_t nr_elements) noexcept :
148 _begin(buffer), _end(buffer), _max(buffer + nr_elements)
153 constexpr vector_span(std::span<value_type> span) noexcept :
154 _begin(span.data()), _end(span.data()), _max(span.data() + span.size())
164 [[nodiscard]]
constexpr iterator begin()
noexcept
179 [[nodiscard]]
constexpr iterator end()
noexcept
194 [[nodiscard]]
constexpr std::size_t size()
const noexcept
199 [[nodiscard]]
constexpr value_type& operator[](
std::size_t i)
noexcept
204 [[nodiscard]]
constexpr value_type
const& operator[](
std::size_t i)
const noexcept
210 constexpr value_type& front()
noexcept
216 constexpr value_type
const& front()
const noexcept
222 constexpr value_type& back()
noexcept
228 constexpr value_type
const& back()
const noexcept
234 [[nodiscard]]
constexpr bool empty()
const noexcept
236 return _begin == _end;
239 [[nodiscard]]
constexpr bool full()
const noexcept
244 constexpr void clear()
noexcept
246 for (
auto ptr = _begin; ptr != _end; ++ptr) {
247 std::destroy_at(ptr);
252 constexpr void push_back(value_type
const& rhs)
noexcept
255 std::construct_at(_end++, rhs);
258 constexpr void push_back(value_type&& rhs)
noexcept
261 std::construct_at(_end++,
std::move(rhs));
264 template<
typename... Args>
265 constexpr void emplace_back(Args&&...args)
noexcept
268 std::construct_at(_end++, std::forward<Args>(args)...);
271 constexpr void pop_back()
noexcept
274 std::destroy_at(--_end);
#define hi_axiom_bounds(x,...)
Specify an axiom that the value is within bounds.
Definition assert.hpp:264
#define hi_axiom(expression,...)
Specify an axiom; an expression that is true.
Definition assert.hpp:253
#define hi_assert_not_null(x,...)
Assert if an expression is not nullptr.
Definition assert.hpp:238