diff --git a/src/ioc/db/dbChannel.c b/src/ioc/db/dbChannel.c index d27527b37..98fa9b70e 100644 --- a/src/ioc/db/dbChannel.c +++ b/src/ioc/db/dbChannel.c @@ -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) diff --git a/src/ioc/db/dbChannel.h b/src/ioc/db/dbChannel.h index f9d468dda..60caa8d39 100644 --- a/src/ioc/db/dbChannel.h +++ b/src/ioc/db/dbChannel.h @@ -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,