// Copyright 2020 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef INCLUDE_CPPGC_INTERNAL_PERSISTENT_NODE_H_ #define INCLUDE_CPPGC_INTERNAL_PERSISTENT_NODE_H_ #include <array> #include <memory> #include <vector> #include "cppgc/internal/logging.h" #include "cppgc/trace-trait.h" #include "v8config.h" // NOLINT(build/include_directory) namespace cppgc { namespace internal { class CrossThreadPersistentRegion; class FatalOutOfMemoryHandler; class RootVisitor; // PersistentNode represents a variant of two states: // 1) traceable node with a back pointer to the Persistent object; // 2) freelist entry. class PersistentNode final { … }; class V8_EXPORT PersistentRegionBase { … }; // Variant of PersistentRegionBase that checks whether the allocation and // freeing happens only on the thread that created the region. class V8_EXPORT PersistentRegion final : public PersistentRegionBase { … }; // CrossThreadPersistent uses PersistentRegionBase but protects it using this // lock when needed. class V8_EXPORT PersistentRegionLock final { … }; // Variant of PersistentRegionBase that checks whether the PersistentRegionLock // is locked. class V8_EXPORT CrossThreadPersistentRegion final : protected PersistentRegionBase { … }; } // namespace internal } // namespace cppgc #endif // INCLUDE_CPPGC_INTERNAL_PERSISTENT_NODE_H_