/usr/include/uhd/exception.hpp is in libuhd-dev 3.4.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | //
// Copyright 2010-2011 Ettus Research LLC
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#ifndef INCLUDED_UHD_EXCEPTION_HPP
#define INCLUDED_UHD_EXCEPTION_HPP
#include <uhd/config.hpp>
#include <boost/current_function.hpp>
#include <stdexcept>
#include <string>
/*!
* Define common exceptions used throughout the code:
*
* - The python built-in exceptions were used as inspiration.
* - Exceptions inherit from std::exception to provide what().
* - Exceptions inherit from uhd::exception to provide code().
*
* The code() provides an error code which allows the application
* the option of printing a cryptic error message from the 1990s.
*
* The dynamic_clone() and dynamic_throw() methods allow us to:
* catch an exception by dynamic type (i.e. derived class), save it,
* and later rethrow it, knowing only the static type (i.e. base class),
* and then finally to catch it again using the derived type.
*
* http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2106.html
*/
namespace uhd{
struct UHD_API exception : std::runtime_error{
exception(const std::string &what);
virtual unsigned code(void) const = 0;
virtual exception *dynamic_clone(void) const = 0;
virtual void dynamic_throw(void) const = 0;
};
struct UHD_API assertion_error : exception{
assertion_error(const std::string &what);
virtual unsigned code(void) const;
virtual assertion_error *dynamic_clone(void) const;
virtual void dynamic_throw(void) const;
};
struct UHD_API lookup_error : exception{
lookup_error(const std::string &what);
virtual unsigned code(void) const;
virtual lookup_error *dynamic_clone(void) const;
virtual void dynamic_throw(void) const;
};
struct UHD_API index_error : lookup_error{
index_error(const std::string &what);
virtual unsigned code(void) const;
virtual index_error *dynamic_clone(void) const;
virtual void dynamic_throw(void) const;
};
struct UHD_API key_error : lookup_error{
key_error(const std::string &what);
virtual unsigned code(void) const;
virtual key_error *dynamic_clone(void) const;
virtual void dynamic_throw(void) const;
};
struct UHD_API type_error : exception{
type_error(const std::string &what);
virtual unsigned code(void) const;
virtual type_error *dynamic_clone(void) const;
virtual void dynamic_throw(void) const;
};
struct UHD_API value_error : exception{
value_error(const std::string &what);
virtual unsigned code(void) const;
virtual value_error *dynamic_clone(void) const;
virtual void dynamic_throw(void) const;
};
struct UHD_API runtime_error : exception{
runtime_error(const std::string &what);
virtual unsigned code(void) const;
virtual runtime_error *dynamic_clone(void) const;
virtual void dynamic_throw(void) const;
};
struct UHD_API not_implemented_error : runtime_error{
not_implemented_error(const std::string &what);
virtual unsigned code(void) const;
virtual not_implemented_error *dynamic_clone(void) const;
virtual void dynamic_throw(void) const;
};
struct UHD_API environment_error : exception{
environment_error(const std::string &what);
virtual unsigned code(void) const;
virtual environment_error *dynamic_clone(void) const;
virtual void dynamic_throw(void) const;
};
struct UHD_API io_error : environment_error{
io_error(const std::string &what);
virtual unsigned code(void) const;
virtual io_error *dynamic_clone(void) const;
virtual void dynamic_throw(void) const;
};
struct UHD_API os_error : environment_error{
os_error(const std::string &what);
virtual unsigned code(void) const;
virtual os_error *dynamic_clone(void) const;
virtual void dynamic_throw(void) const;
};
struct UHD_API system_error : exception{
system_error(const std::string &what);
virtual unsigned code(void) const;
virtual system_error *dynamic_clone(void) const;
virtual void dynamic_throw(void) const;
};
/*!
* Create a formated string with throw-site information.
* Fills in the function name, file name, and line number.
* \param what the std::exeption message
* \return the formatted exception message
*/
#define UHD_THROW_SITE_INFO(what) std::string( \
std::string(what) + "\n" + \
" in " + std::string(BOOST_CURRENT_FUNCTION) + "\n" + \
" at " + std::string(__FILE__) + ":" + BOOST_STRINGIZE(__LINE__) + "\n" \
)
/*!
* Throws an invalid code path exception with throw-site information.
* Use this macro in places that code execution is not supposed to go.
*/
#define UHD_THROW_INVALID_CODE_PATH() \
throw uhd::system_error(UHD_THROW_SITE_INFO("invalid code path"))
/*!
* Assert the result of the code evaluation.
* If the code evaluates to false, throw an assertion error.
* \param code the code that resolved to a boolean
*/
#define UHD_ASSERT_THROW(code) if (not (code)) \
throw uhd::assertion_error(UHD_THROW_SITE_INFO(#code)); \
else void(0)
} //namespace uhd
#endif /* INCLUDED_UHD_EXCEPTION_HPP */
|