// Copyright 2018 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 V8_BASE_THREADED_LIST_H_ #define V8_BASE_THREADED_LIST_H_ #include <iterator> #include "src/base/compiler-specific.h" #include "src/base/macros.h" namespace v8 { namespace base { template <typename T> struct ThreadedListTraits { … }; // Represents a linked list that threads through the nodes in the linked list. // Entries in the list are pointers to nodes. By default nodes need to have a // T** next() method that returns the location where the next value is stored. // The kSupportsUnsafeInsertion flag defines whether the list supports insertion // of new elements into the list by just rewiring the next pointers without // updating the list object itself. Such an insertion might invalidate the // pointer to list tail and thus requires additional steps to recover the // pointer to the tail. // The default can be overwritten by providing a ThreadedTraits class. template <typename T, typename BaseClass, typename TLTraits = ThreadedListTraits<T>, bool kSupportsUnsafeInsertion = false> class ThreadedListBase final : public BaseClass { … }; struct EmptyBase { … }; // Check ThreadedListBase::EnsureValidTail. static constexpr bool kUnsafeInsertion = …; template <typename T, typename TLTraits = ThreadedListTraits<T>> using ThreadedList = ThreadedListBase<T, EmptyBase, TLTraits>; ThreadedListWithUnsafeInsertions; } // namespace base } // namespace v8 #endif // V8_BASE_THREADED_LIST_H_