blender/extern/audaspace/include/Exception.h
Dalai Felinto 781dd5edb5 Fix audaspace mess in 2.8
All these files were removed since accidental commit, revert and merge in 2.8.

ea31f0ac3b877e + 0a4e170c28cec + 11f9a23a286c17f + 7b27b10fa6a6
2018-02-01 09:22:57 -02:00

186 lines
5.1 KiB
C++

/*******************************************************************************
* 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