Files
cdev-1.7.2n/include/cdevError.h
2022-12-13 12:44:04 +01:00

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