//
// Copyright (C) 2006
// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
-// Stefan Bund <g0dil@berlios.de>
//
-// 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.
+// The contents of this file are subject to the Fraunhofer FOKUS Public License
+// Version 1.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://senf.berlios.de/license.html
//
-// 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.
+// The Fraunhofer FOKUS Public License Version 1.0 is based on,
+// but modifies the Mozilla Public License Version 1.1.
+// See the full license text for the amendments.
//
-// 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.
+// Software distributed under the License is distributed on an "AS IS" basis,
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+// for the specific language governing rights and limitations under the License.
+//
+// The Original Code is Fraunhofer FOKUS code.
+//
+// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V.
+// (registered association), Hansastraße 27 c, 80686 Munich, Germany.
+// All Rights Reserved.
+//
+// Contributor(s):
+// Stefan Bund <g0dil@berlios.de>
/** \file
\brief Exception public header */
#include <boost/preprocessor/cat.hpp>
#include <boost/utility.hpp>
#include <boost/type_traits/is_convertible.hpp>
+#include <senf/config.hh>
//#include "Exception.mpp"
-///////////////////////////////hh.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
/** \defgroup exception Exception classes
This will add the user information to any %senf exception thrown. The Exception is however not a
stream. If you need to do more extensive formating, either use an intermediate string-stream or
- use <a href="http://www.boost.org/libs/format/doc/format.html">Boost.Format</a>:
+ use <a href="http://www.boost.org/doc/libs/release/libs/format/index.html">Boost.Format</a>:
\code
- try {
+ try {
// ...
}
catch (senf::ExceptionMixin & e) {
SENF_WRAP_EXC(std::bad_cast)
SENF_WRAP_EXC(somelib::FooException)
}
- \endcode
+ \endcode
The re-thrown exception can then be caught as <tt>std::bad_cast</tt> or as senf::ExceptionMixin
as needed. It is safe, to wrap an exception twice (the macro will detect this case).
\code
/**< Adds \a text to the description text. */
protected:
- explicit ExceptionMixin(std::string const & description = "");
+ explicit ExceptionMixin(std::string const & description = "");
///< Initialize exception with string
/**< \a description is the initial error description
string. This should probably be a string constant
std::string what_;
private:
-#ifdef SENF_DEBUG
+#ifdef SENF_BACKTRACE
void addBacktrace();
+#endif
+#ifdef SENF_DEBUG
std::string::size_type excLen_;
#endif
};
virtual char const * what() const throw();
///< get exception description and backtrace if available
/**< get description of the exception (message()) and backtrace
- information if SENF is compiled with \c SENF_DEBUG */
+ information if SENF is compiled with \c SENF_DEBUG */
protected:
explicit Exception(std::string const & description = "");
};
-
+
/** \brief Wrapper for standard non-senf exceptions
This class wraps an exception of type \a BaseException and adds functionality from
exception description string. This operator allows to
use Exception instances like streams. The conversion is
performed using <code>boost::lexical_cast</code> and is
- therefor identical to a streaming operation.
+ therefor identical to a streaming operation.
\see \ref exception */
\code
// Standard usage: Take \c errno from environment
- throw senf::SystemException("::open()")
+ throw senf::SystemException("::open()")
<< " while opening configuration file: " << filename;
// You may however explicitly specify the errno value
class SystemException : public Exception
{
public:
- ///////////////////////////////////////////////////////////////////////////
+ //-////////////////////////////////////////////////////////////////////////
///\name Structors and default members
- ///@{
+ //\{
explicit SystemException(std::string const & descr = "" _SENF_EXC_DEBUG_ARGS);
explicit SystemException(int code _SENF_EXC_DEBUG_ARGS);
virtual ~SystemException() throw();
- ///@}
- ///////////////////////////////////////////////////////////////////////////
+ //\}
+ //-////////////////////////////////////////////////////////////////////////
int errorNumber() const; ///< Error code (\c errno number)
char const * errorString() const; ///< Error string (\c strerror() value)
- bool anyOf(int c0, int c1=0, int c2=0, int c3=0, int c4=0, int c5=0,
+ bool anyOf(int c0, int c1=0, int c2=0, int c3=0, int c4=0, int c5=0,
int c6=0, int c7=0, int c8=0, int c9=0) const;
///< \c true, if errorNumber() is one of \a c0 ... \a c9
private:
void init(std::string const & descr, int code _SENF_EXC_DEBUG_ARGS_ND);
-
+
int code_;
};
}
-///////////////////////////////hh.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
#include "Exception.cci"
//#include "Exception.ct"
#include "Exception.cti"
// compile-command: "scons -u test"
// comment-column: 40
// End:
-
+