    // Copyright (C) 2015  Davis E. King (davis@dlib.net)
    // License: Boost Software License   See LICENSE.txt for the full license.
    #ifndef DLIB_CUDA_ERRORs_H_
    #define DLIB_CUDA_ERRORs_H_

    #include "../error.h"

    namespace dlib
    {
        struct cuda_error : public error
        {
            /*!
                WHAT THIS OBJECT REPRESENTS
                    This is the exception thrown if any calls to the NVIDIA CUDA runtime
                    returns an error.
            !*/

            cuda_error(const std::string& message): error(message) {}
        };

        struct cudnn_error : public cuda_error
        {
            /*!
                WHAT THIS OBJECT REPRESENTS
                    This is the exception thrown if any calls to the NVIDIA cuDNN library
                    returns an error.
            !*/

            cudnn_error(const std::string& message): cuda_error(message) {}
        };

        struct curand_error : public cuda_error
        {
            /*!
                WHAT THIS OBJECT REPRESENTS
                    This is the exception thrown if any calls to the NVIDIA cuRAND library
                    returns an error.
            !*/

            curand_error(const std::string& message): cuda_error(message) {}
        };

        struct cublas_error : public cuda_error
        {
            /*!
                WHAT THIS OBJECT REPRESENTS
                    This is the exception thrown if any calls to the NVIDIA cuBLAS library
                    returns an error.
            !*/

            cublas_error(const std::string& message): cuda_error(message) {}
        };

        struct cusolver_error : public cuda_error
        {
            /*!
                WHAT THIS OBJECT REPRESENTS
                    This is the exception thrown if any calls to the NVIDIA cuSolver library
                    returns an error.
            !*/

            cusolver_error(const std::string& message): cuda_error(message) {}
        };
    }

    #endif // DLIB_CUDA_ERRORs_H_