7 #ifndef LLU_ERRORLOG_ERRORMANAGER_H
8 #define LLU_ERRORLOG_ERRORMANAGER_H
11 #include <initializer_list>
13 #include <unordered_map>
60 template<
typename... T>
61 [[noreturn]]
static void throwException(
const std::string& errorName, T&&... args);
75 template<
typename... T>
76 [[noreturn]]
static void throwException(WolframLibraryData libData,
const std::string& errorName, T&&... args);
88 template<
class Error,
typename... Args>
107 template<
typename... T>
125 template<
typename... T>
126 [[noreturn]]
static void
136 sendParametersImmediately = newValue;
144 return sendParametersImmediately;
158 using ErrorMap = std::unordered_map<std::string, const LibraryLinkError>;
186 static ErrorMap registerLLUErrors(std::initializer_list<ErrorStringData> initList);
189 static ErrorMap& errors();
192 static int& nextErrorId();
195 static bool sendParametersImmediately;
198 template<
typename... T>
203 template<
typename... T>
208 template<
class Error,
typename... Args>
210 throw Error(findError(errorName), std::forward<Args>(args)...);
213 template<
typename... T>
218 template<
typename... T>
221 auto e = findError(errorName);
222 e.setDebugInfo(debugInfo);
223 if (libData &&
sizeof...(args) > 0) {
224 e.setMessageParameters(libData, std::forward<T>(args)...);
225 if (sendParametersImmediately) {
226 e.sendParameters(libData);
234 #endif // LLU_ERRORLOG_ERRORMANAGER_H