Gaudi Framework, version v23r0

Home   Generated: Mon Jan 30 2012
Public Member Functions | Private Types | Private Member Functions | Private Attributes | Friends

GslSvc Class Reference

The implementation of IGslSvc interface. More...

#include <GslSvc.h>

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

List of all members.

Public Member Functions

virtual StatusCode handle (const GslError &error) const
 handle the GSL error
virtual GslErrorHandler handler () const
 retrieve the current GSL error handler
virtual GslErrorHandler setHandler (GslErrorHandler handler) const
 set new GSL error handler
virtual StatusCode status (const int error) const
 transform GSL error code to Gaudi status code
virtual StatusCode initialize ()
 standard service initialization
virtual StatusCode finalize ()
 standard service finalization
 GslSvc (const std::string &name, ISvcLocator *svc)
 Standard constructor.
virtual ~GslSvc ()
 destructor, virtual and protected

Private Types

typedef std::vector< std::stringNames
 external handlers
typedef std::vector
< IGslErrorHandler * > 
Handlers

Private Member Functions

 GslSvc ()
 default constructor is private
 GslSvc (const GslSvc &)
 copy constructor is private
GslSvcoperator= (const GslSvc &)
 assignment operator is private

Private Attributes

std::string m_errorPolicy
 error policy
Names m_handlersTypeNames
Handlers m_handlers
std::vector< int > m_ignore
 codes to be ignored

Friends

class SvcFactory< GslSvc >
 friend factory for instantiation

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:

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.Belyaev@itep.ru
Date:
29/04/2002

Definition at line 86 of file GslSvc.h.


Member Typedef Documentation

Definition at line 163 of file GslSvc.h.

external handlers

Definition at line 161 of file GslSvc.h.


Constructor & Destructor Documentation

GslSvc::GslSvc ( const std::string name,
ISvcLocator svc 
)

Standard constructor.

mandatory static factory for service instantiation

See also:
Service
Parameters:
nameservice name
scvpointer to service locator
See also:
SvcFactory
ISvcFactory
IFactory Standard constructor
Parameters:
nameservice name
scvpointer to service locator

Definition at line 48 of file GslSvc.cpp.

  : base_class ( name , svc )
  , m_errorPolicy       ( "GSL" )
  , m_handlersTypeNames ()
  , m_handlers          ()
  , m_ignore            ()
{
  declareProperty( "ErrorPolicy" , m_errorPolicy       ) ;
  declareProperty( "Handlers"    , m_handlersTypeNames ) ;
  declareProperty( "IgnoreCodes" , m_ignore            ) ;
}
GslSvc::~GslSvc (  ) [virtual]

destructor, virtual and protected

destructor

Definition at line 65 of file GslSvc.cpp.

{}
GslSvc::GslSvc (  ) [private]

default constructor is private

GslSvc::GslSvc ( const GslSvc  ) [private]

copy constructor is private


Member Function Documentation

StatusCode GslSvc::finalize (  ) [virtual]

standard service finalization

See also:
Service
IGslSvc
IService
Returns:
status code
See also:
Service
IService
Returns:
status code

Reimplemented from Service.

Definition at line 164 of file GslSvc.cpp.

{
  MsgStream log(msgSvc(), name());
  log << MSG::DEBUG << "==> Finalize" << endmsg;

  // deactivate the static accessor to the service
  GaudiGSL::setGslSvc( 0 );

  // finalize the base class
  return Service::finalize() ;
}
StatusCode GslSvc::handle ( const GslError error ) const [virtual]

handle the GSL error

See also:
IGslSvc
Parameters:
errerror
Returns:
status code
Parameters:
errorerror
Returns:
status code

Implements IGslSvc.

Definition at line 233 of file GslSvc.cpp.

{
  StatusCode sc = StatusCode::SUCCESS ;
  // code to be ignored?
  if( m_ignore.end() != std::find( m_ignore.begin () ,
                                   m_ignore.end   () ,
                                   error.code        ) ) { return sc ; }
  // invoke all handlers
  for( Handlers::const_iterator handler = m_handlers.begin() ;
       sc.isSuccess() && m_handlers.end() != handler ; ++handler )
    { sc = (*handler)->handle( error  ); }
  //
  return sc ;
}
IGslSvc::GslErrorHandler GslSvc::handler (  ) const [virtual]

retrieve the current GSL error handler

See also:
IGslSvc
Returns:
current GSL error handler
current GSL error handler

Implements IGslSvc.

Definition at line 182 of file GslSvc.cpp.

{
  GslErrorHandler hh = gsl_set_error_handler( 0 );
  gsl_set_error_handler( hh );
  return hh ;
}
StatusCode GslSvc::initialize (  ) [virtual]

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

Reimplemented from Service.

Definition at line 75 of file GslSvc.cpp.

{
  // initialize the base class
  StatusCode sc = Service::initialize();
  MsgStream log( msgSvc() , name() );
  if( sc.isFailure() )
    { log << MSG::ERROR
          << " Error in initialization of base class 'Service'"<< endmsg;
    return sc;
    }
  // activate the static accessor to the service
  GaudiGSL::setGslSvc( this );
  // set the error handlers
  if      ( "GSL"       == m_errorPolicy ) { /* nothing to do */ }
  else if ( "Off"       == m_errorPolicy )
    { gsl_set_error_handler_off()                                ; }
  else if ( "Abort"     == m_errorPolicy )
    { gsl_set_error_handler ( 0 )                                ; }
  else if ( "Ignore"    == m_errorPolicy )
    { gsl_set_error_handler ( GslErrorHandlers::ignoreTheError ) ; }
  else if ( "Exception" == m_errorPolicy )
    { gsl_set_error_handler ( GslErrorHandlers::throwException ) ; }
  else if ( "Handle"    == m_errorPolicy )
    { gsl_set_error_handler ( GslErrorHandlers::handleTheError ) ; }
  else
    { log << MSG::ERROR
          << " Unknown Error policy '" << m_errorPolicy << "'"
          << " Valid policies: "
          << "[ 'GSL' , 'Off' , 'Abort' , 'Ignore' , 'Exception' , 'Handle' ]"
          << endmsg;
    return StatusCode::FAILURE ;
    }
  GslErrorHandler handler = gsl_set_error_handler( 0 );
  gsl_set_error_handler( handler );
  if( 0 != handler )
    { log << MSG::VERBOSE
          << " GSL Error Handler is '"
          << System::typeinfoName( typeid(*handler) ) << "'"
          << endmsg; }
  else { log << MSG::INFO << " Error Handler is NULL" << endmsg ; }

  if( !m_handlersTypeNames.empty() )
    {
      SmartIF<IToolSvc> toolsvc(serviceLocator()->service("ToolSvc"));
      if (!toolsvc.isValid()) {
        log << MSG::ERROR << " Could not locate Tool Service! " << endmsg;
        return StatusCode::FAILURE;
      }
      for( Names::const_iterator it = m_handlersTypeNames.begin() ;
           m_handlersTypeNames.end() != it ; ++it )
        {
          std::string::const_iterator ipos =
            std::find( it->begin() , it->end() , '/');
          const std::string::size_type pos = ipos - it->begin() ;
          IGslErrorHandler* eh = 0 ;
          if( it->end() != ipos )
            { sc = toolsvc->retrieveTool
                ( std::string( *it , 0 , pos )       ,
                  std::string( *it , pos + 1, it->length() ), eh , this ) ; }
          else
            { sc = toolsvc->retrieveTool
                ( *it , std::string( *it , pos + 1, it->length() ) ,
                  eh , this ) ; }
          if( sc.isFailure() )
            { log << MSG::ERROR
                  << " Could not retrieve tool '" << *it << "'"<< endmsg ;
            return sc ; }
          if( 0 == eh )
            { log << MSG::ERROR
                  << " Could not retrieve tool '" << *it << "'"<< endmsg ;
            return StatusCode::FAILURE  ; }
          m_handlers.push_back( eh );
        }
    }
  //
  return StatusCode::SUCCESS;
}
GslSvc& GslSvc::operator= ( const GslSvc  ) [private]

assignment operator is private

IGslSvc::GslErrorHandler GslSvc::setHandler ( IGslSvc::GslErrorHandler  handler ) const [virtual]

set new GSL error handler

See also:
IGslSvc
Parameters:
handlernew GSL error handler
Returns:
GSL error handler
Parameters:
handlernew GSL error handler
Returns:
GSL error handler

Implements IGslSvc.

Definition at line 197 of file GslSvc.cpp.

{
  gsl_set_error_handler( handler );
  {
    MsgStream log( msgSvc(), name() );
    log << MSG::DEBUG << " New GSL handler is set '" ;
    if( 0 == handler ) { log << "NULL"                                  ; }
    else               { log << System::typeinfoName( typeid(handler) ) ; }
    log << "'" << endmsg ;
  }
  return handler ;
}
StatusCode GslSvc::status ( const int  error ) const [virtual]

transform GSL error code to Gaudi status code

See also:
IGslSvc
Parameters:
errorGLS error code
Returns:
status code
Parameters:
errorGLS error code
Returns:
status code

Implements IGslSvc.

Definition at line 217 of file GslSvc.cpp.

{
  if( GSL_SUCCESS == error ){ return StatusCode::SUCCESS ; }
  StatusCode sc( error );
  if( sc.isSuccess()       ){ return StatusCode::FAILURE ; }
  return sc ;
}

Friends And Related Function Documentation

friend class SvcFactory< GslSvc > [friend]

friend factory for instantiation

Definition at line 88 of file GslSvc.h.


Member Data Documentation

error policy

Definition at line 158 of file GslSvc.h.

Definition at line 164 of file GslSvc.h.

Definition at line 162 of file GslSvc.h.

std::vector<int> GslSvc::m_ignore [private]

codes to be ignored

Definition at line 167 of file GslSvc.h.


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Mon Jan 30 2012 13:53:15 for Gaudi Framework, version v23r0 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004