24.08
Exceptions.hpp
Go to the documentation of this file.
1
//
2
// Copyright © 2017-2023 Arm Ltd. All rights reserved.
3
// SPDX-License-Identifier: MIT
4
//
5
#pragma once
6
7
#include <sstream>
8
#include <stdexcept>
9
#include <string>
10
11
namespace
armnn
12
{
13
14
struct
CheckLocation
15
{
16
const
char
*
m_Function
;
17
const
char
*
m_File
;
18
unsigned
int
m_Line
;
19
20
CheckLocation
(
const
char
* func,
21
const
char
* file,
22
unsigned
int
line)
23
:
m_Function
{func}
24
,
m_File
{file}
25
,
m_Line
{line}
26
{
27
}
28
29
std::string
AsString
()
const
30
{
31
std::stringstream ss;
32
ss <<
" at function "
<<
m_Function
33
<<
" ["
<<
m_File
<<
':'
<<
m_Line
<<
"]"
;
34
return
ss.str();
35
}
36
37
std::string
FileLine
()
const
38
{
39
std::stringstream ss;
40
ss <<
" ["
<<
m_File
<<
':'
<<
m_Line
<<
"]"
;
41
return
ss.str();
42
}
43
};
44
45
/// Base class for all ArmNN exceptions so that users can filter to just those.
46
class
Exception
:
public
std::exception
47
{
48
public
:
49
explicit
Exception
(
const
std::string& message);
50
51
/// exception with context
52
explicit
Exception
(
const
std::string& message,
53
const
CheckLocation
& location);
54
55
/// preserving previous exception context
56
/// and adding local context information
57
explicit
Exception
(
const
Exception
& other,
58
const
std::string& message,
59
const
CheckLocation
& location);
60
61
virtual
const
char
*
what
()
const
noexcept
override
;
62
63
private
:
64
std::string m_Message;
65
};
66
67
/// Class for non-fatal exceptions raised while initialising a backend
68
class
BackendUnavailableException
:
public
Exception
69
{
70
public
:
71
using
Exception::Exception
;
72
};
73
74
class
ClRuntimeUnavailableException
:
public
BackendUnavailableException
75
{
76
public
:
77
using
BackendUnavailableException::BackendUnavailableException;
78
};
79
80
class
InvalidArgumentException
:
public
Exception
81
{
82
public
:
83
using
Exception::Exception
;
84
};
85
86
class
FileNotFoundException
:
public
Exception
87
{
88
public
:
89
using
Exception::Exception
;
90
};
91
92
class
ParseException
:
public
Exception
93
{
94
public
:
95
using
Exception::Exception
;
96
};
97
98
class
UnimplementedException
:
public
Exception
99
{
100
public
:
101
using
Exception::Exception
;
102
UnimplementedException
();
103
};
104
105
class
LayerValidationException
:
public
Exception
106
{
107
using
Exception::Exception
;
108
};
109
110
class
GraphValidationException
:
public
Exception
111
{
112
using
Exception::Exception
;
113
};
114
115
class
BadOptionalAccessException
:
public
Exception
116
{
117
using
Exception::Exception
;
118
};
119
120
class
RuntimeException
:
public
Exception
121
{
122
using
Exception::Exception
;
123
};
124
125
class
MemoryImportException
:
public
Exception
126
{
127
using
Exception::Exception
;
128
};
129
130
class
MemoryExportException
:
public
Exception
131
{
132
using
Exception::Exception
;
133
};
134
135
class
TimeoutException
:
public
Exception
136
{
137
using
Exception::Exception
;
138
};
139
140
class
PolymorphicDowncastException
:
public
Exception
141
{
142
public
:
143
using
Exception::Exception
;
144
};
145
146
class
NullPointerException
:
public
Exception
147
{
148
public
:
149
using
Exception::Exception
;
150
};
151
152
class
BackendCapabilityException
:
public
Exception
153
{
154
public
:
155
using
Exception::Exception
;
156
};
157
158
class
MemoryValidationException
:
public
Exception
159
{
160
public
:
161
using
Exception::Exception
;
162
};
163
164
template
<
typename
ExceptionType>
165
void
ConditionalThrow
(
bool
condition,
const
std::string& message)
166
{
167
if
(!condition)
168
{
169
throw
ExceptionType(message);
170
}
171
}
172
173
template
<
typename
ExceptionType>
174
void
ConditionalThrow
(
bool
condition)
175
{
176
if
(!condition)
177
{
178
throw
ExceptionType();
179
}
180
}
181
182
183
///
184
/// ComparedType must support:
185
/// operator==(const ComparedType&)
186
/// operator<<(ostream&, const ComparedType&)
187
///
188
template
<
typename
ExceptionType,
typename
ComparedType>
189
void
ConditionalThrowIfNotEqual
(
const
std::string& message,
190
const
ComparedType& leftHandSide,
191
const
ComparedType& rightHandSide)
192
{
193
if
(!(leftHandSide == rightHandSide))
194
{
195
std::stringstream ss;
196
ss << message <<
" : "
<< leftHandSide <<
" != "
<< rightHandSide;
197
throw
ExceptionType(ss.str());
198
}
199
}
200
201
}
// namespace armnn
202
203
#define CHECK_LOCATION() armnn::CheckLocation(__func__, __FILE__, __LINE__)
204
205
// Use to throw rather than assert
206
#define ARMNN_THROW_MSG_IF_FALSE(_cond, _except, _str) \
207
do { if (!(static_cast<bool>(_cond))) {throw _except(_str);} } while(0)
208
#define ARMNN_THROW_IF_FALSE(_cond, _except) \
209
ARMNN_THROW_MSG_IF_FALSE(_cond, _except, #_cond)
210
#define ARMNN_THROW_INVALIDARG_MSG_IF_FALSE(_cond, _str) \
211
ARMNN_THROW_MSG_IF_FALSE(_cond, armnn::InvalidArgumentException, _str)
212
#define ARMNN_THROW_INVALIDARG_IF_FALSE(_cond) \
213
ARMNN_THROW_MSG_IF_FALSE(_cond, armnn::InvalidArgumentException, #_cond)
armnn::CheckLocation::m_File
const char * m_File
Definition:
Exceptions.hpp:17
armnn::CheckLocation::m_Line
unsigned int m_Line
Definition:
Exceptions.hpp:18
armnn::TimeoutException
Definition:
Exceptions.hpp:135
armnn::CheckLocation::m_Function
const char * m_Function
Definition:
Exceptions.hpp:16
armnn::UnimplementedException::UnimplementedException
UnimplementedException()
Definition:
Exceptions.cpp:37
armnn::ConditionalThrowIfNotEqual
void ConditionalThrowIfNotEqual(const std::string &message, const ComparedType &leftHandSide, const ComparedType &rightHandSide)
ComparedType must support: operator==(const ComparedType&) operator<<(ostream&, const ComparedType&)
Definition:
Exceptions.hpp:189
armnn::CheckLocation::AsString
std::string AsString() const
Definition:
Exceptions.hpp:29
armnn::Exception::what
virtual const char * what() const noexcept override
Definition:
Exceptions.cpp:32
armnn::MemoryValidationException
Definition:
Exceptions.hpp:158
armnn::CheckLocation
Definition:
Exceptions.hpp:14
armnn::CheckLocation::CheckLocation
CheckLocation(const char *func, const char *file, unsigned int line)
Definition:
Exceptions.hpp:20
armnn::LayerValidationException
Definition:
Exceptions.hpp:105
armnn::InvalidArgumentException
Definition:
Exceptions.hpp:80
armnn::Exception
Base class for all ArmNN exceptions so that users can filter to just those.
Definition:
Exceptions.hpp:46
armnn::RuntimeException
Definition:
Exceptions.hpp:120
armnn::ConditionalThrow
void ConditionalThrow(bool condition, const std::string &message)
Definition:
Exceptions.hpp:165
armnn::Exception::Exception
Exception(const std::string &message)
Definition:
Exceptions.cpp:12
armnn::MemoryImportException
Definition:
Exceptions.hpp:125
armnn::BackendCapabilityException
Definition:
Exceptions.hpp:152
armnn::ParseException
Definition:
Exceptions.hpp:92
armnn::MemoryExportException
Definition:
Exceptions.hpp:130
armnn::BadOptionalAccessException
Definition:
Exceptions.hpp:115
armnn
Copyright (c) 2021 ARM Limited and Contributors.
Definition:
01_00_quick_start.dox:6
armnn::GraphValidationException
Definition:
Exceptions.hpp:110
armnn::UnimplementedException
Definition:
Exceptions.hpp:98
armnn::NullPointerException
Definition:
Exceptions.hpp:146
armnn::PolymorphicDowncastException
Definition:
Exceptions.hpp:140
armnn::BackendUnavailableException
Class for non-fatal exceptions raised while initialising a backend.
Definition:
Exceptions.hpp:68
armnn::ClRuntimeUnavailableException
Definition:
Exceptions.hpp:74
armnn::CheckLocation::FileLine
std::string FileLine() const
Definition:
Exceptions.hpp:37
armnn::FileNotFoundException
Definition:
Exceptions.hpp:86
include
armnn
Exceptions.hpp
Generated on Wed Aug 28 2024 14:31:47 for Arm NN by
1.8.17