X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FException.cci;fp=senf%2FUtils%2FException.cci;h=6f7e13dc08ebf1c27bc44766b761d05d44393d30;hb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;hp=0000000000000000000000000000000000000000;hpb=164fe477094d42463722584e527a02379ab5d985;p=senf.git diff --git a/senf/Utils/Exception.cci b/senf/Utils/Exception.cci new file mode 100644 index 0000000..6f7e13d --- /dev/null +++ b/senf/Utils/Exception.cci @@ -0,0 +1,136 @@ +// $Id$ +// +// Copyright (C) 2006 Stefan Bund +// +// 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 2 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, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +/** \file + \brief Exception inline non-template implementation */ + +// Custom includes +#include +#include + +#define prefix_ inline +///////////////////////////////cci.p/////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////// +// senf::ExceptionMixin + +prefix_ senf::ExceptionMixin::ExceptionMixin(std::string const & description) + : what_(description) +{ +#ifdef SENF_DEBUG + addBacktrace(); +#endif +} + +prefix_ std::string senf::ExceptionMixin::message() + const +{ +#ifdef SENF_DEBUG + return what_.substr(excLen_); +#else + return what_; +#endif +} + +prefix_ std::string senf::ExceptionMixin::backtrace() + const +{ +#ifdef SENF_DEBUG + return what_.substr(0,excLen_-4); +#else + return ""; +#endif +} + +prefix_ void senf::ExceptionMixin::append(std::string text) +{ + what_ += text; +} + +/////////////////////////////////////////////////////////////////////////// +// senf::Exception + +prefix_ senf::Exception::Exception(std::string const & description) + : ExceptionMixin(description) +{} + +/////////////////////////////////////////////////////////////////////////// +// senf::SystemException + +prefix_ senf::SystemException::SystemException(std::string const & descr _SENF_EXC_DEBUG_ARGS_ND) +{ + init(descr, errno _SENF_EXC_DEBUG_ARGS_P); +} + +prefix_ senf::SystemException::SystemException(int code _SENF_EXC_DEBUG_ARGS_ND) +{ + init("", code _SENF_EXC_DEBUG_ARGS_P); +} + +prefix_ senf::SystemException::SystemException(std::string const & descr, int code + _SENF_EXC_DEBUG_ARGS_ND) +{ + init(descr, code _SENF_EXC_DEBUG_ARGS_P); +} + +prefix_ int senf::SystemException::errorNumber() + const +{ + return code_; +} + +prefix_ char const * senf::SystemException::errorString() + const +{ + return std::strerror(code_); +} + +prefix_ bool senf::SystemException::anyOf(int c0, int c1, int c2, int c3, int c4, int c5, + int c6, int c7, int c8, int c9) +{ + return + (c0 && code_ == c0) || + (c1 && code_ == c1) || + (c2 && code_ == c2) || + (c3 && code_ == c3) || + (c4 && code_ == c4) || + (c5 && code_ == c5) || + (c6 && code_ == c6) || + (c7 && code_ == c7) || + (c8 && code_ == c8) || + (c9 && code_ == c9); +} + +prefix_ senf::SystemException::~SystemException() + throw() +{} + +///////////////////////////////cci.e/////////////////////////////////////// +#undef prefix_ + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 +// End: