Use (typed) rset instead of (untyped) struct rset inside Base

This commit is contained in:
Ralph Lange
2017-03-30 14:35:24 +02:00
parent 0f2e26bc4c
commit 2f510af603
11 changed files with 34 additions and 32 deletions

View File

@@ -108,7 +108,7 @@ void dbSpcAsRegisterCallback(SPC_ASCALLBACK func)
long dbPutSpecial(DBADDR *paddr,int pass)
{
long int (*pspecial)()=NULL;
struct rset *prset;
rset *prset;
dbCommon *precord = paddr->precord;
long status=0;
long special=paddr->special;
@@ -140,7 +140,7 @@ long dbPutSpecial(DBADDR *paddr,int pass)
}
static void get_enum_strs(DBADDR *paddr, char **ppbuffer,
struct rset *prset,long *options)
rset *prset,long *options)
{
short field_type=paddr->field_type;
dbFldDes *pdbFldDes = paddr->pfldDes;
@@ -200,7 +200,7 @@ choice_common:
}
static void get_graphics(DBADDR *paddr, char **ppbuffer,
struct rset *prset,long *options)
rset *prset,long *options)
{
struct dbr_grDouble grd;
int got_data=FALSE;
@@ -240,7 +240,7 @@ static void get_graphics(DBADDR *paddr, char **ppbuffer,
}
static void get_control(DBADDR *paddr, char **ppbuffer,
struct rset *prset,long *options)
rset *prset,long *options)
{
struct dbr_ctrlDouble ctrld;
int got_data=FALSE;
@@ -280,7 +280,7 @@ static void get_control(DBADDR *paddr, char **ppbuffer,
}
static void get_alarm(DBADDR *paddr, char **ppbuffer,
struct rset *prset, long *options)
rset *prset, long *options)
{
char *pbuffer = *ppbuffer;
struct dbr_alDouble ald = {epicsNAN, epicsNAN, epicsNAN, epicsNAN};
@@ -325,7 +325,7 @@ static void getOptions(DBADDR *paddr, char **poriginal, long *options,
void *pflin)
{
db_field_log *pfl= (db_field_log *)pflin;
struct rset *prset;
rset *prset;
short field_type;
dbCommon *pcommon;
char *pbuffer = *poriginal;
@@ -394,7 +394,7 @@ static void getOptions(DBADDR *paddr, char **poriginal, long *options,
*poriginal = pbuffer;
}
struct rset * dbGetRset(const struct dbAddr *paddr)
rset * dbGetRset(const struct dbAddr *paddr)
{
struct dbFldDes *pfldDes = paddr->pfldDes;
@@ -468,7 +468,7 @@ long dbScanPassive(dbCommon *pfrom, dbCommon *pto)
*/
long dbProcess(dbCommon *precord)
{
struct rset *prset = precord->rset;
rset *prset = precord->rset;
dbRecordType *pdbRecordType = precord->rdes;
unsigned char tpro = precord->tpro;
char context[40] = "";
@@ -647,7 +647,7 @@ long dbNameToAddr(const char *pname, DBADDR *paddr)
paddr->dbr_field_type = mapDBFToDBR[dbfType];
if (paddr->special == SPC_DBADDR) {
struct rset *prset = dbGetRset(paddr);
rset *prset = dbGetRset(paddr);
/* Let record type modify paddr */
if (prset && prset->cvt_dbaddr) {
@@ -827,7 +827,7 @@ long dbGet(DBADDR *paddr, short dbrType,
db_field_log *pfl = (db_field_log *)pflin;
short field_type;
long capacity, no_elements, offset;
struct rset *prset;
rset *prset;
long status = 0;
if (options && *options)
@@ -1224,7 +1224,7 @@ long dbPut(DBADDR *paddr, short dbrType,
long no_elements = paddr->no_elements;
long special = paddr->special;
void *pfieldsave = paddr->pfield;
struct rset *prset = dbGetRset(paddr);
rset *prset = dbGetRset(paddr);
long status = 0;
long offset;
dbFldDes *pfldDes;

View File

@@ -20,6 +20,7 @@
#include "epicsTime.h"
#include "dbBase.h"
#include "dbAddr.h"
#include "recSup.h"
#ifdef INCLdb_accessh_epicsExportSharedSymbols
# define epicsExportSharedSymbols
@@ -202,7 +203,7 @@ struct dbr_alDouble {DBRalDouble};
#define S_db_bufFull (M_dbAccess|68) /*Buffer full*/
epicsShareFunc long dbPutSpecial(struct dbAddr *paddr,int pass);
epicsShareFunc struct rset * dbGetRset(const struct dbAddr *paddr);
epicsShareFunc rset * dbGetRset(const struct dbAddr *paddr);
epicsShareFunc long dbPutAttribute(
const char *recordTypename,const char *name,const char*value);
epicsShareFunc int dbIsValueField(const struct dbFldDes *pdbFldDes);

View File

@@ -509,7 +509,7 @@ dbChannel * dbChannelCreate(const char *name)
paddr->dbr_field_type = mapDBFToDBR[dbfType];
if (paddr->special == SPC_DBADDR) {
struct rset *prset = dbGetRset(paddr);
rset *prset = dbGetRset(paddr);
/* Let record type modify paddr */
if (prset && prset->cvt_dbaddr) {

View File

@@ -197,7 +197,7 @@
prompt("Address of RSET")
special(SPC_NOMOD)
interest(4)
extra("struct rset *rset")
extra("struct typed_rset *rset")
}
field(DSET,DBF_NOACCESS) {
prompt("DSET address")

View File

@@ -1637,7 +1637,7 @@ static long getFloatString(
float *psrc = (float *) paddr->pfield;
long status = 0;
long precision = 6;
struct rset *prset = 0;
rset *prset = 0;
if (paddr) prset = dbGetRset(paddr);
if (prset && (prset->get_precision))
@@ -1850,7 +1850,7 @@ static long getDoubleString(
double *psrc = (double *) paddr->pfield;
long status = 0;
long precision = 6;
struct rset *prset = 0;
rset *prset = 0;
if (paddr) prset = dbGetRset(paddr);
if (prset && (prset->get_precision))
@@ -2061,7 +2061,7 @@ static long getEnumString(
void *pto, long nRequest, long no_elements, long offset)
{
char *pbuffer = (char *) pto;
struct rset *prset;
rset *prset;
long status;
if ((prset=dbGetRset(paddr)) && (prset->get_enum_str))
@@ -2602,7 +2602,7 @@ static long putStringEnum(
const void *pfrom, long nRequest, long no_elements, long offset)
{
const char *pbuffer = (const char *) pfrom;
struct rset *prset;
rset *prset;
epicsEnum16 *pfield = (epicsEnum16*) paddr->pfield;
long status;
unsigned int nchoices,ind;
@@ -3940,7 +3940,7 @@ static long putFloatString(
char *pdest = (char *) paddr->pfield;
long status = 0;
long precision = 6;
struct rset *prset = dbGetRset(paddr);
rset *prset = dbGetRset(paddr);
short size = paddr->field_size;
if (prset && (prset->get_precision))
@@ -4153,7 +4153,7 @@ static long putDoubleString(
char *pdest = (char *) paddr->pfield;
long status = 0;
long precision = 6;
struct rset *prset = dbGetRset(paddr);
rset *prset = dbGetRset(paddr);
short size = paddr->field_size;
if (prset && (prset->get_precision))

View File

@@ -256,7 +256,7 @@ static long cvt_st_e(
epicsEnum16 *to,
const dbAddr *paddr)
{
struct rset *prset = 0;
rset *prset = 0;
long status;
epicsEnum16 *pfield= (epicsEnum16*)(paddr->pfield);
unsigned int nchoices,ind;
@@ -782,7 +782,7 @@ static long cvt_f_st(
char *to,
const dbAddr *paddr)
{
struct rset *prset = 0;
rset *prset = 0;
long status = 0;
long precision = 6;
@@ -863,7 +863,7 @@ static long cvt_d_st(
char *to,
const dbAddr *paddr)
{
struct rset *prset = 0;
rset *prset = 0;
long status = 0;
long precision = 6;
@@ -1009,7 +1009,7 @@ static long cvt_e_st_get(
char *to,
const dbAddr *paddr)
{
struct rset *prset = 0;
rset *prset = 0;
long status;
if(paddr) prset = dbGetRset(paddr);

View File

@@ -18,6 +18,7 @@
#include "dbFldTypes.h"
#include "ellLib.h"
#include "dbDefs.h"
#include "recSup.h"
typedef struct dbMenu {
ELLNODE node;
@@ -150,7 +151,7 @@ typedef struct dbRecordType {
short indvalFlddes; /*ind in papFldDes*/
dbFldDes **papFldDes; /* ptr to array of ptr to fldDes*/
/*The following are only available on run time system*/
struct rset *prset;
rset *prset;
int rec_size; /*record size in bytes */
}dbRecordType;

View File

@@ -402,7 +402,7 @@ static void initRecSup(void)
pdbRecordType = (dbRecordType *)ellNext(&pdbRecordType->node)) {
recordTypeLocation *precordTypeLocation =
registryRecordTypeFind(pdbRecordType->name);
struct rset *prset;
rset *prset;
if (!precordTypeLocation) {
errlogPrintf("iocInit record support for %s not found\n",
@@ -487,7 +487,7 @@ static void iterateRecords(recIterFunc func, void *user)
static void doInitRecord0(dbRecordType *pdbRecordType, dbCommon *precord,
void *user)
{
struct rset *prset = pdbRecordType->prset;
rset *prset = pdbRecordType->prset;
devSup *pdevSup;
if (!prset) return; /* unlikely */
@@ -542,7 +542,7 @@ static void doResolveLinks(dbRecordType *pdbRecordType, dbCommon *precord,
static void doInitRecord1(dbRecordType *pdbRecordType, dbCommon *precord,
void *user)
{
struct rset *prset = pdbRecordType->prset;
rset *prset = pdbRecordType->prset;
if (!prset) return; /* unlikely */

View File

@@ -38,10 +38,10 @@ static void myCallback(CALLBACK *pcallback)
{
ASDBCALLBACK *pasdbcallback = (ASDBCALLBACK *)pcallback;
subRecord *precord;
struct rset *prset;
rset *prset;
callbackGetUser(precord,pcallback);
prset=(struct rset *)(precord->rset);
prset=(rset *)(precord->rset);
precord->val = 0.0;
if(pasdbcallback->status) {
recGblSetSevr(precord,READ_ALARM,precord->brsv);

View File

@@ -94,7 +94,7 @@ static db_field_log* filter(void* pvt, dbChannel *chan, db_field_log *pfl)
{
myStruct *my = (myStruct*) pvt;
struct dbCommon *prec;
struct rset *prset;
rset *prset;
long start = my->start;
long end = my->end;
long nTarget = 0;

View File

@@ -204,7 +204,7 @@ static void hookPass1(initHookState state)
testFail("missing rec1");
testSkip(3, "missing record");
} else {
struct rset *prset = dbGetRset(&addr);
rset *prset = dbGetRset(&addr);
dbfType ftype = addr.field_type;
long count=-1, offset=-1, maxcount = addr.no_elements;
testOk1(prset && prset->get_array_info && prset->put_array_info);