5#ifndef WASMTIME_SPAN_HH
6#define WASMTIME_SPAN_HH
9#if __has_include(<span>)
25template <
typename T, std::
size_t Extent = std::dynamic_extent>
26using Span = std::span<T, Extent>;
32 std::numeric_limits<std::size_t>::max();
39template <
typename T, std::
size_t Extent = dynamic_extent>
class Span;
42template <
typename T>
struct IsSpan : std::false_type {};
44template <
typename T, std::
size_t Extent>
47template <
typename T, std::
size_t Extent>
class Span {
49 "The current implementation supports dynamic-extent span only");
56 Span(T *t, std::size_t n) : ptr_{t}, size_{n} {}
62 std::is_pointer_v<decltype(std::declval<C &>().data())> &&
63 std::is_convertible_v<
64 std::remove_pointer_t<
65 decltype(std::declval<C &>().data())> (*)[],
67 std::is_convertible_v<decltype(std::declval<C>().size()),
70 Span(C &range) : ptr_{range.data()}, size_{range.size()} {}
78 T *
data()
const {
return ptr_; }
81 std::size_t
size()
const {
return size_; }
92 std::size_t
size_bytes()
const {
return sizeof(T) * size_; }
Span class used when c++20 is not available.
Definition: span.hh:47
std::size_t size_bytes() const
Returns size in bytes.
Definition: span.hh:92
std::size_t size() const
Returns number of data that referred by Span class.
Definition: span.hh:81
iterator end() const
Returns end iterator.
Definition: span.hh:87
T * iterator
Type used to iterate over this span (a raw pointer)
Definition: span.hh:53
T * data() const
Returns pointer to data.
Definition: span.hh:78
Span(T *t, std::size_t n)
Constructor of Span class.
Definition: span.hh:56
iterator begin() const
Returns begin iterator.
Definition: span.hh:84
T & operator[](ptrdiff_t idx) const
Returns item by index.
Definition: span.hh:73
Span(C &range)
Constructor of Span class for containers.
Definition: span.hh:70
constexpr size_t dynamic_extent
Means number of elements determined at runtime.
Definition: span.hh:31
Check whether a type is Span
Definition: span.hh:42