Make dbChannel access functions into macros

This commit is contained in:
Michael Davidsaver
2012-07-02 18:00:55 -04:00
parent 2d64b06cf4
commit b5c6c78c85
2 changed files with 48 additions and 85 deletions
-72
View File
@@ -633,78 +633,6 @@ long dbChannelOpen(dbChannel *chan)
return 0;
}
/* FIXME: For performance we should make these one-liners into macros,
* or try to make them inline if all our compilers can do that.
*/
const char * dbChannelName(dbChannel *chan)
{
return chan->name;
}
struct dbCommon * dbChannelRecord(dbChannel *chan)
{
return chan->addr.precord;
}
struct dbFldDes * dbChannelFldDes(dbChannel *chan)
{
return chan->addr.pfldDes;
}
long dbChannelElements(dbChannel *chan)
{
return chan->addr.no_elements;
}
short dbChannelFieldType(dbChannel *chan)
{
return chan->addr.field_type;
}
short dbChannelExportType(dbChannel *chan)
{
return chan->addr.dbr_field_type;
}
short dbChannelFieldSize(dbChannel *chan)
{
return chan->addr.field_size;
}
long dbChannelFinalElements(dbChannel *chan)
{
return chan->final_no_elements;
}
short dbChannelFinalFieldType(dbChannel *chan)
{
return chan->final_type;
}
short dbChannelFinalExportType(dbChannel *chan)
{
return chan->dbr_final_type;
}
short dbChannelFinalFieldSize(dbChannel *chan)
{
return chan->final_field_size;
}
short dbChannelSpecial(dbChannel *chan)
{
return chan->addr.special;
}
void * dbChannelField(dbChannel *chan)
{
/* Channel filters do not get to interpose here since there are many
* places where the field pointer is compared with the address of a
* specific record field, so they can't modify the pointer value.
*/
return chan->addr.pfield;
}
/* Only use dbChannelGet() if the record is already locked. */
long dbChannelGet(dbChannel *chan, short type, void *pbuffer,
long *options, long *nRequest, void *pfl)
+48 -13
View File
@@ -154,19 +154,54 @@ epicsShareFunc void dbChannelInit (void);
epicsShareFunc long dbChannelTest(const char *name);
epicsShareFunc dbChannel * dbChannelCreate(const char *name);
epicsShareFunc long dbChannelOpen(dbChannel *chan);
epicsShareFunc const char * dbChannelName(dbChannel *chan);
epicsShareFunc struct dbCommon * dbChannelRecord(dbChannel *chan);
epicsShareFunc struct dbFldDes * dbChannelFldDes(dbChannel *chan);
epicsShareFunc long dbChannelElements(dbChannel *chan);
epicsShareFunc short dbChannelFieldType(dbChannel *chan);
epicsShareFunc short dbChannelExportType(dbChannel *chan);
epicsShareFunc short dbChannelFieldSize(dbChannel *chan);
epicsShareFunc long dbChannelFinalElements(dbChannel *chan);
epicsShareFunc short dbChannelFinalFieldType(dbChannel *chan);
epicsShareFunc short dbChannelFinalExportType(dbChannel *chan);
epicsShareFunc short dbChannelFinalElementSize(dbChannel *chan);
epicsShareFunc short dbChannelSpecial(dbChannel *chan);
epicsShareFunc void * dbChannelField(dbChannel *chan);
/* In the following macros pChan is dbChannel* */
/* evaluates to const char* */
#define dbChannelName(pChan) ((pChan)->name)
/* evaluates to struct dbCommon* */
#define dbChannelRecord(pChan) ((pChan)->addr.precord)
/* evaluates to struct dbFldDes* */
#define dbChannelFldDes(pChan) ((pChan)->addr.pfldDes)
/* evaluates to long */
#define dbChannelElements(pChan) ((pChan)->addr.no_elements)
/* evaluates to short */
#define dbChannelFieldType(pChan) ((pChan)->addr.field_type)
/* evaluates to short */
#define dbChannelExportType(pChan) ((pChan)->addr.dbr_field_type)
/* evaluates to short */
#define dbChannelFieldSize(pChan) ((pChan)->addr.field_size)
/* evaluates to long */
#define dbChannelFinalElements(pChan) ((pChan)->final_no_elements)
/* evaluates to short */
#define dbChannelFinalFieldType(pChan) ((pChan)->final_type)
/* evaluates to short */
#define dbChannelFinalExportType(pChan) ((pChan)->dbr_final_type)
/* evaluates to short */
#define dbChannelFinalFieldSize(pChan) ((pChan)->final_field_size)
/* evaluates to short */
#define dbChannelSpecial(pChan) ((pChan)->addr.special)
/* Channel filters do not get to interpose here since there are many
* places where the field pointer is compared with the address of a
* specific record field, so they can't modify the pointer value.
*/
/* evaluates to void* */
#define dbChannelField(pChan) ((pChan)->addr.pfield)
epicsShareFunc long dbChannelGet(dbChannel *chan, short type,
void *pbuffer, long *options, long *nRequest, void *pfl);
epicsShareFunc long dbChannelGetField(dbChannel *chan, short type,