1
0
mirror of https://github.com/fumiama/base16384-sycl.git synced 2026-06-05 00:32:49 +08:00
Files
base16384-sycl/include/errors.hpp
2025-09-28 17:19:23 +08:00

41 lines
1.2 KiB
C++

#ifndef _ERRORS_HPP_
#define _ERRORS_HPP_
#include <functional>
#include <iostream>
#include <sycl/sycl.hpp>
typedef enum {
base16384_errors_code_ok,
base16384_errors_code_sync_sycl_exception,
base16384_errors_code_std_exception,
base16384_errors_code_unknown_exception,
} base16384_errors_code_enum_t;
template <typename T>
concept base16384_has_what_concept_t = requires(T t) { t.what(); };
template <base16384_has_what_concept_t T>
static void base16384_print_what(T e, std::string msg) {
std::cerr << msg << e.what() << std::endl;
}
// failed try to exec fn, catch and print .what() when exception is thrown.
static base16384_errors_code_enum_t base16384_try_failed(std::function<void(void)> fn) {
try {
fn();
} catch (sycl::exception &e) {
base16384_print_what(e, "Caught sync SYCL exception: ");
return base16384_errors_code_sync_sycl_exception;
} catch (std::exception &e) {
base16384_print_what(e, "Caught std exception: ");
return base16384_errors_code_std_exception;
} catch (...) {
std::cerr << "Caught unknown exception." << std::endl;
return base16384_errors_code_unknown_exception;
}
return base16384_errors_code_ok;
}
#endif