@@ -18,11 +18,12 @@ template<typename C>
18
18
class Span
19
19
{
20
20
C* m_data;
21
- std::ptrdiff_t m_size;
21
+ std::size_t m_size;
22
22
23
23
public:
24
24
constexpr Span () noexcept : m_data(nullptr ), m_size(0 ) {}
25
- constexpr Span (C* data, std::ptrdiff_t size) noexcept : m_data(data), m_size(size) {}
25
+ constexpr Span (C* data, std::size_t size) noexcept : m_data(data), m_size(size) {}
26
+
26
27
constexpr Span (C* data, C* end) noexcept : m_data(data), m_size(end - data) {}
27
28
28
29
/* * Implicit conversion of spans between compatible types.
@@ -47,13 +48,13 @@ class Span
47
48
constexpr C* end () const noexcept { return m_data + m_size; }
48
49
constexpr C& front () const noexcept { return m_data[0 ]; }
49
50
constexpr C& back () const noexcept { return m_data[m_size - 1 ]; }
50
- constexpr std::ptrdiff_t size () const noexcept { return m_size; }
51
- constexpr C& operator [](std::ptrdiff_t pos) const noexcept { return m_data[pos]; }
51
+ constexpr std::size_t size () const noexcept { return m_size; }
52
+ constexpr C& operator [](std::size_t pos) const noexcept { return m_data[pos]; }
52
53
53
- constexpr Span<C> subspan (std::ptrdiff_t offset) const noexcept { return Span<C>(m_data + offset, m_size - offset); }
54
- constexpr Span<C> subspan (std::ptrdiff_t offset, std::ptrdiff_t count) const noexcept { return Span<C>(m_data + offset, count); }
55
- constexpr Span<C> first (std::ptrdiff_t count) const noexcept { return Span<C>(m_data, count); }
56
- constexpr Span<C> last (std::ptrdiff_t count) const noexcept { return Span<C>(m_data + m_size - count, count); }
54
+ constexpr Span<C> subspan (std::size_t offset) const noexcept { return Span<C>(m_data + offset, m_size - offset); }
55
+ constexpr Span<C> subspan (std::size_t offset, std::size_t count) const noexcept { return Span<C>(m_data + offset, count); }
56
+ constexpr Span<C> first (std::size_t count) const noexcept { return Span<C>(m_data, count); }
57
+ constexpr Span<C> last (std::size_t count) const noexcept { return Span<C>(m_data + m_size - count, count); }
57
58
58
59
friend constexpr bool operator ==(const Span& a, const Span& b) noexcept { return a.size () == b.size () && std::equal (a.begin (), a.end (), b.begin ()); }
59
60
friend constexpr bool operator !=(const Span& a, const Span& b) noexcept { return !(a == b); }
0 commit comments