1 // Copyright 2020 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef INCLUDE_CPPGC_EPHEMERON_PAIR_H_ 6 #define INCLUDE_CPPGC_EPHEMERON_PAIR_H_ 7 8 #include "cppgc/liveness-broker.h" 9 #include "cppgc/member.h" 10 11 namespace cppgc { 12 13 /** 14 * An ephemeron pair is used to conditionally retain an object. 15 * The `value` will be kept alive only if the `key` is alive. 16 */ 17 template <typename K, typename V> 18 struct EphemeronPair { EphemeronPaircppgc::EphemeronPair19 EphemeronPair(K* k, V* v) : key(k), value(v) {} 20 WeakMember<K> key; 21 Member<V> value; 22 ClearValueIfKeyIsDeadcppgc::EphemeronPair23 void ClearValueIfKeyIsDead(const LivenessBroker& broker) { 24 if (!broker.IsHeapObjectAlive(key)) value = nullptr; 25 } 26 }; 27 28 } // namespace cppgc 29 30 #endif // INCLUDE_CPPGC_EPHEMERON_PAIR_H_ 31