Changeset View
Changeset View
Standalone View
Standalone View
source/ps/containers/Span.h
Show First 20 Lines • Show All 46 Lines • ▼ Show 20 Lines | constexpr span() | ||||
: m_Pointer(nullptr), m_Extent(0) {} | : m_Pointer(nullptr), m_Extent(0) {} | ||||
constexpr span(iterator first, size_type extent) | constexpr span(iterator first, size_type extent) | ||||
: m_Pointer(first), m_Extent(extent) {} | : m_Pointer(first), m_Extent(extent) {} | ||||
constexpr span(iterator first, iterator last) | constexpr span(iterator first, iterator last) | ||||
: m_Pointer(first), m_Extent(static_cast<size_type>(last - first)) {} | : m_Pointer(first), m_Extent(static_cast<size_type>(last - first)) {} | ||||
template<typename OtherT, std::size_t n> | |||||
Stan: std::size_t not sure about that one, we seem to use size_t in most places | |||||
constexpr span(const std::array<OtherT, n>& arr) | |||||
: m_Pointer(arr.data()), m_Extent(arr.size()) {} | |||||
constexpr span(const span& other) = default; | constexpr span(const span& other) = default; | ||||
constexpr span& operator=(const span& other) = default; | constexpr span& operator=(const span& other) = default; | ||||
~span() = default; | ~span() = default; | ||||
constexpr size_type size() const { return m_Extent; } | constexpr size_type size() const { return m_Extent; } | ||||
constexpr bool empty() const { return size() == 0; } | constexpr bool empty() const { return size() == 0; } | ||||
constexpr reference operator[](size_type index) const { return *(m_Pointer + index); } | constexpr reference operator[](size_type index) const { return *(m_Pointer + index); } | ||||
constexpr pointer data() const { return m_Pointer; } | constexpr pointer data() const { return m_Pointer; } | ||||
constexpr iterator begin() const { return m_Pointer; } | constexpr iterator begin() const { return m_Pointer; } | ||||
constexpr iterator end() const { return m_Pointer + m_Extent; } | constexpr iterator end() const { return m_Pointer + m_Extent; } | ||||
constexpr span subspan(size_type offset) const { return {m_Pointer + offset, m_Extent - offset}; } | |||||
private: | private: | ||||
pointer m_Pointer; | pointer m_Pointer; | ||||
size_type m_Extent; | size_type m_Extent; | ||||
}; | }; | ||||
template<typename T, std::size_t n> | |||||
span(const std::array<T, n>&) -> span<const T>; | |||||
} // namespace PS | } // namespace PS | ||||
#endif // INCLUDED_PS_SPAN | #endif // INCLUDED_PS_SPAN |
Wildfire Games · Phabricator
std::size_t not sure about that one, we seem to use size_t in most places