136 lines
4.2 KiB
C++
136 lines
4.2 KiB
C++
//-----------------------------------------------------------------------------
|
|
// Copyright (c) 1994,1995 Southeastern Universities Research Association,
|
|
// Continuous Electron Beam Accelerator Facility
|
|
//
|
|
// This software was developed under a United States Government license
|
|
// described in the NOTICE file included as part of this distribution.
|
|
//
|
|
//-----------------------------------------------------------------------------
|
|
//
|
|
// Description:
|
|
// cdevError class (abstract base class)
|
|
//
|
|
// Author: Jie Chen & Chip Watson
|
|
//
|
|
// Revision History:
|
|
// cdevError.h,v
|
|
// Revision 1.5 1997/08/27 18:23:31 chen
|
|
// Change error reporting to site specific scheme
|
|
//
|
|
// Revision 1.4 1995/12/14 19:11:14 chen
|
|
// add support to C interface
|
|
//
|
|
// Revision 1.3 1995/10/17 17:44:13 akers
|
|
// Added setThreshold functionality and made data items protected
|
|
//
|
|
// Revision 1.2 1995/10/17 15:29:45 chen
|
|
// change reportError interface
|
|
//
|
|
// Revision 1.1.1.1 1995/06/16 17:14:08 epics
|
|
// initial import of cdev
|
|
//
|
|
//
|
|
#ifndef _CDEV_ERROR_H
|
|
#define _CDEV_ERROR_H
|
|
|
|
#include <stdarg.h>
|
|
#include <cdevSpec.h>
|
|
|
|
#define _CDEV_MAX_ERR_HANDLERS 5
|
|
#define CDEV_SEVERITY_VOID_DATA 0xcde5da2a
|
|
|
|
class cdevRequestObject;
|
|
|
|
typedef void (*cdevErrorHandler)(int severity,
|
|
char *text,
|
|
cdevRequestObject* obj);
|
|
|
|
class CDEV_CLASS_SPEC cdevError
|
|
{
|
|
public:
|
|
// destructor
|
|
virtual ~cdevError (void);
|
|
|
|
virtual int autoErrorOn (void);
|
|
// PURPOSE: turn on flag which enables auto error on
|
|
// REQUIRE: derived class can implement diffrently
|
|
// PROMISE: return 0
|
|
|
|
virtual int autoErrorOff (void);
|
|
// PURPOSE: turn on flag which disables auto error on
|
|
// REQUIRE: derived class can implement diffrently
|
|
// PROMISE: return 0
|
|
|
|
virtual int vreportError (int severity,
|
|
char * name,
|
|
cdevRequestObject * obj,
|
|
char * formatString,
|
|
va_list argp);
|
|
|
|
// PURPOSE: report error to somewhere
|
|
// REQUIRE: formatString can have anything that works in printf
|
|
// PROMISE: same as printf
|
|
|
|
virtual int reportError (int severity,
|
|
char *name,
|
|
cdevRequestObject* obj,
|
|
char *formatString,...);
|
|
// PURPOSE: report error to somewhere
|
|
// REQUIRE: formatString can have anything that works in printf
|
|
// PROMISE: same as printf
|
|
|
|
virtual void reportError (int severity,
|
|
char *message,
|
|
cdevRequestObject* obj);
|
|
// PURPOSE: report error to somewhere with a whole string
|
|
// REQUIRE: user whole string
|
|
// PROMISE:
|
|
|
|
|
|
virtual void setErrorHandler (cdevErrorHandler handler = 0);
|
|
// PURPOSE: allow caller to set up his/her own error Handler
|
|
// REQUIRE: handle > 0 stands for a real function pointer
|
|
// PROMISE: next time error will be handled by new error handler
|
|
|
|
virtual void setThreshold ( int errorThreshold );
|
|
// PURPOSE: allow the caller to specify the minimum severity to report
|
|
// REQUIRE: errorThreshold >=0
|
|
// PROMISE: errors with severity < errorThreshold wil not be reported
|
|
|
|
virtual int attachErrorHandler (cdevErrorHandler handler);
|
|
// PURPOSE: allow caller to attach error handler to trap error messages
|
|
// REQUIRE: handler > 0
|
|
// PROMISE: return CDEV_SUCCESS if this handler is attached to trap messgaes
|
|
|
|
virtual int detachErrorHandler (cdevErrorHandler handler);
|
|
// PURPOSE: allow caller to dettach error handler
|
|
// REQUIRE: handler > 0
|
|
// PROMISE: return CDEV_SUCCESS if this handler is removed.
|
|
|
|
virtual void reportError (void *data,
|
|
cdevRequestObject* obj);
|
|
// PURPOSE: report error to somewhere with user defined data object.
|
|
// This routine is intended for site developer use only to
|
|
// support site wide error logging system.
|
|
// REQUIRE: user whole string
|
|
// PROMISE:
|
|
|
|
virtual const char *className(void) const {return "cdevError";}
|
|
|
|
protected:
|
|
// constructers, avoiding direct instantation
|
|
cdevError (void);
|
|
cdevError (cdevErrorHandler handler);
|
|
|
|
// data areas
|
|
cdevErrorHandler errorHandler_;
|
|
static cdevErrorHandler defaultErrorHandler_;
|
|
int autoErrorOn_;
|
|
int threshold_;
|
|
|
|
// list of error handlers
|
|
int numhandlers_;
|
|
cdevErrorHandler handlers_[_CDEV_MAX_ERR_HANDLERS];
|
|
};
|
|
#endif
|