| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | // Copyright Contributors to the OpenVDB Project | ||
| 2 | // SPDX-License-Identifier: MPL-2.0 | ||
| 3 | // | ||
| 4 | /// @file Threading.h | ||
| 5 | |||
| 6 | #ifndef OPENVDB_THREAD_THREADING_HAS_BEEN_INCLUDED | ||
| 7 | #define OPENVDB_THREAD_THREADING_HAS_BEEN_INCLUDED | ||
| 8 | |||
| 9 | #include "openvdb/version.h" | ||
| 10 | |||
| 11 | #ifndef __TBB_show_deprecation_message_task_H | ||
| 12 | #define __TBB_show_deprecation_message_task_H | ||
| 13 | #define OPENVDB_THREAD_THREADING_RESTORE_DEPRECATION_MESSAGE_TASK | ||
| 14 | #endif | ||
| 15 | |||
| 16 | |||
| 17 | /// @note tbb/blocked_range.h is the ONLY include that persists from TBB 2020 | ||
| 18 | /// to TBB 2021 that itself includes the TBB specific version header files. | ||
| 19 | /// In TBB 2020, the version header was called tbb/stddef.h. In 2021, it's | ||
| 20 | /// called tbb/version.h. We include tbb/blocked_range.h here to indirectly | ||
| 21 | /// access the version defines in a consistent way so that downstream | ||
| 22 | /// software doesn't need to provide compile time defines. | ||
| 23 | #include <tbb/blocked_range.h> | ||
| 24 | #include <tbb/task.h> | ||
| 25 | #include <tbb/task_group.h> | ||
| 26 | |||
| 27 | namespace openvdb { | ||
| 28 | OPENVDB_USE_VERSION_NAMESPACE | ||
| 29 | namespace OPENVDB_VERSION_NAME { | ||
| 30 | namespace thread { | ||
| 31 | |||
| 32 | 1107 | inline bool cancelGroupExecution() | |
| 33 | { | ||
| 34 | // @note 12000 was the 2021.1-beta05 release. The 2021.1-beta08 release | ||
| 35 | // introduced current_context(). | ||
| 36 | #if TBB_INTERFACE_VERSION >= 12002 | ||
| 37 | auto ctx = tbb::task::current_context(); | ||
| 38 | return ctx ? ctx->cancel_group_execution() : false; | ||
| 39 | #else | ||
| 40 | 1107 | return tbb::task::self().cancel_group_execution(); | |
| 41 | #endif | ||
| 42 | } | ||
| 43 | |||
| 44 | inline bool isGroupExecutionCancelled() | ||
| 45 | { | ||
| 46 | // @note 12000 was the 2021.1-beta05 release. The 2021.1-beta08 release | ||
| 47 | // introduced current_context(). | ||
| 48 | #if TBB_INTERFACE_VERSION >= 12002 | ||
| 49 | auto ctx = tbb::task::current_context(); | ||
| 50 | return ctx ? ctx->is_group_execution_cancelled() : false; | ||
| 51 | #else | ||
| 52 | 110589 | return tbb::task::self().is_cancelled(); | |
| 53 | #endif | ||
| 54 | } | ||
| 55 | |||
| 56 | } // namespace thread | ||
| 57 | } // namespace OPENVDB_VERSION_NAME | ||
| 58 | } // namespace openvdb | ||
| 59 | |||
| 60 | #ifdef OPENVDB_THREAD_THREADING_RESTORE_DEPRECATION_MESSAGE_TASK | ||
| 61 | #undef __TBB_show_deprecation_message_task_H | ||
| 62 | #undef OPENVDB_THREAD_THREADING_RESTORE_DEPRECATION_MESSAGE_TASK | ||
| 63 | #endif | ||
| 64 | |||
| 65 | |||
| 66 | #endif // OPENVDB_THREAD_THREADING_HAS_BEEN_INCLUDED | ||
| 67 |