| The Gaudi Framework v27r1

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- Class List
- Class Index
- Class Hierarchy
- Class Members

Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
GslSvc Class Reference

The implementation of IGslSvc interface. More...

`#include <src/Components/GslSvc.h>`

Inheritance diagram for GslSvc:
[legend]
Collaboration diagram for GslSvc:
[legend]

## Public Member Functions
StatusCode | handle (const GslError &error) const override
| handle the GSL error More...
GslErrorHandler | handler () const override
| retrieve the current GSL error handler More...
GslErrorHandler | setHandler (GslErrorHandler handler) const override
| set new GSL error handler More...
StatusCode | status (const int error) const override
| transform GSL error code to Gaudi status code More...
StatusCode | initialize () override
| standard service initialization More...
StatusCode | finalize () override
| standard service finalization More...
| GslSvc (const std::string &name, ISvcLocator *svc)
| Standard constructor. More...
| ~GslSvc () override=default
| destructor, virtual and protected More...
Public Member Functions inherited from extends< Service, IGslSvc >
void * | i_cast (const InterfaceID &tid) const override
| Implementation of IInterface::i_cast. More...
StatusCode | queryInterface (const InterfaceID &ti, void **pp) override
| Implementation of IInterface::queryInterface. More...
std::vector< std::string > | getInterfaceNames () const override
| Implementation of IInterface::getInterfaceNames. More...
| ~extends () override=default
| Virtual destructor. More...
Public Member Functions inherited from Service
const std::string & | name () const override
| Retrieve name of the service. More...
StatusCode | configure () override
StatusCode | initialize () override
StatusCode | start () override
StatusCode | stop () override
StatusCode | finalize () override
StatusCode | terminate () override
Gaudi::StateMachine::State | FSMState () const override
Gaudi::StateMachine::State | targetFSMState () const override
StatusCode | reinitialize () override
StatusCode | restart () override
StatusCode | sysInitialize () override
| Initialize Service. More...
StatusCode | sysStart () override
| Initialize Service. More...
StatusCode | sysStop () override
| Initialize Service. More...
StatusCode | sysFinalize () override
| Finalize Service. More...
StatusCode | sysReinitialize () override
| Re-initialize the Service. More...
StatusCode | sysRestart () override
| Re-initialize the Service. More...
StatusCode | setProperty (const Property &p) override
StatusCode | setProperty (const std::string &s) override
StatusCode | setProperty (const std::string &n, const std::string &v) override
StatusCode | getProperty (Property *p) const override
const Property & | getProperty (const std::string &name) const override
StatusCode | getProperty (const std::string &n, std::string &v) const override
const std::vector< Property * > & | getProperties () const override
bool | hasProperty (const std::string &name) const override
template<class TYPE >
StatusCode | setProperty (const std::string &name, const TYPE &value)
| set the property form the value More...
| Service (std::string name, ISvcLocator *svcloc)
| Standard Constructor. More...
SmartIF< ISvcLocator > & | serviceLocator () const override
| Retrieve pointer to service locator. More...
StatusCode | setProperties ()
| Method for setting declared properties to the values specified for the job. More...
template<class T >
StatusCode | service (const std::string &name, const T *&psvc, bool createIf=true) const
| Access a service by name, creating it if it doesn't already exist. More...
template<class T >
StatusCode | service (const std::string &name, T *&psvc, bool createIf=true) const
template<typename IFace = IService>
SmartIF< IFace > | service (const std::string &name, bool createIf=true) const
template<class T >
StatusCode | service (const std::string &svcType, const std::string &svcName, T *&psvc) const
| Access a service by name and type, creating it if it doesn't already exist. More...
template<class T >
Property * | declareProperty (const std::string &name, T &property, const std::string &doc="none") const
| Declare the named property. More...
Property * | declareRemoteProperty (const std::string &name, IProperty *rsvc, const std::string &rname="") const
| Declare remote named properties. More...
template<class T >
StatusCode | declarePrivateTool (ToolHandle< T > &handle, std::string toolTypeAndName="", bool createIf=true)
| Declare used Private tool. More...
template<class T >
StatusCode | declarePublicTool (ToolHandle< T > &handle, std::string toolTypeAndName="", bool createIf=true)
| Declare used Public tool. More...
SmartIF< IAuditorSvc > & | auditorSvc () const
| The standard auditor service.May not be invoked before sysInitialize() has been invoked. More...
Public Member Functions inherited from CommonMessagingBase
virtual | ~CommonMessagingBase ()=default
| Virtual destructor. More...
SmartIF< IMessageSvc > & | msgSvc () const
| The standard message service. More...
MsgStream & | msgStream () const
| Return an uninitialized MsgStream. More...
MsgStream & | msgStream (const MSG::Level level) const
| Predefined configurable message stream for the efficient printouts. More...
MsgStream & | always () const
| shortcut for the method msgStream(MSG::ALWAYS) More...
MsgStream & | fatal () const
| shortcut for the method msgStream(MSG::FATAL) More...
MsgStream & | err () const
| shortcut for the method msgStream(MSG::ERROR) More...
MsgStream & | error () const
| shortcut for the method msgStream(MSG::ERROR) More...
MsgStream & | warning () const
| shortcut for the method msgStream(MSG::WARNING) More...
MsgStream & | info () const
| shortcut for the method msgStream(MSG::INFO) More...
MsgStream & | debug () const
| shortcut for the method msgStream(MSG::DEBUG) More...
MsgStream & | verbose () const
| shortcut for the method msgStream(MSG::VERBOSE) More...
MsgStream & | msg () const
| shortcut for the method msgStream(MSG::INFO) More...
MSG::Level | msgLevel () const
| get the output level from the embedded MsgStream More...
MSG::Level | outputLevel () const __attribute__((deprecated))
| Backward compatibility function for getting the output level. More...
bool | msgLevel (MSG::Level lvl) const
| get the output level from the embedded MsgStream More...
Public Member Functions inherited from extend_interfaces< Interfaces...>
| ~extend_interfaces () override=default
| Virtual destructor. More...

## Private Types
typedef std::vector< std::string > | Names
| external handlers More...
typedef std::vector< IGslErrorHandler * > | Handlers

## Private Member Functions
| GslSvc ()
| default constructor is private More...
| GslSvc (const GslSvc &)
| copy constructor is private More...
GslSvc & | operator= (const GslSvc &)
| assignment operator is private More...

## Private Attributes
std::string | m_errorPolicy = "GSL"
| error policy More...
Names | m_handlersTypeNames
Handlers | m_handlers
std::vector< int > | m_ignore
| codes to be ignored More...

## Additional Inherited Members
Public Types inherited from extends< Service, IGslSvc >
using | base_class = extends
| Typedef to this class. More...
using | extend_interfaces_base = extend_interfaces< Interfaces...>
| Typedef to the base of this class. More...
Public Types inherited from Service
typedef Gaudi::PluginService::Factory< IService *, const std::string &, ISvcLocator * > | Factory
Public Types inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
using | base_class = CommonMessaging
Public Types inherited from extend_interfaces< Interfaces...>
using | ext_iids = typename Gaudi::interface_list_cat< typename Interfaces::ext_iids...>::type
| take union of the ext_iids of all Interfaces... More...
Protected Member Functions inherited from Service
| ~Service () override
| Standard Destructor. More...
int | outputLevel () const
| get the `Service's` output level More...
Protected Member Functions inherited from CommonMessaging< implements< IService, IProperty, IStateful > >
void | updateMsgStreamOutputLevel (int level)
| Update the output level of the cached MsgStream. More...
Protected Attributes inherited from Service
IntegerProperty | m_outputLevel = MSG::NIL
| Service output level. More...
Gaudi::StateMachine::State | m_state = Gaudi::StateMachine::OFFLINE
| Service state. More...
Gaudi::StateMachine::State | m_targetState = Gaudi::StateMachine::OFFLINE
| Service state. More...

## Detailed Description

The implementation of IGslSvc interface.

The Gsl Service is teh service which perform intelligent error handling for GSL (GNU Scientific Library)

It provides a choice between different "Error Handling Policies"

Current implementation supports the several "error handling policies", which are driven by "ErrorPolicy" property of class GslSvc:

- "GSL": The simplest error policy, no action, the error hadling defined in GSL does not redefined
- "Off": The GSL empty error handling is used, what means the ignorance of all GSL errors. Program continues after any error, so the return values from any library routines must be checked. This policy is recommended by GSL team for production programs
- "Abort" The default GSL error policy, causes abort on error.
- "Ignore" The policy which is essentially the same as "Off", but performed with local error handler GslErrorHandlers::ignoreTheError
- "Exception" This policy throws the GaudiException with tag *GSL Error" to be thrown at the error. The policy implemented by local error handler GslErrorHandlers::throwException
- "Handle" The policy which uses the call back from local error handler GslErrorHandlers::handleTheError to IGslSvc::handle method. Current implementation of this method is sequential execution of declared handlers, defined through the property "Handlers" of class GslSvc in a format: GslSvc.Handlers = { "H1Type/H1Name" , "H2Type/H2Name" , "H3ype/3Name" }; The "handlers" must implement IGslErrorHandler interface The concrete handlers are provided in GaudiGSL package: class GslErorCount, GslErrorPrint and GslErrorException.

Attention
  The error handling could be "turned off" for selected error codes (e.g. GSL_SUCCESS or GSL_CONTINUE ) using "IgnoreCodes" property. This feature is active only for "Handle" error policy.

See also
  GslErrorHandlers
  GslErrorHandlers::ingnoreTheError
  GslErrorHandlers::throwException
  GslErrorHandlers::handleTheError
  IGslSvc
  IGslErrorHandler
  GslErrorCount
  GslErrorPrint
  GslErrorException

Author
  Vanya Belyaev Ivan..nosp@m.Bely.nosp@m.aev@i.nosp@m.tep..nosp@m.ru

Date
  29/04/2002

Definition at line 83 of file GslSvc.h.

## Member Typedef Documentation

typedef std::vector<IGslErrorHandler*> GslSvc::Handlers
| private

Definition at line 158 of file GslSvc.h.

typedef std::vector<std::string> GslSvc::Names
| private

external handlers

Definition at line 156 of file GslSvc.h.

## Constructor & Destructor Documentation

GslSvc::GslSvc | ( | const std::string & | name,
|  | ISvcLocator * | svc
| ) |  |

Standard constructor.

See also
  Service

Parameters

  name | service name
  scv | pointer to service locator
  name | service name
  scv | pointer to service locator

Definition at line 38 of file GslSvc.cpp.

40 : base_class ( name , svc )
41 {
42 declareProperty( "ErrorPolicy" , m_errorPolicy ) ;
43 declareProperty( "Handlers" , m_handlersTypeNames ) ;
44 declareProperty( "IgnoreCodes" , m_ignore ) ;
45 }
GslSvc::m_ignore
std::vector< int > m_ignore
codes to be ignored
Definition: GslSvc.h:162
extends< Service, IGslSvc >::base_class
extends base_class
Typedef to this class.
Definition: extends.h:14
GslSvc::m_handlersTypeNames
Names m_handlersTypeNames
Definition: GslSvc.h:157
GslSvc::m_errorPolicy
std::string m_errorPolicy
error policy
Definition: GslSvc.h:153
Service::declareProperty
Property * declareProperty(const std::string &name, T &property, const std::string &doc="none") const
Declare the named property.
Definition: Service.h:215

GslSvc::~GslSvc | ( |  | ) |
| override default

destructor, virtual and protected

GslSvc::GslSvc | ( |  | ) |
| private

default constructor is private

GslSvc::GslSvc | ( | const GslSvc & |  | ) |
| private

copy constructor is private

## Member Function Documentation

StatusCode GslSvc::finalize | ( |  | ) |
| override

standard service finalization

See also
  Service
  IGslSvc
  IService

Returns
  status code

See also
  Service
  IService

Returns
  status code

Definition at line 139 of file GslSvc.cpp.

140 {
141 debug() << "==> Finalize" << endmsg;
142
143 // deactivate the static accessor to the service
144 GaudiGSL::setGslSvc( nullptr );
145
146 // finalize the base class
147 return Service::finalize() ;
148 }
Service::finalize
StatusCode finalize() override
Definition: Service.cpp:193
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:127
GaudiGSL::setGslSvc
static const IGslSvc * setGslSvc(const IGslSvc *value)
set new value for static Gaudi GSL Service
Definition: GaudiGSL.cpp:35
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244

StatusCode GslSvc::handle | ( | const GslError & | error | ) | const
| override

handle the GSL error

See also
  IGslSvc

Parameters

  err | error

Returns
  status code

Parameters

  error | error

Returns
  status code

Definition at line 205 of file GslSvc.cpp.

206 {
207 StatusCode sc = StatusCode::SUCCESS ;
208 // code to be ignored?
209 if( m_ignore.end() != std::find( m_ignore.begin () ,
210 m_ignore.end () ,
211 error.code ) ) { return sc ; }
212 // invoke all handlers
213 for( auto handler = m_handlers.begin() ;
214 sc.isSuccess() && m_handlers.end() != handler ; ++handler )
215 { sc = (*handler)->handle( error ); }
216 //
217 return sc ;
218 }
GslSvc::m_ignore
std::vector< int > m_ignore
codes to be ignored
Definition: GslSvc.h:162
GslError::code
int code
error code (GSL)
Definition: GslError.h:25
StatusCode::isSuccess
bool isSuccess() const
Test for a status code of SUCCESS.
Definition: StatusCode.h:76
std::vector::end
T end(T...args)
merge_files.sc
int sc
Definition: merge_files.py:167
StatusCode::SUCCESS
Definition: StatusCode.h:30
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
GslSvc::m_handlers
Handlers m_handlers
Definition: GslSvc.h:159
std::find
T find(T...args)
GslSvc::handler
GslErrorHandler handler() const override
retrieve the current GSL error handler
Definition: GslSvc.cpp:156
std::vector::begin
T begin(T...args)

IGslSvc::GslErrorHandler GslSvc::handler | ( |  | ) | const
| override

retrieve the current GSL error handler

See also
  IGslSvc

Returns
  current GSL error handler
  current GSL error handler

Definition at line 156 of file GslSvc.cpp.

157 {
158 GslErrorHandler hh = gsl_set_error_handler( nullptr );
159 gsl_set_error_handler( hh );
160 return hh ;
161 }

StatusCode GslSvc::initialize | ( |  | ) |
| override

standard service initialization

See also
  Service
  IGslSvc
  IService

Returns
  status code

See also
  Service
  IService

Returns
  status code

Prints the type of used handler get the handler

Get Tool Service

Definition at line 56 of file GslSvc.cpp.

57 {
58 // initialize the base class
59 StatusCode sc = Service::initialize();
60 if( sc.isFailure() )
61 { error()
62 << " Error in initialization of base class 'Service'"<< endmsg;
63 return sc;
64 }
65 // activate the static accessor to the service
66 GaudiGSL::setGslSvc( this );
67 // set the error handlers
68 if ( "GSL" == m_errorPolicy ) { /* nothing to do */ }
69 else if ( "Off" == m_errorPolicy )
70 { gsl_set_error_handler_off() ; }
71 else if ( "Abort" == m_errorPolicy )
72 { gsl_set_error_handler ( nullptr ) ; }
73 else if ( "Ignore" == m_errorPolicy )
74 { gsl_set_error_handler ( GslErrorHandlers::ignoreTheError ) ; }
75 else if ( "Exception" == m_errorPolicy )
76 { gsl_set_error_handler ( GslErrorHandlers::throwException ) ; }
77 else if ( "Handle" == m_errorPolicy )
78 { gsl_set_error_handler ( GslErrorHandlers::handleTheError ) ; }
79 else
80 { error()
81 << " Unknown Error policy '" << m_errorPolicy << "'"
82 << " Valid policies: "
83 << "[ 'GSL' , 'Off' , 'Abort' , 'Ignore' , 'Exception' , 'Handle' ]"
84 << endmsg;
85 return StatusCode::FAILURE ;
86 }
89 GslErrorHandler handler = gsl_set_error_handler( nullptr );
90 gsl_set_error_handler( handler );
91 if( handler )
92 { verbose()
93 << " GSL Error Handler is '"
94 << System::typeinfoName( typeid(*handler) ) << "'"
95 << endmsg; }
96 else { info() << " Error Handler is NULL" << endmsg ; }
97
98 if( !m_handlersTypeNames.empty() )
99 {
101 auto toolsvc = serviceLocator()->service<IToolSvc>("ToolSvc");
102 if (!toolsvc) {
103 error() << " Could not locate Tool Service! " << endmsg;
104 return StatusCode::FAILURE;
105 }
106 for( const auto& it : m_handlersTypeNames )
107 {
108 auto pos = it.find('/');
109 IGslErrorHandler* eh = nullptr ;
110 if( pos != std::string::npos ) {
111 sc = toolsvc->retrieveTool
112 ( it.substr( 0 , pos ), it.substr( pos + 1 ), eh , this ) ;
113 } else {
114 sc = toolsvc->retrieveTool( it , it , eh , this ) ;
115 }
116 if( sc.isFailure() )
117 { error()
118 << " Could not retrieve tool '" << it << "'"<< endmsg ;
119 return sc ; }
120 if( !eh )
121 { error()
122 << " Could not retrieve tool '" << it << "'"<< endmsg ;
123 return StatusCode::FAILURE ; }
124 m_handlers.push_back( eh );
125 }
126 }
127 //
128 return StatusCode::SUCCESS;
129 }
IGslErrorHandler
The abstract interface for arbitrary GSL error handler.
Definition: IGslErrorHandler.h:15
GslErrorHandlers::handleTheError
GAUDI_API void handleTheError(const char *reason, const char *file, int line, int code)
The simplest Gsl Error handler, It delegates the actual error handling to GSL Service.
Definition: GslErrorHandlers.cpp:31
IToolSvc
The interface implemented by the IToolSvc base class.
Definition: IToolSvc.h:18
Service::initialize
StatusCode initialize() override
Definition: Service.cpp:68
Service::serviceLocator
SmartIF< ISvcLocator > & serviceLocator() const override
Retrieve pointer to service locator.
Definition: Service.cpp:324
std::vector::empty
T empty(T...args)
CommonMessagingBase::info
MsgStream & info() const
shortcut for the method msgStream(MSG::INFO)
Definition: CommonMessaging.h:124
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:297
CommonMessagingBase::verbose
MsgStream & verbose() const
shortcut for the method msgStream(MSG::VERBOSE)
Definition: CommonMessaging.h:130
GslSvc::m_handlersTypeNames
Names m_handlersTypeNames
Definition: GslSvc.h:157
merge_files.sc
int sc
Definition: merge_files.py:167
GslErrorHandlers::throwException
GAUDI_API void throwException(const char *reason, const char *file, int line, int code)
The simple Gsl Error handler, it throwns the Gaudi Exception.
Definition: GslErrorHandlers.cpp:43
StatusCode::isFailure
bool isFailure() const
Test for a status code of FAILURE.
Definition: StatusCode.h:86
ISvcLocator::service
StatusCode service(const Gaudi::Utils::TypeNameString &name, T *&svc, bool createIf=true)
Templated method to access a service by name.
Definition: ISvcLocator.h:78
std::vector::push_back
T push_back(T...args)
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:118
StatusCode::FAILURE
Definition: StatusCode.h:29
StatusCode::SUCCESS
Definition: StatusCode.h:30
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
GslSvc::m_handlers
Handlers m_handlers
Definition: GslSvc.h:159
GslSvc::m_errorPolicy
std::string m_errorPolicy
error policy
Definition: GslSvc.h:153
GslSvc::handler
GslErrorHandler handler() const override
retrieve the current GSL error handler
Definition: GslSvc.cpp:156
GaudiGSL::setGslSvc
static const IGslSvc * setGslSvc(const IGslSvc *value)
set new value for static Gaudi GSL Service
Definition: GaudiGSL.cpp:35
GslErrorHandlers::ignoreTheError
GAUDI_API void ignoreTheError(const char *reason, const char *file, int line, int code)
The simplest Gsl Error handler, It simply ingnores the error.
Definition: GslErrorHandlers.cpp:24
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244

GslSvc& GslSvc::operator= | ( | const GslSvc & |  | ) |
| private

assignment operator is private

IGslSvc::GslErrorHandler GslSvc::setHandler | ( | GslErrorHandler | handler | ) | const
| override

set new GSL error handler

See also
  IGslSvc

Parameters

  handler | new GSL error handler

Returns
  GSL error handler

Parameters

  handler | new GSL error handler

Returns
  GSL error handler

Definition at line 171 of file GslSvc.cpp.

172 {
173 gsl_set_error_handler( handler );
174 {
175 debug() << " New GSL handler is set '"
176 << ( handler ? System::typeinfoName( typeid(handler) ) : "NULL" )
177 << "'" << endmsg ;
178 }
179 return handler ;
180 }
System::typeinfoName
GAUDI_API const std::string typeinfoName(const std::type_info &)
Get platform independent information about the class type.
Definition: System.cpp:297
GslSvc::handler
GslErrorHandler handler() const override
retrieve the current GSL error handler
Definition: GslSvc.cpp:156
CommonMessagingBase::debug
MsgStream & debug() const
shortcut for the method msgStream(MSG::DEBUG)
Definition: CommonMessaging.h:127
endmsg
MsgStream & endmsg(MsgStream &s)
MsgStream Modifier: endmsg. Calls the output method of the MsgStream.
Definition: MsgStream.h:244

StatusCode GslSvc::status | ( | const int | error | ) | const
| override

transform GSL error code to Gaudi status code

See also
  IGslSvc

Parameters

  error | GLS error code

Returns
  status code

Parameters

  error | GLS error code

Returns
  status code

Definition at line 189 of file GslSvc.cpp.

190 {
191 if( GSL_SUCCESS == error ){ return StatusCode::SUCCESS ; }
192 StatusCode sc( error );
193 if( sc.isSuccess() ){ return StatusCode::FAILURE ; }
194 return sc ;
195 }
merge_files.sc
int sc
Definition: merge_files.py:167
CommonMessagingBase::error
MsgStream & error() const
shortcut for the method msgStream(MSG::ERROR)
Definition: CommonMessaging.h:118
StatusCode::FAILURE
Definition: StatusCode.h:29
StatusCode::SUCCESS
Definition: StatusCode.h:30
StatusCode
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26

## Member Data Documentation

std::string GslSvc::m_errorPolicy = "GSL"
| private

error policy

Definition at line 153 of file GslSvc.h.

Handlers GslSvc::m_handlers
| private

Definition at line 159 of file GslSvc.h.

Names GslSvc::m_handlersTypeNames
| private

Definition at line 157 of file GslSvc.h.

std::vector<int> GslSvc::m_ignore
| private

codes to be ignored

Definition at line 162 of file GslSvc.h.

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

- GaudiGSL/src/Components/GslSvc.h
- GaudiGSL/src/Components/GslSvc.cpp