Skip to content

Commit 1f790a1

Browse files
committed
Make Span size type unsigned
This matches a change in the C++20 std::span proposal.
1 parent 8da1e43 commit 1f790a1

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

src/span.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,12 @@ template<typename C>
1818
class Span
1919
{
2020
C* m_data;
21-
std::ptrdiff_t m_size;
21+
std::size_t m_size;
2222

2323
public:
2424
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+
2627
constexpr Span(C* data, C* end) noexcept : m_data(data), m_size(end - data) {}
2728

2829
/** Implicit conversion of spans between compatible types.
@@ -47,13 +48,13 @@ class Span
4748
constexpr C* end() const noexcept { return m_data + m_size; }
4849
constexpr C& front() const noexcept { return m_data[0]; }
4950
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]; }
5253

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); }
5758

5859
friend constexpr bool operator==(const Span& a, const Span& b) noexcept { return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin()); }
5960
friend constexpr bool operator!=(const Span& a, const Span& b) noexcept { return !(a == b); }

0 commit comments

Comments
 (0)