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 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 bool Contains(const K& key) { | 147 bool Contains(const K& key) { |
148 return Traits::Get(&impl_, key) != kPersistentContainerNotFound; | 148 return Traits::Get(&impl_, key) != kPersistentContainerNotFound; |
149 } | 149 } |
150 | 150 |
151 /** | 151 /** |
152 * Get value stored in map and set it in returnValue. | 152 * Get value stored in map and set it in returnValue. |
153 * Return true if a value was found. | 153 * Return true if a value was found. |
154 */ | 154 */ |
155 bool SetReturnValue(const K& key, | 155 bool SetReturnValue(const K& key, |
156 ReturnValue<Value> returnValue) { | 156 ReturnValue<Value> returnValue) { |
157 return SetReturnValueFromVal(returnValue, Traits::Get(&impl_, key)); | 157 return SetReturnValueFromVal(&returnValue, Traits::Get(&impl_, key)); |
158 } | 158 } |
159 | 159 |
160 /** | 160 /** |
161 * Call Isolate::SetReference with the given parent and the map value. | 161 * Call Isolate::SetReference with the given parent and the map value. |
162 */ | 162 */ |
163 void SetReference(const K& key, | 163 void SetReference(const K& key, |
164 const Persistent<Object>& parent) { | 164 const Persistent<Object>& parent) { |
165 GetIsolate()->SetReference( | 165 GetIsolate()->SetReference( |
166 reinterpret_cast<internal::Object**>(parent.val_), | 166 reinterpret_cast<internal::Object**>(parent.val_), |
167 reinterpret_cast<internal::Object**>(FromVal(Traits::Get(&impl_, key)))); | 167 reinterpret_cast<internal::Object**>(FromVal(Traits::Get(&impl_, key)))); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
220 : value_(other.value_) { } | 220 : value_(other.value_) { } |
221 | 221 |
222 Local<V> NewLocal(Isolate* isolate) const { | 222 Local<V> NewLocal(Isolate* isolate) const { |
223 return Local<V>::New(isolate, FromVal(value_)); | 223 return Local<V>::New(isolate, FromVal(value_)); |
224 } | 224 } |
225 bool IsEmpty() const { | 225 bool IsEmpty() const { |
226 return value_ == kPersistentContainerNotFound; | 226 return value_ == kPersistentContainerNotFound; |
227 } | 227 } |
228 template<typename T> | 228 template<typename T> |
229 bool SetReturnValue(ReturnValue<T> returnValue) { | 229 bool SetReturnValue(ReturnValue<T> returnValue) { |
230 return SetReturnValueFromVal(returnValue, value_); | 230 return SetReturnValueFromVal(&returnValue, value_); |
231 } | 231 } |
232 void Reset() { | 232 void Reset() { |
233 value_ = kPersistentContainerNotFound; | 233 value_ = kPersistentContainerNotFound; |
234 } | 234 } |
235 void operator=(const PersistentValueReference& other) { | 235 void operator=(const PersistentValueReference& other) { |
236 value_ = other.value_; | 236 value_ = other.value_; |
237 } | 237 } |
238 | 238 |
239 private: | 239 private: |
240 friend class PersistentValueMap; | 240 friend class PersistentValueMap; |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 persistentValueMap->Remove(key).Pass(), key); | 302 persistentValueMap->Remove(key).Pass(), key); |
303 Traits::DisposeCallbackData(data.GetParameter()); | 303 Traits::DisposeCallbackData(data.GetParameter()); |
304 } | 304 } |
305 } | 305 } |
306 | 306 |
307 static V* FromVal(PersistentContainerValue v) { | 307 static V* FromVal(PersistentContainerValue v) { |
308 return reinterpret_cast<V*>(v); | 308 return reinterpret_cast<V*>(v); |
309 } | 309 } |
310 | 310 |
311 static bool SetReturnValueFromVal( | 311 static bool SetReturnValueFromVal( |
312 ReturnValue<Value>& returnValue, PersistentContainerValue value) { | 312 ReturnValue<Value>* returnValue, PersistentContainerValue value) { |
313 bool hasValue = value != kPersistentContainerNotFound; | 313 bool hasValue = value != kPersistentContainerNotFound; |
314 if (hasValue) { | 314 if (hasValue) { |
315 returnValue.SetInternal( | 315 returnValue->SetInternal( |
316 *reinterpret_cast<internal::Object**>(FromVal(value))); | 316 *reinterpret_cast<internal::Object**>(FromVal(value))); |
317 } | 317 } |
318 return hasValue; | 318 return hasValue; |
319 } | 319 } |
320 | 320 |
321 static PersistentContainerValue ClearAndLeak( | 321 static PersistentContainerValue ClearAndLeak( |
322 UniquePersistent<V>* persistent) { | 322 UniquePersistent<V>* persistent) { |
323 V* v = persistent->val_; | 323 V* v = persistent->val_; |
324 persistent->val_ = 0; | 324 persistent->val_ = 0; |
325 return reinterpret_cast<PersistentContainerValue>(v); | 325 return reinterpret_cast<PersistentContainerValue>(v); |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
478 return reinterpret_cast<V*>(v); | 478 return reinterpret_cast<V*>(v); |
479 } | 479 } |
480 | 480 |
481 Isolate* isolate_; | 481 Isolate* isolate_; |
482 typename Traits::Impl impl_; | 482 typename Traits::Impl impl_; |
483 }; | 483 }; |
484 | 484 |
485 } // namespace v8 | 485 } // namespace v8 |
486 | 486 |
487 #endif // V8_UTIL_H_ | 487 #endif // V8_UTIL_H_ |
OLD | NEW |