// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef BASE_THREADING_SEQUENCE_LOCAL_STORAGE_MAP_H_ #define BASE_THREADING_SEQUENCE_LOCAL_STORAGE_MAP_H_ #include "base/auto_reset.h" #include "base/base_export.h" #include "base/containers/flat_map.h" #include "base/memory/raw_ptr_exclusion.h" #include "third_party/abseil-cpp/absl/meta/type_traits.h" namespace base { namespace internal { // A SequenceLocalStorageMap holds (slot_id) -> (value, destructor) items for a // sequence. When a task runs, it is expected that a pointer to its sequence's // SequenceLocalStorageMap is set in TLS using // ScopedSetSequenceLocalStorageMapForCurrentThread. When a // SequenceLocalStorageMap is destroyed, it invokes the destructors associated // with values stored within it. // The Get() and Set() methods should not be accessed directly. // Use SequenceLocalStorageSlot to Get() and Set() values in the current // sequence's SequenceLocalStorageMap. class BASE_EXPORT SequenceLocalStorageMap { … }; // Within the scope of this object, // SequenceLocalStorageMap::GetForCurrentThread() will return a reference to the // SequenceLocalStorageMap object passed to the constructor. There can be only // one ScopedSetSequenceLocalStorageMapForCurrentThread instance per scope. class BASE_EXPORT [[maybe_unused, nodiscard]] ScopedSetSequenceLocalStorageMapForCurrentThread { … }; } // namespace internal } // namespace base #endif // BASE_THREADING_SEQUENCE_LOCAL_STORAGE_MAP_H_