1// Copyright 2022 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_HEAP_HANDLE_H_ 6#define INCLUDE_CPPGC_HEAP_HANDLE_H_ 7 8#include "v8config.h" // NOLINT(build/include_directory) 9 10namespace cppgc { 11 12namespace internal { 13class HeapBase; 14class WriteBarrierTypeForCagedHeapPolicy; 15class WriteBarrierTypeForNonCagedHeapPolicy; 16} // namespace internal 17 18/** 19 * Opaque handle used for additional heap APIs. 20 */ 21class HeapHandle { 22 public: 23 // Deleted copy ctor to avoid treating the type by value. 24 HeapHandle(const HeapHandle&) = delete; 25 HeapHandle& operator=(const HeapHandle&) = delete; 26 27 private: 28 HeapHandle() = default; 29 30 V8_INLINE bool is_incremental_marking_in_progress() const { 31 return is_incremental_marking_in_progress_; 32 } 33 34 V8_INLINE bool is_young_generation_enabled() const { 35 return is_young_generation_enabled_; 36 } 37 38 bool is_incremental_marking_in_progress_ = false; 39 bool is_young_generation_enabled_ = false; 40 41 friend class internal::HeapBase; 42 friend class internal::WriteBarrierTypeForCagedHeapPolicy; 43 friend class internal::WriteBarrierTypeForNonCagedHeapPolicy; 44}; 45 46} // namespace cppgc 47 48#endif // INCLUDE_CPPGC_HEAP_HANDLE_H_ 49