ArmNN
 24.02
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 
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
69 {
70 public:
72 };
73 
75 {
76 public:
77  using BackendUnavailableException::BackendUnavailableException;
78 };
79 
81 {
82 public:
84 };
85 
87 {
88 public:
90 };
91 
92 class ParseException : public Exception
93 {
94 public:
96 };
97 
99 {
100 public:
101  using Exception::Exception;
103 };
104 
106 {
107  using Exception::Exception;
108 };
109 
111 {
112  using Exception::Exception;
113 };
114 
116 {
117  using Exception::Exception;
118 };
119 
121 {
122  using Exception::Exception;
123 };
124 
126 {
127  using Exception::Exception;
128 };
129 
131 {
132  using Exception::Exception;
133 };
134 
136 {
137  using Exception::Exception;
138 };
139 
141 {
142 public:
143  using Exception::Exception;
144 };
145 
147 {
148 public:
149  using Exception::Exception;
150 };
151 
153 {
154 public:
155  using Exception::Exception;
156 };
157 
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