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

Go to the documentation of this file.
00001 /*
00002  *  RangeIssue.cxx
00003  *  ers
00004  *
00005  *  Created by Matthias Wiesmann on 15.02.05.
00006  *  Copyright 2005 CERN. All rights reserved.
00007  *
00008  */
00009 
00010 #include "ers/RangeIssue.h"
00011 #include <sstream>
00012 
00013 
00014 const char * const ers::RangeIssue::CLASS_NAME = "ers::RangeIssue" ; 
00015 const char * const ers::RangeIssue::INDEX_REFERENCE_TYPE = "scalar" ; 
00016 const char * const ers::RangeIssue::RANGE_MIN_KEY = "REFERENCE_RANGE_MIN" ; 
00017 const char * const ers::RangeIssue::RANGE_MAX_KEY = "REFERENCE_RANGE_MAX" ;
00018 
00019 
00020 namespace {
00021     ers::Issue *create_issue() { return new ers::RangeIssue(); } 
00022     bool registered = ers::IssueFactory::instance()->register_issue(ers::RangeIssue::CLASS_NAME,create_issue) ;
00023 } // anonymous context
00024 
00025 void ers::RangeIssue::check_range(const ers::Context &c, int64_t min, int64_t value, int64_t max, const char* entity_name) {
00026     if ((value>max) || (value<min)) throw RangeIssue(c,ers::error,min,value,max,entity_name); 
00027 } // check_range
00028 
00029 
00030 void ers::RangeIssue::set_range(ers::Issue &issue, int64_t index, int64_t min_index, int64_t max_index, const char* entity_name) {
00031     issue.set_value(REFERENCE_VALUE_KEY,index) ; 
00032     issue.set_value(RANGE_MIN_KEY,min_index);
00033     issue.set_value(RANGE_MAX_KEY,max_index);
00034     std::ostringstream reference_stream ;
00035     reference_stream << INDEX_REFERENCE_TYPE ; 
00036     if (entity_name) {
00037         reference_stream << "(name=" << entity_name << ')' ; 
00038     } 
00039     issue.set_value(REFERENCE_TYPE_KEY,reference_stream.str()) ; 
00040 } // set_range
00041 
00042 ers::RangeIssue::RangeIssue() : ers::InvalidReferenceIssue() {} 
00043 
00044 ers::RangeIssue::RangeIssue(const ers::Context &c, ers::severity_t s) : ers::InvalidReferenceIssue(c,s) {
00045     set_value(REFERENCE_TYPE_KEY,INDEX_REFERENCE_TYPE) ;
00046 } // RangeIssue
00047 
00048 ers::RangeIssue::RangeIssue(const ers::Context &c, ers::severity_t s, int64_t min_index, int64_t index, int64_t max_index, const char* entity_name) : ers::InvalidReferenceIssue(c,s) {
00049     set_range(*this,index,min_index,max_index,entity_name) ; 
00050     std::ostringstream message_stream ;
00051     message_stream << "invalid index: " ; 
00052     if (entity_name) {
00053         message_stream << entity_name << '='; 
00054     } // entity
00055     message_stream  << index << " is not in range " << min_index << '-' << max_index ;  
00056     finish_setup(message_stream.str()); 
00057 } // RangeIssue
00058 
00059 const char*ers::RangeIssue::get_class_name() const throw() { return CLASS_NAME ; } 
00060 

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