v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
v8::MemorySpan< T > Class Template Reference

#include <v8-memory-span.h>

Collaboration diagram for v8::MemorySpan< T >:

Classes

struct  is_compatible_iterator
 
struct  is_compatible_iterator< It, std::void_t< std::is_base_of< std::random_access_iterator_tag, typename std::iterator_traits< It >::iterator_category >, is_array_convertible< std::remove_reference_t< iter_reference_t< It > >, T > > >
 
class  Iterator
 

Public Member Functions

constexpr MemorySpan ()=default
 
constexpr MemorySpan (std::nullptr_t, size_t)
 
template<typename Iterator , std::enable_if_t< is_compatible_iterator_v< Iterator >, bool > = true>
constexpr MemorySpan (Iterator first, size_t count)
 
template<typename Iterator , std::enable_if_t< is_compatible_iterator_v< Iterator > &&!std::is_convertible_v< Iterator, size_t >, bool > = true>
constexpr MemorySpan (Iterator first, Iterator last)
 
template<size_t N>
constexpr MemorySpan (T(&a)[N]) noexcept
 
template<typename U , size_t N, std::enable_if_t< is_array_convertible_v< U, T >, bool > = true>
constexpr MemorySpan (std::array< U, N > &a) noexcept
 
template<typename U , size_t N, std::enable_if_t< is_array_convertible_v< const U, T >, bool > = true>
constexpr MemorySpan (const std::array< U, N > &a) noexcept
 
constexpr Tdata () const
 
constexpr size_t size () const
 
constexpr Toperator[] (size_t i) const
 
constexpr bool empty () const
 
Iterator begin () const
 
Iterator end () const
 

Private Types

template<typename From , typename To >
using is_array_convertible = std::is_convertible<From (*)[], To (*)[]>
 
template<typename It >
using iter_reference_t = decltype(*std::declval<It&>())
 

Static Private Member Functions

template<typename U >
static constexpr U * to_address (U *p) noexcept
 
template<typename It , typename = std::void_t<decltype(std::declval<It&>().operator->())>>
static constexpr auto to_address (It it) noexcept
 

Private Attributes

Tdata_ = nullptr
 
size_t size_ = 0
 

Static Private Attributes

template<typename From , typename To >
static constexpr bool is_array_convertible_v
 
template<typename It >
static constexpr bool is_compatible_iterator_v
 

Detailed Description

template<typename T>
class v8::MemorySpan< T >

Points to an unowned contiguous buffer holding a known number of elements.

This is similar to std::span (under consideration for C++20), but does not require advanced C++ support. In the (far) future, this may be replaced with or aliased to std::span.

To facilitate future migration, this class exposes a subset of the interface implemented by std::span.

Definition at line 64 of file v8-memory-span.h.

Member Typedef Documentation

◆ is_array_convertible

template<typename T >
template<typename From , typename To >
using v8::MemorySpan< T >::is_array_convertible = std::is_convertible<From (*)[], To (*)[]>
private

Some C++ machinery, brought from the future.

Definition at line 68 of file v8-memory-span.h.

◆ iter_reference_t

template<typename T >
template<typename It >
using v8::MemorySpan< T >::iter_reference_t = decltype(*std::declval<It&>())
private

Definition at line 74 of file v8-memory-span.h.

Constructor & Destructor Documentation

◆ MemorySpan() [1/7]

template<typename T >
v8::MemorySpan< T >::MemorySpan ( )
constexprdefault

The default constructor creates an empty span.

◆ MemorySpan() [2/7]

template<typename T >
v8::MemorySpan< T >::MemorySpan ( std::nullptr_t ,
size_t  )
inlineconstexpr

Constructor from nullptr and count, for backwards compatibility. This is not compatible with C++20 std::span.

Definition at line 108 of file v8-memory-span.h.

◆ MemorySpan() [3/7]

template<typename T >
template<typename Iterator , std::enable_if_t< is_compatible_iterator_v< Iterator >, bool > = true>
v8::MemorySpan< T >::MemorySpan ( Iterator first,
size_t count )
inlineconstexpr

Constructor from "iterator" and count.

Definition at line 113 of file v8-memory-span.h.

◆ MemorySpan() [4/7]

template<typename T >
template<typename Iterator , std::enable_if_t< is_compatible_iterator_v< Iterator > &&!std::is_convertible_v< Iterator, size_t >, bool > = true>
v8::MemorySpan< T >::MemorySpan ( Iterator first,
Iterator last )
inlineconstexpr

Constructor from two "iterators".

Definition at line 122 of file v8-memory-span.h.

◆ MemorySpan() [5/7]

template<typename T >
template<size_t N>
v8::MemorySpan< T >::MemorySpan ( T(&) a[N])
inlineconstexprnoexcept

Implicit conversion from C-style array.

Definition at line 128 of file v8-memory-span.h.

◆ MemorySpan() [6/7]

template<typename T >
template<typename U , size_t N, std::enable_if_t< is_array_convertible_v< U, T >, bool > = true>
v8::MemorySpan< T >::MemorySpan ( std::array< U, N > & a)
inlineconstexprnoexcept

Implicit conversion from std::array.

Definition at line 134 of file v8-memory-span.h.

◆ MemorySpan() [7/7]

template<typename T >
template<typename U , size_t N, std::enable_if_t< is_array_convertible_v< const U, T >, bool > = true>
v8::MemorySpan< T >::MemorySpan ( const std::array< U, N > & a)
inlineconstexprnoexcept

Implicit conversion from const std::array.

Definition at line 141 of file v8-memory-span.h.

Member Function Documentation

◆ begin()

template<typename T >
Iterator v8::MemorySpan< T >::begin ( ) const
inlinenodiscard

Definition at line 277 of file v8-memory-span.h.

◆ data()

template<typename T >
T * v8::MemorySpan< T >::data ( ) const
inlinenodiscardconstexpr

Returns a pointer to the beginning of the buffer.

Definition at line 146 of file v8-memory-span.h.

Here is the caller graph for this function:

◆ empty()

template<typename T >
bool v8::MemorySpan< T >::empty ( ) const
inlinenodiscardconstexpr

Returns true if the buffer is empty.

Definition at line 153 of file v8-memory-span.h.

Here is the caller graph for this function:

◆ end()

template<typename T >
Iterator v8::MemorySpan< T >::end ( ) const
inlinenodiscard

Definition at line 278 of file v8-memory-span.h.

◆ operator[]()

template<typename T >
T & v8::MemorySpan< T >::operator[] ( size_t i) const
inlinenodiscardconstexpr

Definition at line 150 of file v8-memory-span.h.

◆ size()

template<typename T >
size_t v8::MemorySpan< T >::size ( ) const
inlinenodiscardconstexpr

Returns the number of elements that the buffer holds.

Definition at line 148 of file v8-memory-span.h.

Here is the caller graph for this function:

◆ to_address() [1/2]

template<typename T >
template<typename It , typename = std::void_t<decltype(std::declval<It&>().operator->())>>
static constexpr auto v8::MemorySpan< T >::to_address ( It it)
inlinestaticnodiscardconstexprprivatenoexcept

Definition at line 97 of file v8-memory-span.h.

◆ to_address() [2/2]

template<typename T >
template<typename U >
static constexpr U * v8::MemorySpan< T >::to_address ( U * p)
inlinestaticnodiscardconstexprprivatenoexcept

Definition at line 91 of file v8-memory-span.h.

Member Data Documentation

◆ data_

template<typename T >
T* v8::MemorySpan< T >::data_ = nullptr
private

Definition at line 281 of file v8-memory-span.h.

◆ is_array_convertible_v

template<typename T >
template<typename From , typename To >
bool v8::MemorySpan< T >::is_array_convertible_v
staticconstexprprivate
Initial value:
=
is_array_convertible<From, To>::value

Definition at line 70 of file v8-memory-span.h.

◆ is_compatible_iterator_v

template<typename T >
template<typename It >
bool v8::MemorySpan< T >::is_compatible_iterator_v
staticconstexprprivate
Initial value:
=
is_compatible_iterator<It>::value

Definition at line 87 of file v8-memory-span.h.

◆ size_

template<typename T >
size_t v8::MemorySpan< T >::size_ = 0
private

Definition at line 282 of file v8-memory-span.h.


The documentation for this class was generated from the following file: