V8 Project
v8::PersistentValueVector< V, Traits > Class Template Reference

A vector wrapper that safely stores UniquePersistent values. More...

#include <v8-util.h>

+ Collaboration diagram for v8::PersistentValueVector< V, Traits >:

Public Member Functions

 PersistentValueVector (Isolate *isolate)
 
 ~PersistentValueVector ()
 
void Append (Local< V > value)
 Append a value to the vector. More...
 
void Append (UniquePersistent< V > persistent)
 Append a persistent's value to the vector. More...
 
bool IsEmpty () const
 Are there any values in the vector? More...
 
size_t Size () const
 How many elements are in the vector? More...
 
Local< VGet (size_t index) const
 Retrieve the i-th value in the vector. More...
 
void Clear ()
 Remove all elements from the vector. More...
 
void ReserveCapacity (size_t capacity)
 Reserve capacity in the vector. More...
 

Static Private Member Functions

static PersistentContainerValue ClearAndLeak (UniquePersistent< V > *persistent)
 
static VFromVal (PersistentContainerValue v)
 

Private Attributes

Isolateisolate_
 
Traits::Impl impl_
 

Detailed Description

template<typename V, typename Traits = DefaultPersistentValueVectorTraits>
class v8::PersistentValueVector< V, Traits >

A vector wrapper that safely stores UniquePersistent values.

C++11 embedders don't need this class, as they can use UniquePersistent directly in std containers.

This class relies on a backing vector implementation, whose type and methods are described by the Traits class. The backing map will handle values of type PersistentContainerValue, with all conversion into and out of V8 handles being transparently handled by this class.

Definition at line 405 of file v8-util.h.

Constructor & Destructor Documentation

◆ PersistentValueVector()

template<typename V , typename Traits = DefaultPersistentValueVectorTraits>
v8::PersistentValueVector< V, Traits >::PersistentValueVector ( Isolate isolate)
inlineexplicit

Definition at line 407 of file v8-util.h.

407 : isolate_(isolate) { }

◆ ~PersistentValueVector()

template<typename V , typename Traits = DefaultPersistentValueVectorTraits>
v8::PersistentValueVector< V, Traits >::~PersistentValueVector ( )
inline

Definition at line 409 of file v8-util.h.

409  {
410  Clear();
411  }
void Clear()
Remove all elements from the vector.
Definition: v8-util.h:452

References v8::PersistentValueVector< V, Traits >::Clear().

+ Here is the call graph for this function:

Member Function Documentation

◆ Append() [1/2]

template<typename V , typename Traits = DefaultPersistentValueVectorTraits>
void v8::PersistentValueVector< V, Traits >::Append ( Local< V value)
inline

Append a value to the vector.

Definition at line 416 of file v8-util.h.

416  {
417  UniquePersistent<V> persistent(isolate_, value);
418  Traits::Append(&impl_, ClearAndLeak(&persistent));
419  }
static PersistentContainerValue ClearAndLeak(UniquePersistent< V > *persistent)
Definition: v8-util.h:470
Traits::Impl impl_
Definition: v8-util.h:482

References v8::PersistentValueVector< V, Traits >::ClearAndLeak(), v8::PersistentValueVector< V, Traits >::impl_, and v8::PersistentValueVector< V, Traits >::isolate_.

+ Here is the call graph for this function:

◆ Append() [2/2]

template<typename V , typename Traits = DefaultPersistentValueVectorTraits>
void v8::PersistentValueVector< V, Traits >::Append ( UniquePersistent< V persistent)
inline

Append a persistent's value to the vector.

Definition at line 424 of file v8-util.h.

424  {
425  Traits::Append(&impl_, ClearAndLeak(&persistent));
426  }

References v8::PersistentValueVector< V, Traits >::ClearAndLeak(), and v8::PersistentValueVector< V, Traits >::impl_.

+ Here is the call graph for this function:

◆ Clear()

template<typename V , typename Traits = DefaultPersistentValueVectorTraits>
void v8::PersistentValueVector< V, Traits >::Clear ( )
inline

Remove all elements from the vector.

Definition at line 452 of file v8-util.h.

452  {
453  size_t length = Traits::Size(&impl_);
454  for (size_t i = 0; i < length; i++) {
455  UniquePersistent<V> p;
456  p.val_ = FromVal(Traits::Get(&impl_, i));
457  }
458  Traits::Clear(&impl_);
459  }
static V * FromVal(PersistentContainerValue v)
Definition: v8-util.h:477

References v8::PersistentValueVector< V, Traits >::FromVal(), v8::PersistentValueVector< V, Traits >::impl_, and v8::PersistentBase< T >::val_.

Referenced by v8::PersistentValueVector< V, Traits >::~PersistentValueVector().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ClearAndLeak()

template<typename V , typename Traits = DefaultPersistentValueVectorTraits>
static PersistentContainerValue v8::PersistentValueVector< V, Traits >::ClearAndLeak ( UniquePersistent< V > *  persistent)
inlinestaticprivate

Definition at line 470 of file v8-util.h.

471  {
472  V* v = persistent->val_;
473  persistent->val_ = 0;
474  return reinterpret_cast<PersistentContainerValue>(v);
475  }
uintptr_t PersistentContainerValue
Definition: v8-util.h:21

References v8::PersistentBase< T >::val_.

Referenced by v8::PersistentValueVector< V, Traits >::Append().

+ Here is the caller graph for this function:

◆ FromVal()

template<typename V , typename Traits = DefaultPersistentValueVectorTraits>
static V* v8::PersistentValueVector< V, Traits >::FromVal ( PersistentContainerValue  v)
inlinestaticprivate

Definition at line 477 of file v8-util.h.

477  {
478  return reinterpret_cast<V*>(v);
479  }

Referenced by v8::PersistentValueVector< V, Traits >::Clear(), and v8::PersistentValueVector< V, Traits >::Get().

+ Here is the caller graph for this function:

◆ Get()

template<typename V , typename Traits = DefaultPersistentValueVectorTraits>
Local<V> v8::PersistentValueVector< V, Traits >::Get ( size_t  index) const
inline

Retrieve the i-th value in the vector.

Definition at line 445 of file v8-util.h.

445  {
446  return Local<V>::New(isolate_, FromVal(Traits::Get(&impl_, index)));
447  }
static Local< T > New(Isolate *isolate, Handle< T > that)
Create a local handle for the content of another handle.
Definition: v8.h:5987

References v8::PersistentValueVector< V, Traits >::FromVal(), v8::PersistentValueVector< V, Traits >::impl_, v8::PersistentValueVector< V, Traits >::isolate_, and v8::Local< T >::New().

+ Here is the call graph for this function:

◆ IsEmpty()

template<typename V , typename Traits = DefaultPersistentValueVectorTraits>
bool v8::PersistentValueVector< V, Traits >::IsEmpty ( ) const
inline

Are there any values in the vector?

Definition at line 431 of file v8-util.h.

431  {
432  return Traits::IsEmpty(&impl_);
433  }

References v8::PersistentValueVector< V, Traits >::impl_.

◆ ReserveCapacity()

template<typename V , typename Traits = DefaultPersistentValueVectorTraits>
void v8::PersistentValueVector< V, Traits >::ReserveCapacity ( size_t  capacity)
inline

Reserve capacity in the vector.

(Efficiency gains depend on the backing implementation.)

Definition at line 465 of file v8-util.h.

465  {
466  Traits::ReserveCapacity(&impl_, capacity);
467  }

References v8::PersistentValueVector< V, Traits >::impl_.

◆ Size()

template<typename V , typename Traits = DefaultPersistentValueVectorTraits>
size_t v8::PersistentValueVector< V, Traits >::Size ( ) const
inline

How many elements are in the vector?

Definition at line 438 of file v8-util.h.

438  {
439  return Traits::Size(&impl_);
440  }

References v8::PersistentValueVector< V, Traits >::impl_.

Member Data Documentation

◆ impl_

◆ isolate_

template<typename V , typename Traits = DefaultPersistentValueVectorTraits>
Isolate* v8::PersistentValueVector< V, Traits >::isolate_
private

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