ARGoS 3
A parallel, multi-engine simulator for swarm robotics
argos_exception.h
Go to the documentation of this file.
1
43#ifndef ARGOS_EXCEPTION_H
44#define ARGOS_EXCEPTION_H
45
46namespace argos {
47 class CARGoSException;
48}
49
50#include <stdexcept>
51#include <sstream>
52
53namespace argos {
54
61 class CARGoSException : public std::exception {
62
63 public:
64
70 CARGoSException(const std::string& str_what, std::exception* pc_nested = NULL) throw() :
71 m_strWhat("[FATAL] " + str_what), m_pcNested(pc_nested) {
72 if (m_pcNested != NULL) {
73 std::ostringstream w;
74 w << m_strWhat
75 << std::endl
76 << m_pcNested->what();
77 m_strWhat = w.str();
78 }
79 }
83 virtual ~CARGoSException() throw() {
84 }
85
90 virtual const char* what() const throw() {
91 return m_strWhat.c_str();
92 }
93
94 private:
95
100 std::string m_strWhat;
102 std::exception* m_pcNested;
103
104 };
105
106}
107
111#define THROW_ARGOSEXCEPTION(message) { std::ostringstream what; what << message; throw CARGoSException(what.str()); }
115#define THROW_ARGOSEXCEPTION_NESTED(message, nested) { std::ostringstream what; what << message; throw CARGoSException(what.str(), &nested); }
116
117#ifndef NDEBUG
122#define ARGOS_ASSERT(condition, message) { if ( !(condition) ) THROW_ARGOSEXCEPTION(message); }
123#else
124#define ARGOS_ASSERT(condition, message)
125#endif
126
127#endif
The namespace containing all the ARGoS related code.
Definition ci_actuator.h:12
The exception that wraps all errors in ARGoS.
virtual const char * what() const
Returns the error message that explains what happened and why the exception was thrown The returned m...
CARGoSException(const std::string &str_what, std::exception *pc_nested=NULL)
Class constructor.
virtual ~CARGoSException()
Class destructor.