| OLD | NEW | 
|---|
| 1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #ifndef V8_UTIL_H_ | 5 #ifndef V8_UTIL_H_ | 
| 6 #define V8_UTIL_H_ | 6 #define V8_UTIL_H_ | 
| 7 | 7 | 
| 8 #include "v8.h" | 8 #include "v8.h" | 
| 9 #include <map> | 9 #include <map> | 
| 10 #include <vector> | 10 #include <vector> | 
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 127   static MapType* MapFromWeakCallbackInfo( | 127   static MapType* MapFromWeakCallbackInfo( | 
| 128       const WeakCallbackInfo<WeakCallbackInfoType>& data) { | 128       const WeakCallbackInfo<WeakCallbackInfoType>& data) { | 
| 129     return nullptr; | 129     return nullptr; | 
| 130   } | 130   } | 
| 131   static K KeyFromWeakCallbackInfo( | 131   static K KeyFromWeakCallbackInfo( | 
| 132       const WeakCallbackInfo<WeakCallbackInfoType>& data) { | 132       const WeakCallbackInfo<WeakCallbackInfoType>& data) { | 
| 133     return K(); | 133     return K(); | 
| 134   } | 134   } | 
| 135   static void DisposeCallbackData(WeakCallbackInfoType* data) {} | 135   static void DisposeCallbackData(WeakCallbackInfoType* data) {} | 
| 136   static void Dispose(Isolate* isolate, Global<V> value, K key) {} | 136   static void Dispose(Isolate* isolate, Global<V> value, K key) {} | 
|  | 137   static void DisposeWeak(Isolate* isolate, | 
|  | 138                           const WeakCallbackInfo<WeakCallbackInfoType>& data, | 
|  | 139                           K key) {} | 
| 137 | 140 | 
| 138  private: | 141  private: | 
| 139   template <typename T> | 142   template <typename T> | 
| 140   struct RemovePointer<T*> { | 143   struct RemovePointer<T*> { | 
| 141     typedef T Type; | 144     typedef T Type; | 
| 142   }; | 145   }; | 
| 143 }; | 146 }; | 
| 144 | 147 | 
| 145 | 148 | 
| 146 /** | 149 /** | 
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 312   static Global<V> Release(PersistentContainerValue v) { | 315   static Global<V> Release(PersistentContainerValue v) { | 
| 313     Global<V> p; | 316     Global<V> p; | 
| 314     p.val_ = FromVal(v); | 317     p.val_ = FromVal(v); | 
| 315     if (Traits::kCallbackType != kNotWeak && p.IsWeak()) { | 318     if (Traits::kCallbackType != kNotWeak && p.IsWeak()) { | 
| 316       Traits::DisposeCallbackData( | 319       Traits::DisposeCallbackData( | 
| 317           p.template ClearWeak<typename Traits::WeakCallbackDataType>()); | 320           p.template ClearWeak<typename Traits::WeakCallbackDataType>()); | 
| 318     } | 321     } | 
| 319     return p.Pass(); | 322     return p.Pass(); | 
| 320   } | 323   } | 
| 321 | 324 | 
|  | 325   void RemoveWeak(const K& key) { Traits::Remove(&impl_, key); } | 
|  | 326 | 
| 322  private: | 327  private: | 
| 323   PersistentValueMapBase(PersistentValueMapBase&); | 328   PersistentValueMapBase(PersistentValueMapBase&); | 
| 324   void operator=(PersistentValueMapBase&); | 329   void operator=(PersistentValueMapBase&); | 
| 325 | 330 | 
| 326   static bool SetReturnValueFromVal(ReturnValue<Value>* returnValue, | 331   static bool SetReturnValueFromVal(ReturnValue<Value>* returnValue, | 
| 327                                     PersistentContainerValue value) { | 332                                     PersistentContainerValue value) { | 
| 328     bool hasValue = value != kPersistentContainerNotFound; | 333     bool hasValue = value != kPersistentContainerNotFound; | 
| 329     if (hasValue) { | 334     if (hasValue) { | 
| 330       returnValue->SetInternal( | 335       returnValue->SetInternal( | 
| 331           *reinterpret_cast<internal::Object**>(FromVal(value))); | 336           *reinterpret_cast<internal::Object**>(FromVal(value))); | 
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 462     return SetUnique(key, &value); | 467     return SetUnique(key, &value); | 
| 463   } | 468   } | 
| 464 | 469 | 
| 465  private: | 470  private: | 
| 466   static void WeakCallback( | 471   static void WeakCallback( | 
| 467       const WeakCallbackInfo<typename Traits::WeakCallbackDataType>& data) { | 472       const WeakCallbackInfo<typename Traits::WeakCallbackDataType>& data) { | 
| 468     if (Traits::kCallbackType != kNotWeak) { | 473     if (Traits::kCallbackType != kNotWeak) { | 
| 469       GlobalValueMap<K, V, Traits>* persistentValueMap = | 474       GlobalValueMap<K, V, Traits>* persistentValueMap = | 
| 470           Traits::MapFromWeakCallbackInfo(data); | 475           Traits::MapFromWeakCallbackInfo(data); | 
| 471       K key = Traits::KeyFromWeakCallbackInfo(data); | 476       K key = Traits::KeyFromWeakCallbackInfo(data); | 
| 472       Traits::Dispose(data.GetIsolate(), persistentValueMap->Remove(key).Pass(), | 477       persistentValueMap->RemoveWeak(key); | 
| 473                       key); | 478       Traits::DisposeWeak(data.GetIsolate(), data, key); | 
| 474       Traits::DisposeCallbackData(data.GetParameter()); | 479       Traits::DisposeCallbackData(data.GetParameter()); | 
| 475     } | 480     } | 
| 476   } | 481   } | 
| 477 }; | 482 }; | 
| 478 | 483 | 
| 479 | 484 | 
| 480 /** | 485 /** | 
| 481  * A map that uses Global as value and std::map as the backing | 486  * A map that uses Global as value and std::map as the backing | 
| 482  * implementation. Persistents are held non-weak. | 487  * implementation. Persistents are held non-weak. | 
| 483  * | 488  * | 
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 604     return reinterpret_cast<V*>(v); | 609     return reinterpret_cast<V*>(v); | 
| 605   } | 610   } | 
| 606 | 611 | 
| 607   Isolate* isolate_; | 612   Isolate* isolate_; | 
| 608   typename Traits::Impl impl_; | 613   typename Traits::Impl impl_; | 
| 609 }; | 614 }; | 
| 610 | 615 | 
| 611 }  // namespace v8 | 616 }  // namespace v8 | 
| 612 | 617 | 
| 613 #endif  // V8_UTIL_H | 618 #endif  // V8_UTIL_H | 
| OLD | NEW | 
|---|