00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef ERS_INVALID_REFERENCE
00011 #define ERS_INVALID_REFERENCE
00012
00013 #include "ers/Issue.h"
00014
00015 namespace ers {
00016
00026 class InvalidReferenceIssue : public Issue {
00027 protected:
00028 void pointer(const void *p);
00029 InvalidReferenceIssue(const Context &context, severity_t s) ;
00030 public:
00031 static const char* const CLASS_NAME ;
00032 static const char* const REFERENCE_VALUE_KEY ;
00033 static const char* const REFERENCE_TYPE_KEY ;
00034 static const char* const REFERENCE_NAME_KEY ;
00035 static const char* const REFERENCE_C_PTR_TYPE ;
00036 InvalidReferenceIssue() ;
00037 InvalidReferenceIssue(const Context &context, severity_t s, const void* pointer, const std::string &message, responsibility_t r = resp_unknown) ;
00038 virtual const char*get_class_name() const throw() ;
00039 static void check_reference(const Context &context, severity_t s, const void* pointer, const char* ptr_name, responsibility_t r);
00040 } ;
00041
00042 }
00043
00049 #if (!defined(N_ERS_ASSERT))
00050 #if (defined(__GNUC__))
00051 #define ERS_PRE_CHECK_PTR(p) if (! __builtin_constant_p(p)) ers::InvalidReferenceIssue::check_reference(ERS_HERE,ers::error,p,#p,ers::resp_client) ;
00052 #else
00053 #define ERS_PRE_CHECK_PTR(p) ers::InvalidReferenceIssue::check_reference(ERS_HERE,ers::error,p,#p,ers::resp_client)
00054 #endif
00055 #else
00056 #define ERS_PRE_CHECK_PTR(p)
00057 #endif
00058
00064 #if (!defined(N_ERS_ASSERT))
00065 #if (defined(__GNUC__))
00066 #define ERS_CHECK_PTR(p) if (! __builtin_constant_p(p)) ers::InvalidReferenceIssue::check_reference(ERS_HERE,ers::error,p,#p,ers::resp_server)
00067 #else
00068 #define ERS_CHECK_PTR(p) ers::InvalidReferenceIssue::check_reference(ERS_HERE,ers::error,p,#p,ers::resp_server)
00069 #endif
00070 #else
00071 #define ERS_CHECK_PTR(p)
00072 #endif
00073
00074 #endif
00075