/home/bes3soft/bes3soft/Boss/7.0.2/dist/7.0.2/Event/ers/ers-00-00-03/src/InvalidReferenceIssue.cxx

Go to the documentation of this file.
00001 /*
00002  *  InvalidReferenceIssue.cxx
00003  *  ers
00004  *
00005  *  Created by Matthias Wiesmann on 04.01.05.
00006  *  Copyright 2005 CERN. All rights reserved.
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 } // anonymous context
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 } // InvalidReferenceIssue
00036 
00037 
00038 const char* ers::InvalidReferenceIssue::get_class_name() const throw() {
00039     return ers::InvalidReferenceIssue::CLASS_NAME ; 
00040 } // get_class_name
00041 
00042 
00043 void ers::InvalidReferenceIssue::pointer(const void *p) {
00044     char buffer[sizeof(void *)+1] ; // space needed to print a pointer
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 } // pointer
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     } // if
00058 } // check
00059     
00060 
00061 
00062 

Generated on Tue Nov 29 22:58:27 2016 for BOSS_7.0.2 by  doxygen 1.4.7