diff options
Diffstat (limited to 'host/lib/exception.cpp')
| -rw-r--r-- | host/lib/exception.cpp | 45 | 
1 files changed, 45 insertions, 0 deletions
diff --git a/host/lib/exception.cpp b/host/lib/exception.cpp new file mode 100644 index 000000000..ea056bd3b --- /dev/null +++ b/host/lib/exception.cpp @@ -0,0 +1,45 @@ +// +// Copyright 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/>. +// + +#include <uhd/exception.hpp> +#include <boost/functional/hash.hpp> +#include <boost/format.hpp> + +using namespace uhd; + +exception::exception(const std::string &what): +    std::runtime_error(what){/* NOP */} + +#define make_exception_impl(name, class, base) \ +    class::class(const std::string &what): \ +        base(str(boost::format("%s: %s") % name % what)){} \ +    unsigned class::code(void) const{return boost::hash<std::string>()(#class) & 0xfff;} \ +    class *class::dynamic_clone(void) const{return new class(*this);} \ +    void class::dynamic_throw(void) const{throw *this;} + +make_exception_impl("AssertionError",        assertion_error,         exception) +make_exception_impl("LookupError",           lookup_error,            exception) +make_exception_impl("IndexError",            index_error,             lookup_error) +make_exception_impl("KeyError",              key_error,               lookup_error) +make_exception_impl("TypeError",             type_error,              exception) +make_exception_impl("ValueError",            value_error,             exception) +make_exception_impl("RuntimeError",          runtime_error,           exception) +make_exception_impl("NotImplementedError",   not_implemented_error,   runtime_error) +make_exception_impl("EnvironmentError",      environment_error,       exception) +make_exception_impl("IOError",               io_error,                environment_error) +make_exception_impl("OSError",               os_error,                environment_error) +make_exception_impl("SystemError",           system_error,            exception)  | 
