123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- /*******************************************************************************
- * Copyright 2009-2016 Jörg Müller
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- ******************************************************************************/
- #pragma once
- /**
- * \def AUD_NOEXCEPT
- * Compatibility macro for noexcept.
- */
- #ifdef _MSC_VER
- #define AUD_NOEXCEPT
- #else
- #define AUD_NOEXCEPT noexcept
- #endif
- /**
- * @file Exception.h
- * @ingroup general
- * Defines the Exception class as well as the AUD_THROW macro for easy throwing.
- */
- #include "Audaspace.h"
- #include <exception>
- #include <string>
- /// Throws a Exception with the provided error code.
- #define AUD_THROW(exception, message) { throw exception(message, __FILE__, __LINE__); }
- AUD_NAMESPACE_BEGIN
- /**
- * The Exception class is the general exception base class.
- */
- class AUD_API Exception : public std::exception
- {
- protected:
- /// A message describing the problem.
- const std::string m_message;
- /// The source code file in which the exception was thrown.
- const std::string m_file;
- /// The source code line from which the exception was thrown.
- const int m_line;
- /**
- * Copy constructor.
- * @param exception The exception to be copied.
- */
- Exception(const Exception& exception);
- /**
- * Creates a new Exception object.
- * @param message A message describing the problem.
- * @param file The source code file in which the exception was thrown.
- * @param line The source code line from which the exception was thrown.
- */
- Exception(std::string message, std::string file, int line);
- public:
- /**
- * Destroys the object.
- */
- virtual ~Exception() AUD_NOEXCEPT;
- /**
- * Returns the error message.
- * @return A C string error message.
- */
- virtual const char* what() const AUD_NOEXCEPT;
- /**
- * Returns the error message plus file and line number for debugging purposes.
- * @return The error message including debug information.
- */
- virtual std::string getDebugMessage() const;
- /**
- * Returns the error message.
- * @return The error message as string.
- */
- const std::string& getMessage() const;
- /**
- * Returns the file in which the exception was thrown.
- * @return The name of the file in which the exception was thrown.
- */
- const std::string& getFile() const;
- /**
- * Returns the line where the exception was originally thrown.
- * @return The line of the source file where the exception was generated.
- */
- int getLine() const;
- };
- /**
- * The FileException class is used for error cases in which files cannot
- * be read or written due to unknown containers or codecs.
- */
- class AUD_API FileException : public Exception
- {
- public:
- /**
- * Creates a new FileException object.
- * @param message A message describing the problem.
- * @param file The source code file in which the exception was thrown.
- * @param line The source code line from which the exception was thrown.
- */
- FileException(std::string message, std::string file, int line);
- /**
- * Copy constructor.
- * @param exception The exception to be copied.
- */
- FileException(const FileException& exception);
- ~FileException() AUD_NOEXCEPT;
- };
- /**
- * The DeviceException class is used for error cases in connection with
- * devices, which usually happens when specific features or requests
- * cannot be fulfilled by a device, for example when the device is opened.
- */
- class AUD_API DeviceException : public Exception
- {
- public:
- /**
- * Creates a new DeviceException object.
- * @param message A message describing the problem.
- * @param file The source code file in which the exception was thrown.
- * @param line The source code line from which the exception was thrown.
- */
- DeviceException(std::string message, std::string file, int line);
- /**
- * Copy constructor.
- * @param exception The exception to be copied.
- */
- DeviceException(const DeviceException& exception);
- ~DeviceException() AUD_NOEXCEPT;
- };
- /**
- * The StateException class is used for error cases of sounds or readers
- * with illegal states or requirements for states of dependent classes.
- * It is used for example when an effect reader needs a specific
- * specification from its input.
- */
- class AUD_API StateException : public Exception
- {
- public:
- /**
- * Creates a new StateException object.
- * @param message A message describing the problem.
- * @param file The source code file in which the exception was thrown.
- * @param line The source code line from which the exception was thrown.
- */
- StateException(std::string message, std::string file, int line);
- /**
- * Copy constructor.
- * @param exception The exception to be copied.
- */
- StateException(const StateException& exception);
- ~StateException() AUD_NOEXCEPT;
- };
- AUD_NAMESPACE_END
|