dispenso/detail/per_thread_info.h (39 lines of code) (raw):

// Copyright (c) Facebook, Inc. and its affiliates. // // This source code is licensed under the MIT license found in the // LICENSE.md file in the root directory of this source tree. #pragma once #include <dispenso/platform.h> namespace dispenso { namespace detail { struct alignas(kCacheLineSize) PerThreadInfo { void* pool = nullptr; int parForRecursionLevel = 0; }; class ParForRecursion { public: ~ParForRecursion() { --parForRecursionLevel_; } private: ParForRecursion(int& parForRecursionLevel) : parForRecursionLevel_(parForRecursionLevel) { ++parForRecursionLevel_; } int& parForRecursionLevel_; friend class PerPoolPerThreadInfo; }; class PerPoolPerThreadInfo { public: static void registerPool(void* pool) { info().pool = pool; } static bool isParForRecursive(void* pool) { return (!info().pool || info().pool == pool) && info().parForRecursionLevel > 0; } static bool isPoolRecursive(void* pool) { return info().pool == pool; } static ParForRecursion parForRecurse() { return ParForRecursion(info().parForRecursionLevel); } private: DISPENSO_DLL_ACCESS static PerThreadInfo& info(); }; } // namespace detail } // namespace dispenso