cdev-1.7.2n

This commit is contained in:
2022-12-13 12:44:04 +01:00
commit b3b88fc333
1357 changed files with 338883 additions and 0 deletions

154
include/cdevRequestObject.i Normal file
View File

@@ -0,0 +1,154 @@
//-----------------------------------------------------------------------------
// 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:
// cdevRequestObject implementation (abstract class)
// inline functions
//
// Author: Jie Chen & Chip Watson
//
// Revision History:
// cdevRequestObject.i,v
// Revision 1.3 1998/02/13 14:00:44 chen
// add ref and deref
//
// Revision 1.2 1997/03/03 17:52:28 chen
// add buffering mechanism to caService
//
// Revision 1.1 1995/12/08 15:39:43 chen
// inline functions
//
//
// Note: How to determine to buffer an exeution object?
// If an execution object belongs to a group with
// an immediate execution mode, this object will not be
// buffered. If an execution object belongs to a group
// with a deferred execution mode, this execution object
// will be buffered
INLINE
int
cdevRequestObject::deferExecution (cdevData* out, cdevData* result)
{
if (executionMode () == CDEV_EXEC_DEFERRED) {
// create a transaction object
cdevExecObj* obj = new cdevExecObj (&system_, this, out, result, 0);
return 1;
}
else
return 0;
}
INLINE
int
cdevRequestObject::deferExecution (cdevData* out, cdevCallback* callback)
{
if (executionMode () == CDEV_EXEC_DEFERRED) {
// create a transaction object with new copy of callback
// must clone the data, as the caller did not
cdevCallback *ccbk = new cdevCallback (*callback);
cdevData *cloned = new cdevData(*out);
cdevExecObj* obj = new cdevExecObj (&system_, this, cloned, 0, ccbk);
return 1;
}
else
return 0;
}
INLINE
void
cdevRequestObject::bufferExecution (cdevData* out, cdevData* result,
cdevGroup* group, void* arg)
{
// create an execution object that is registered to the group
// caller has already cloned the data, so don't need to
cdevExecObj* obj = new cdevExecObj (&system_, this, out, result, 0,
group, arg);
}
INLINE
void
cdevRequestObject::bufferExecution (cdevData* out, cdevCallback* callback,
cdevGroup* group, void* arg)
{
// create an execution object that is registered to the group
// caller has already cloned the data, so don't need to
cdevExecObj* obj = new cdevExecObj (&system_, this, out, 0, callback,
group, arg);
}
INLINE
int
cdevRequestObject::execNoBlock (cdevData*, cdevData*, void* )
{
// empty: derived class handles this
return CDEV_SUCCESS;
}
INLINE
int
cdevRequestObject::execCallback (cdevData*, cdevCallback&, void* )
{
// empty: derived class handles this
return CDEV_SUCCESS;
}
//=======================================================================
// clear a long mask, set every bit to 0
//=======================================================================
INLINE
void cdevMaskZero (long& p)
{
::memset ((char *)&p, (char)0, sizeof (long));
}
//=======================================================================
// turn on a bit at position n inside the mask p
//=======================================================================
INLINE
void cdevMaskSet (long n, long& p)
{
assert ((n >= 0) && (n < sizeof (long) * NUMBITS_PER_BYTE));
p |= 1 << n;
}
//=======================================================================
// turn off a bit at position n inside the mask p
//=======================================================================
INLINE
void cdevMaskClr (long n, long& p)
{
assert ((n >= 0) && (n < sizeof (long) * NUMBITS_PER_BYTE));
p &= ~(1 << n);
}
//=======================================================================
// check whether a bit n is set or not
//=======================================================================
INLINE
int cdevMaskIsSet (long n, long p)
{
assert ((n >= 0) && (n < sizeof (long) * NUMBITS_PER_BYTE));
return (p & (1 << n));
}
INLINE
void cdevRequestObject::ref (void)
{
refCount_ ++;
}
INLINE
void cdevRequestObject::deref (void)
{
refCount_ --;
}