00001
#ifndef ERIS_EXCEPTIONS_H
00002
#define ERIS_EXCEPTIONS_H
00003
00004
#include <Atlas/Objects/Root.h>
00005
00006
#include <sigc++/signal.h>
00007
00008
#include <string>
00009
00010
#include <stdexcept>
00011
00012
namespace Eris
00013 {
00014
00019 class BaseException :
public std::runtime_error
00020 {
00021
public:
00022
BaseException(
const std::string &m) :
00023 std::runtime_error(m), _msg(m) {;}
00024
virtual ~
BaseException()
throw();
00025
const std::string _msg;
00026 };
00027
00028
class InvalidOperation :
public BaseException
00029 {
00030
public:
00031 InvalidOperation(
const std::string &m) :
BaseException(m) {;}
00032
virtual ~InvalidOperation() throw();
00033 };
00034
00036
00037 class
IllegalMessage : public
BaseException
00038 {
00039
public:
00040
IllegalMessage(
const Atlas::Message::Element &m,
const std::string &s) :
00041 BaseException(s), what(m) {;}
00042
virtual ~
IllegalMessage()
throw();
00043
00044 Atlas::Message::Element what;
00045 };
00046
00048 class IllegalObject :
public BaseException
00049 {
00050
public:
00051
IllegalObject(
const Atlas::Objects::Root &o,
const std::string &s) :
00052
BaseException(s), what(o) {;}
00053
virtual ~
IllegalObject()
throw();
00054
00055 Atlas::Objects::Root what;
00056 };
00057
00058
class NetworkFailure :
public BaseException
00059 {
00060
public:
00061 NetworkFailure(
const std::string &s) :
00062
BaseException(s) {;}
00063
virtual ~NetworkFailure() throw();
00064 };
00065
00066 class UnknownEntity : public BaseException
00067 {
00068
public:
00069 UnknownEntity(
const std::string &msg,
const std::string &
id) :
00070 BaseException(msg), _id(id) {;}
00071
virtual ~UnknownEntity() throw();
00072 std::string _id;
00073 };
00074
00075 class UnknownProperty : public InvalidOperation
00076 {
00077
public:
00078 UnknownProperty(
const std::string &p,
const std::string &m) :
00079 InvalidOperation(m), prop(p)
00080 {;}
00081
virtual ~UnknownProperty() throw();
00082
00083 const std::string prop;
00084 };
00085
00087
00089 typedef SigC::Signal0<
void> Signal;
00090
00100 class
OperationBlocked
00101 {
00102
public:
00103 OperationBlocked(Signal &rsig) :
00104 _continue(rsig)
00105 {;}
00106
00107 Signal& _continue;
00108 };
00109
00111
00112 }
00113
00114
#endif