5#ifndef WASMTIME_SPAN_HH
6#define WASMTIME_SPAN_HH
9#if __has_include(<span>)
23template <
typename T, std::
size_t Extent = std::dynamic_extent>
24using Span = std::span<T, Extent>;
30 std::numeric_limits<std::size_t>::max();
37template <
typename T, std::
size_t Extent = dynamic_extent>
class Span;
40template <
typename T>
struct IsSpan : std::false_type {};
42template <
typename T, std::
size_t Extent>
45template <
typename T, std::
size_t Extent>
class Span {
47 "The current implementation supports dynamic-extent span only");
54 Span(T *t, std::size_t n) : ptr_{t}, size_{n} {}
60 std::is_pointer_v<decltype(std::declval<C &>().data())> &&
61 std::is_convertible_v<
62 std::remove_pointer_t<
63 decltype(std::declval<C &>().data())> (*)[],
65 std::is_convertible_v<decltype(std::declval<C>().size()),
68 Span(C &range) : ptr_{range.data()}, size_{range.size()} {}
76 T *
data()
const {
return ptr_; }
79 std::size_t
size()
const {
return size_; }
90 std::size_t
size_bytes()
const {
return sizeof(T) * size_; }
Span class used when c++20 is not available.
Definition: span.hh:45
std::size_t size_bytes() const
Returns size in bytes.
Definition: span.hh:90
std::size_t size() const
Returns number of data that referred by Span class.
Definition: span.hh:79
iterator end() const
Returns end iterator.
Definition: span.hh:85
T * iterator
Type used to iterate over this span (a raw pointer)
Definition: span.hh:51
T * data() const
Returns pointer to data.
Definition: span.hh:76
Span(T *t, std::size_t n)
Constructor of Span class.
Definition: span.hh:54
iterator begin() const
Returns begin iterator.
Definition: span.hh:82
T & operator[](ptrdiff_t idx) const
Returns item by index.
Definition: span.hh:71
Span(C &range)
Constructor of Span class for containers.
Definition: span.hh:68
constexpr size_t dynamic_extent
Means number of elements determined at runtime.
Definition: span.hh:29
Check whether a type is Span
Definition: span.hh:40