25template <
typename K,
typename V,
typename Traits>
43template<
typename K,
typename V>
47 typedef std::map<K, PersistentContainerValue>
Impl;
50 static bool Empty(
Impl* impl) {
return impl->empty(); }
51 static size_t Size(
Impl* impl) {
return impl->size(); }
59 std::pair<Iterator, bool> res = impl->insert(std::make_pair(
key, value));
62 old_value = res.first->second;
63 res.first->second =
value;
90template<
typename K,
typename V>
116template <
typename K,
typename V>
119 template <
typename T>
148 template <
typename T>
165template <
typename K,
typename V,
typename Traits>
185#ifdef V8_ENABLE_DIRECT_HANDLE
186 if (p ==
nullptr)
return Local<V>();
219 typedef typename Traits::Iterator It;
222 while (!Traits::Empty(&
impl_)) {
223 typename Traits::Impl
impl;
225 for (It
i = Traits::Begin(&
impl);
i != Traits::End(&
impl); ++
i) {
325 Traits::DisposeCallbackData(
326 p.template ClearWeak<typename Traits::WeakCallbackDataType>());
360template <
typename K,
typename V,
typename Traits>
394 if (Traits::kCallbackType ==
kNotWeak) {
402 persistent->template SetWeak<typename Traits::WeakCallbackDataType>(
408 return this->
Release(old_value).Pass();
417 *reference = this->
Leak(&value);
424 if (Traits::kCallbackType !=
kNotWeak) {
426 Traits::MapFromWeakCallbackInfo(data);
427 K key = Traits::KeyFromWeakCallbackInfo(data);
428 Traits::Dispose(data.GetIsolate(),
430 Traits::DisposeCallbackData(data.GetParameter());
436template <
typename K,
typename V,
typename Traits>
470 if (Traits::kCallbackType ==
kNotWeak) {
478 persistent->template SetWeak<typename Traits::WeakCallbackDataType>(
484 return this->
Release(old_value).Pass();
493 *reference = this->
Leak(&value);
500 if (Traits::kCallbackType !=
kNotWeak) {
501 auto map = Traits::MapFromWeakCallbackInfo(data);
502 K key = Traits::KeyFromWeakCallbackInfo(data);
503 map->RemoveWeak(
key);
504 Traits::OnWeakCallback(data);
511 Traits::DisposeWeak(data);
523template<
typename K,
typename V,
524 typename Traits = DefaultPersistentValueMapTraits<K, V> >
539template <
typename K,
typename V,
540 typename Traits = DefaultGlobalMapTraits<K, V> >
static void DisposeCallbackData(WeakCallbackDataType *data)
static void OnWeakCallback(const WeakCallbackInfo< WeakCallbackDataType > &data)
static K KeyFromWeakCallbackInfo(const WeakCallbackInfo< WeakCallbackDataType > &data)
GlobalValueMap< K, V, DefaultGlobalMapTraits< K, V > > MapType
void WeakCallbackDataType
static MapType * MapFromWeakCallbackInfo(const WeakCallbackInfo< WeakCallbackDataType > &data)
static const PersistentContainerCallbackType kCallbackType
static void DisposeWeak(const WeakCallbackInfo< WeakCallbackDataType > &data)
static WeakCallbackDataType * WeakCallbackParameter(MapType *map, const K &key, Local< V > value)
static void Dispose(Isolate *isolate, Global< V > value, K key)
static const PersistentContainerCallbackType kCallbackType
static WeakCallbackDataType * WeakCallbackParameter(MapType *map, const K &key, Local< V > value)
static void Dispose(Isolate *isolate, Global< V > value, K key)
PersistentValueMap< K, V, DefaultPersistentValueMapTraits< K, V > > MapType
void WeakCallbackDataType
static K KeyFromWeakCallbackInfo(const WeakCallbackInfo< WeakCallbackDataType > &data)
static void DisposeCallbackData(WeakCallbackDataType *data)
static MapType * MapFromWeakCallbackInfo(const WeakCallbackInfo< WeakCallbackDataType > &data)
Global< V > Set(const K &key, Local< V > value)
GlobalValueMap(Isolate *isolate, const char *label)
PersistentValueMapBase< K, V, Traits >::PersistentValueReference PersistentValueReference
Global< V > Set(const K &key, Global< V > value)
Global< V > SetUnique(const K &key, Global< V > *persistent)
GlobalValueMap(Isolate *isolate)
Global< V > Set(const K &key, Global< V > value, PersistentValueReference *reference)
static void SecondWeakCallback(const WeakCallbackInfo< typename Traits::WeakCallbackDataType > &data)
static void OnWeakCallback(const WeakCallbackInfo< typename Traits::WeakCallbackDataType > &data)
static V8_INLINE Local< T > New(Isolate *isolate, Local< T > that)
V8_INLINE void AnnotateStrongRetainer(const char *label)
V8_INLINE bool IsWeak() const
PersistentValueReference(PersistentContainerValue value)
bool SetReturnValue(ReturnValue< T > returnValue)
PersistentValueReference(const PersistentValueReference &other)
void operator=(PersistentContainerValue value)
Local< V > NewLocal(Isolate *isolate) const
PersistentValueReference()
void operator=(const PersistentValueReference &other)
PersistentContainerValue value_
PersistentValueMapBase(Isolate *isolate)
PersistentValueMapBase(Isolate *isolate, const char *label)
void AnnotateStrongRetainer(Global< V > *persistent)
PersistentValueReference GetReference(const K &key)
~PersistentValueMapBase()
Local< V > Get(const K &key)
void RemoveWeak(const K &key)
static PersistentContainerValue ClearAndLeak(Global< V > *persistent)
bool SetReturnValue(const K &key, ReturnValue< Value > returnValue)
bool Contains(const K &key)
static V * FromVal(PersistentContainerValue v)
static PersistentContainerValue Leak(Global< V > *persistent)
static bool SetReturnValueFromVal(ReturnValue< Value > *returnValue, PersistentContainerValue value)
void operator=(PersistentValueMapBase &)
static Global< V > Release(PersistentContainerValue v)
Global< V > Remove(const K &key)
PersistentValueMapBase(PersistentValueMapBase &)
PersistentValueMapBase< K, V, Traits >::PersistentValueReference PersistentValueReference
Global< V > Set(const K &key, Global< V > value, PersistentValueReference *reference)
Global< V > Set(const K &key, Global< V > value)
static void WeakCallback(const WeakCallbackInfo< typename Traits::WeakCallbackDataType > &data)
Global< V > SetUnique(const K &key, Global< V > *persistent)
Global< V > Set(const K &key, Local< V > value)
PersistentValueMap(Isolate *isolate)
PersistentValueMap(Isolate *isolate, const char *label)
V8_INLINE void SetInternal(internal::Address value)
StdGlobalValueMap(Isolate *isolate)
static PersistentContainerValue Set(Impl *impl, K key, PersistentContainerValue value)
static Iterator End(Impl *impl)
static size_t Size(Impl *impl)
static bool Empty(Impl *impl)
static PersistentContainerValue Get(Impl *impl, K key)
static K Key(Iterator it)
std::map< K, PersistentContainerValue > Impl
static Iterator Begin(Impl *impl)
static PersistentContainerValue Remove(Impl *impl, K key)
static PersistentContainerValue Value(Iterator it)
static void Swap(Impl &a, Impl &b)
StdPersistentValueMap(Isolate *isolate)
V8_INLINE internal::Address *const & slot() const
static V8_INLINE T * SlotAsValue(S *slot)
PersistentContainerCallbackType
@ kWeakWithInternalFields
static const uintptr_t kPersistentContainerNotFound
uintptr_t PersistentContainerValue
std::unique_ptr< ValueMirror > value
std::unique_ptr< ValueMirror > key