00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #include "ers/InvalidReferenceIssue.h"
00011 #include <sstream>
00012 #include <cstdio>
00013
00014 const char * const ers::InvalidReferenceIssue::CLASS_NAME = "ers::InvalidReferenceIssue" ;
00015
00016 const char * const ers::InvalidReferenceIssue::REFERENCE_VALUE_KEY = "REFERENCE_VALUE" ;
00017 const char * const ers::InvalidReferenceIssue::REFERENCE_TYPE_KEY = "REFERENCE_TYPE" ;
00018 const char * const ers::InvalidReferenceIssue::REFERENCE_NAME_KEY = "REFERENCE_NAME" ;
00019 const char * const ers::InvalidReferenceIssue::REFERENCE_C_PTR_TYPE = "C Pointer" ;
00020
00021 namespace {
00022 ers::Issue *create_issue() { return new ers::InvalidReferenceIssue(); }
00023 bool registered = ers::IssueFactory::instance()->register_issue(ers::InvalidReferenceIssue::CLASS_NAME,create_issue) ;
00024 }
00025
00026 ers::InvalidReferenceIssue::InvalidReferenceIssue() : Issue() {}
00027
00028 ers::InvalidReferenceIssue::InvalidReferenceIssue(const Context &context, severity_t s) : Issue(context,s) {}
00029
00030 ers::InvalidReferenceIssue::InvalidReferenceIssue(const Context &context, severity_t s, const void* p, const std::string &msg, responsibility_t r) : Issue(context,s) {
00031 severity(s);
00032 pointer(p);
00033 responsibility(r) ;
00034 finish_setup(msg);
00035 }
00036
00037
00038 const char* ers::InvalidReferenceIssue::get_class_name() const throw() {
00039 return ers::InvalidReferenceIssue::CLASS_NAME ;
00040 }
00041
00042
00043 void ers::InvalidReferenceIssue::pointer(const void *p) {
00044 char buffer[sizeof(void *)+1] ;
00045 snprintf(buffer,sizeof(buffer),"%p",p);
00046 set_value(REFERENCE_VALUE_KEY,buffer) ;
00047 set_value(REFERENCE_TYPE_KEY,REFERENCE_C_PTR_TYPE) ;
00048 }
00049
00050 void ers::InvalidReferenceIssue::check_reference(const Context &context, severity_t s, const void* p, const char* ptr_name, responsibility_t r) {
00051 if (p==0) {
00052 std::ostringstream message ;
00053 message << "pointer '" << ptr_name << "' is null" ;
00054 ers::InvalidReferenceIssue issue(context,s,p,message.str(),r) ;
00055 issue.m_value_table[REFERENCE_NAME_KEY] = ptr_name ;
00056 throw issue ;
00057 }
00058 }
00059
00060
00061
00062