| //===----------------------------------------------------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include <sycl/__impl/context.hpp> | |
| #include <sycl/__impl/detail/config.hpp> | |
| #include <sycl/__impl/exception.hpp> | |
| _LIBSYCL_BEGIN_NAMESPACE_SYCL | |
| namespace detail { | |
| class SYCLCategory : public std::error_category { | |
| public: | |
| const char *name() const noexcept override { return "sycl"; } | |
| std::string message(int) const override { return "SYCL Error"; } | |
| }; | |
| } // namespace detail | |
| // Free functions | |
| const std::error_category &sycl_category() noexcept { | |
| static const detail::SYCLCategory SYCLCategoryObj; | |
| return SYCLCategoryObj; | |
| } | |
| std::error_code make_error_code(sycl::errc e) noexcept { | |
| return std::error_code(static_cast<int>(e), sycl_category()); | |
| } | |
| // Exception methods implementation | |
| exception::exception(std::error_code EC, std::shared_ptr<context> SharedPtrCtx, | |
| const char *WhatArg) | |
| : MMessage(std::make_shared<std::string>(WhatArg)), MContext(SharedPtrCtx), | |
| MErrC(EC) {} | |
| exception::~exception() = default; | |
| const std::error_code &exception::code() const noexcept { return MErrC; } | |
| const std::error_category &exception::category() const noexcept { | |
| return code().category(); | |
| } | |
| const char *exception::what() const noexcept { return MMessage->c_str(); } | |
| bool exception::has_context() const noexcept { return MContext != nullptr; } | |
| context exception::get_context() const { | |
| if (!has_context()) | |
| throw exception(make_error_code(sycl::errc::invalid), | |
| "Exception does not have an associated context."); | |
| return *MContext; | |
| } | |
| _LIBSYCL_END_NAMESPACE_SYCL |