#ifndef _Exception_ #define _Exception_ /* * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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. * */ #include #include #include #include #include #include "amqp_types.h" namespace qpid { /** * Exception base class for all Qpid exceptions. */ class Exception : public std::exception { protected: std::string whatStr; public: Exception() throw(); Exception(const std::string& str) throw(); Exception(const char* str) throw(); Exception(const std::exception&) throw(); /** Allow any type that has ostream operator<< to act as message */ template Exception(const T& message) : whatStr(boost::lexical_cast(message)) {} virtual ~Exception() throw(); virtual const char* what() const throw(); virtual std::string toString() const throw(); virtual Exception* clone() const throw(); virtual void throwSelf() const; typedef boost::shared_ptr shared_ptr; }; struct ChannelException : public Exception { framing::ReplyCode code; template ChannelException(framing::ReplyCode code_, const T& message) : Exception(message), code(code_) {} void throwSelf() const { throw *this; } }; struct ConnectionException : public Exception { framing::ReplyCode code; template ConnectionException(framing::ReplyCode code_, const T& message) : Exception(message), code(code_) {} void throwSelf() const { throw *this; } }; /** * Exception used to indicate that a thread should shut down. * Does not indicate an error that should be signalled to the user. */ struct ShutdownException : public Exception { ShutdownException(); void throwSelf() const { throw *this; } }; /** Exception to indicate empty queue or other empty state */ struct EmptyException : public Exception { EmptyException(); void throwSelf() const { throw *this; } }; } #endif /*!_Exception_*/