1/*
2 Copyright (c) 2005-2021 Intel Corporation
3
4 Licensed under the Apache License, Version 2.0 (the "License");
5 you may not use this file except in compliance with the License.
6 You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15*/
16
17#ifndef __TBB__exception_H
18#define __TBB__exception_H
19
20#include "_config.h"
21
22#include <new> // std::bad_alloc
23#include <exception> // std::exception
24#include <stdexcept> // std::runtime_error
25
26namespace tbb {
27namespace detail {
28inline namespace d0 {
29enum class exception_id {
30 bad_alloc = 1,
31 bad_last_alloc,
32 user_abort,
33 nonpositive_step,
34 out_of_range,
35 reservation_length_error,
36 missing_wait,
37 invalid_load_factor,
38 invalid_key,
39 bad_tagged_msg_cast,
40 unsafe_wait,
41 last_entry
42};
43} // namespace d0
44
45#if _MSC_VER
46 #pragma warning(disable: 4275)
47#endif
48
49namespace r1 {
50//! Exception for concurrent containers
51class TBB_EXPORT bad_last_alloc : public std::bad_alloc {
52public:
53 const char* __TBB_EXPORTED_METHOD what() const noexcept(true) override;
54};
55
56//! Exception for user-initiated abort
57class TBB_EXPORT user_abort : public std::exception {
58public:
59 const char* __TBB_EXPORTED_METHOD what() const noexcept(true) override;
60};
61
62//! Exception for missing wait on structured_task_group
63class TBB_EXPORT missing_wait : public std::exception {
64public:
65 const char* __TBB_EXPORTED_METHOD what() const noexcept(true) override;
66};
67
68//! Exception for impossible finalization of task_sheduler_handle
69class TBB_EXPORT unsafe_wait : public std::runtime_error {
70public:
71 unsafe_wait(const char* msg) : std::runtime_error(msg) {}
72};
73
74//! Gathers all throw operators in one place.
75/** Its purpose is to minimize code bloat that can be caused by throw operators
76 scattered in multiple places, especially in templates. **/
77TBB_EXPORT void __TBB_EXPORTED_FUNC throw_exception ( exception_id );
78} // namespace r1
79
80inline namespace d0 {
81using r1::throw_exception;
82} // namespace d0
83
84} // namespace detail
85} // namespace tbb
86
87#endif // __TBB__exception_H
88
89

source code of include/oneapi/tbb/detail/_exception.h