The Gaudi Framework  v29r0 (ff2e7097)
StatusCode Class Referencefinal

This class is used for returning status codes from appropriate routines. More...

#include <GaudiKernel/StatusCode.h>

Collaboration diagram for StatusCode:

Classes

class  ScopedDisableChecking
 Simple RAII class to ignore unchecked StatusCode instances in a scope. More...
 

Public Types

enum  { FAILURE = 0, SUCCESS = 1, RECOVERABLE = 2 }
 

Public Member Functions

 StatusCode ()=default
 Constructor. More...
 
 StatusCode (unsigned long code, IssueSeverity &&sev)
 
 StatusCode (IssueSeverity &&is)
 
 StatusCode (unsigned long code, bool checked=false)
 
 StatusCode (const StatusCode &rhs)
 
 StatusCode (StatusCode &&rhs) noexcept
 Move constructor. More...
 
 ~StatusCode ()
 Destructor. More...
 
bool isSuccess () const
 Test for a status code of SUCCESS. More...
 
bool isFailure () const
 Test for a status code of FAILURE. More...
 
bool isRecoverable () const
 
unsigned long getCode () const
 Get the status code by value. More...
 
void setCode (unsigned long value)
 Set the status code by value. More...
 
void setChecked () const
 Ignore the checking code;. More...
 
void ignore () const
 
 operator unsigned long () const
 Cast operator. More...
 
GAUDI_API const IssueSeverityseverity () const
 Severity. More...
 
StatusCodeoperator= (unsigned long value)
 Assignment operator. More...
 
StatusCodeoperator= (const StatusCode &rhs)
 
 operator IgnoreError () const
 

Static Public Member Functions

static GAUDI_API void enableChecking ()
 
static GAUDI_API void disableChecking ()
 
static GAUDI_API bool checkingEnabled ()
 

Protected Attributes

unsigned long d_code = SUCCESS
 The status code. More...
 
bool m_checked = false
 If the Status code has been checked. More...
 
std::shared_ptr< const IssueSeveritym_severity
 Pointer to a IssueSeverity. More...
 

Static Protected Attributes

static bool s_checking
 Global flag to control if StatusCode need to be checked. More...
 

Private Member Functions

void check ()
 

Friends

bool operator< (const StatusCode &a, const StatusCode &b)
 Comparison operator. More...
 
bool operator> (const StatusCode &a, const StatusCode &b)
 Comparison operator. More...
 

Detailed Description

This class is used for returning status codes from appropriate routines.

Author
Iain Last
Pere Mato
Sebastien Ponce

Definition at line 28 of file StatusCode.h.

Member Enumeration Documentation

anonymous enum
Enumerator
FAILURE 
SUCCESS 
RECOVERABLE 

Definition at line 31 of file StatusCode.h.

Constructor & Destructor Documentation

StatusCode::StatusCode ( )
default

Constructor.

StatusCode::StatusCode ( unsigned long  code,
IssueSeverity &&  sev 
)
inline

Definition at line 36 of file StatusCode.h.

36  : d_code( code )
37  {
38  try { // ensure that we do not throw even if we cannot move the severity
39  m_severity = std::make_shared<const IssueSeverity>( std::move( sev ) );
40  } catch ( ... ) {
41  }
42  }
unsigned long d_code
The status code.
Definition: StatusCode.h:182
T move(T...args)
std::shared_ptr< const IssueSeverity > m_severity
Pointer to a IssueSeverity.
Definition: StatusCode.h:184
StatusCode::StatusCode ( IssueSeverity &&  is)
inline

Definition at line 44 of file StatusCode.h.

StatusCode::StatusCode ( unsigned long  code,
bool  checked = false 
)
inline

Definition at line 52 of file StatusCode.h.

52 : d_code( code ), m_checked( checked ) {}
bool m_checked
If the Status code has been checked.
Definition: StatusCode.h:183
unsigned long d_code
The status code.
Definition: StatusCode.h:182
StatusCode::StatusCode ( const StatusCode rhs)
inline

Definition at line 54 of file StatusCode.h.

54  : d_code( rhs.d_code ), m_checked( rhs.m_checked ), m_severity( rhs.m_severity )
55  {
56  rhs.m_checked = true;
57  }
bool m_checked
If the Status code has been checked.
Definition: StatusCode.h:183
unsigned long d_code
The status code.
Definition: StatusCode.h:182
std::shared_ptr< const IssueSeverity > m_severity
Pointer to a IssueSeverity.
Definition: StatusCode.h:184
StatusCode::StatusCode ( StatusCode &&  rhs)
inlinenoexcept

Move constructor.

Definition at line 60 of file StatusCode.h.

61  : d_code( rhs.d_code ), m_checked( rhs.m_checked ), m_severity( std::move( rhs.m_severity ) )
62  {
63  rhs.m_checked = true;
64  }
bool m_checked
If the Status code has been checked.
Definition: StatusCode.h:183
unsigned long d_code
The status code.
Definition: StatusCode.h:182
T move(T...args)
std::shared_ptr< const IssueSeverity > m_severity
Pointer to a IssueSeverity.
Definition: StatusCode.h:184
StatusCode::~StatusCode ( )
inline

Destructor.

Definition at line 67 of file StatusCode.h.

68  {
69  if ( UNLIKELY( s_checking ) ) check();
70  }
#define UNLIKELY(x)
Definition: Kernel.h:128
void check()
Definition: StatusCode.cpp:31
static bool s_checking
Global flag to control if StatusCode need to be checked.
Definition: StatusCode.h:186

Member Function Documentation

void StatusCode::check ( )
private
Fix-Me:
: (MCl) use backTrace(std::string&, const int, const int) instead

Definition at line 31 of file StatusCode.cpp.

32 {
33 
35 
36  auto msg = Gaudi::svcLocator()->as<IMessageSvc>();
37  auto scs = Gaudi::svcLocator()->service<IStatusCodeSvc>( "StatusCodeSvc" );
38 
39  const size_t depth = 21;
40  void* addresses[depth];
41 
42  std::string lib, fnc;
43  void* addr = nullptr;
45  if ( System::backTrace( addresses, depth ) ) {
46 
47  for ( size_t idx : {2, 3} ) {
48  if ( System::getStackLevel( addresses[idx], addr, fnc, lib ) && fnc != "StatusCode::~StatusCode()" ) {
49 
50  if ( scs ) {
51  scs->regFnc( fnc, lib );
52  } else {
53  MsgStream log( msg, "StatusCode" );
54  log << MSG::WARNING << "Unchecked in " << fnc << " (" << lib << ")" << endmsg;
55  }
56  break;
57  }
58  }
59  }
60  }
61 }
Definition of the MsgStream class used to transmit messages.
Definition: MsgStream.h:24
GAUDI_API bool getStackLevel(void *addresses, void *&addr, std::string &fnc, std::string &lib)
bool m_checked
If the Status code has been checked.
Definition: StatusCode.h:183
static bool s_proc
"previous" element in the linked list
SmartIF< IFace > as()
Definition: ISvcLocator.h:109
GAUDI_API int backTrace(void **addresses, const int depth)
STL class.
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:79
GAUDI_API ISvcLocator * svcLocator()
The IMessage is the interface implemented by the message service.
Definition: IMessageSvc.h:38
T uncaught_exception(T...args)
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:209
bool StatusCode::checkingEnabled ( )
static

Definition at line 23 of file StatusCode.cpp.

23 { return s_checking; }
static bool s_checking
Global flag to control if StatusCode need to be checked.
Definition: StatusCode.h:186
void StatusCode::disableChecking ( )
static

Definition at line 21 of file StatusCode.cpp.

21 { s_checking = false; }
static bool s_checking
Global flag to control if StatusCode need to be checked.
Definition: StatusCode.h:186
void StatusCode::enableChecking ( )
static

Definition at line 19 of file StatusCode.cpp.

19 { s_checking = true; }
static bool s_checking
Global flag to control if StatusCode need to be checked.
Definition: StatusCode.h:186
unsigned long StatusCode::getCode ( ) const
inline

Get the status code by value.

Definition at line 94 of file StatusCode.h.

95  {
96  m_checked = true;
97  return d_code;
98  }
bool m_checked
If the Status code has been checked.
Definition: StatusCode.h:183
unsigned long d_code
The status code.
Definition: StatusCode.h:182
void StatusCode::ignore ( ) const
inline

Definition at line 109 of file StatusCode.h.

109 { setChecked(); }
void setChecked() const
Ignore the checking code;.
Definition: StatusCode.h:108
bool StatusCode::isFailure ( ) const
inline

Test for a status code of FAILURE.

N.B. This is a specific type of failure where there aren't any more appropriate status codes. To test for any failure use : if ( !StatusCode.isSuccess() ) ...

Definition at line 86 of file StatusCode.h.

86 { return !isSuccess(); }
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:75
bool StatusCode::isRecoverable ( ) const
inline

Definition at line 87 of file StatusCode.h.

88  {
89  m_checked = true;
90  return ( d_code == RECOVERABLE );
91  }
bool m_checked
If the Status code has been checked.
Definition: StatusCode.h:183
unsigned long d_code
The status code.
Definition: StatusCode.h:182
bool StatusCode::isSuccess ( ) const
inline

Test for a status code of SUCCESS.

N.B. This is the only case where a function has succeeded.

Definition at line 75 of file StatusCode.h.

76  {
77  m_checked = true;
78  return ( d_code == SUCCESS );
79  }
bool m_checked
If the Status code has been checked.
Definition: StatusCode.h:183
unsigned long d_code
The status code.
Definition: StatusCode.h:182
StatusCode::operator IgnoreError ( ) const
inline

Definition at line 140 of file StatusCode.h.

141  {
142  m_checked = true;
143  return IgnoreError();
144  }
bool m_checked
If the Status code has been checked.
Definition: StatusCode.h:183
StatusCode::operator unsigned long ( ) const
inline

Cast operator.

Definition at line 112 of file StatusCode.h.

112 { return getCode(); }
unsigned long getCode() const
Get the status code by value.
Definition: StatusCode.h:94
StatusCode& StatusCode::operator= ( unsigned long  value)
inline

Assignment operator.

Definition at line 118 of file StatusCode.h.

119  {
120  setCode( value );
121  return *this;
122  }
void setCode(unsigned long value)
Set the status code by value.
Definition: StatusCode.h:101
StatusCode& StatusCode::operator= ( const StatusCode rhs)
inline

Definition at line 123 of file StatusCode.h.

124  {
125  if ( this == &rhs ) return *this; // Protection against self-assignment
126  d_code = rhs.d_code;
127  m_checked = rhs.m_checked;
128  rhs.m_checked = true;
129  m_severity = rhs.m_severity;
130  return *this;
131  }
bool m_checked
If the Status code has been checked.
Definition: StatusCode.h:183
unsigned long d_code
The status code.
Definition: StatusCode.h:182
std::shared_ptr< const IssueSeverity > m_severity
Pointer to a IssueSeverity.
Definition: StatusCode.h:184
void StatusCode::setChecked ( ) const
inline

Ignore the checking code;.

Definition at line 108 of file StatusCode.h.

108 { m_checked = true; }
bool m_checked
If the Status code has been checked.
Definition: StatusCode.h:183
void StatusCode::setCode ( unsigned long  value)
inline

Set the status code by value.

Definition at line 101 of file StatusCode.h.

102  {
103  m_checked = false;
104  d_code = value;
105  }
bool m_checked
If the Status code has been checked.
Definition: StatusCode.h:183
unsigned long d_code
The status code.
Definition: StatusCode.h:182
const IssueSeverity & StatusCode::severity ( ) const

Severity.

Definition at line 25 of file StatusCode.cpp.

26 {
27  static const IssueSeverity dummy;
28  return m_severity ? *m_severity : dummy;
29 }
std::shared_ptr< const IssueSeverity > m_severity
Pointer to a IssueSeverity.
Definition: StatusCode.h:184

Friends And Related Function Documentation

bool operator< ( const StatusCode a,
const StatusCode b 
)
friend

Comparison operator.

Definition at line 134 of file StatusCode.h.

134 { return a.d_code < b.d_code; }
unsigned long d_code
The status code.
Definition: StatusCode.h:182
bool operator> ( const StatusCode a,
const StatusCode b 
)
friend

Comparison operator.

Definition at line 137 of file StatusCode.h.

137 { return a.d_code > b.d_code; }
unsigned long d_code
The status code.
Definition: StatusCode.h:182

Member Data Documentation

unsigned long StatusCode::d_code = SUCCESS
protected

The status code.

The status code

Definition at line 182 of file StatusCode.h.

bool StatusCode::m_checked = false
mutableprotected

If the Status code has been checked.

Definition at line 183 of file StatusCode.h.

std::shared_ptr<const IssueSeverity> StatusCode::m_severity
protected

Pointer to a IssueSeverity.

Definition at line 184 of file StatusCode.h.

bool StatusCode::s_checking
staticprotected

Global flag to control if StatusCode need to be checked.

Definition at line 186 of file StatusCode.h.


The documentation for this class was generated from the following files: