Files
pvxs/ioc/dbentry.h
T
2023-06-18 10:07:16 -07:00

65 lines
1.3 KiB
C++

/*
* Copyright - See the COPYRIGHT that is included with this distribution.
* pvxs is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*
* Author George S. McIntyre <george@level-n.com>, 2023
*
*/
#ifndef PVXS_DBENTRY_H
#define PVXS_DBENTRY_H
#include <dbStaticLib.h>
#include <dbAccess.h>
#include <pvxs/iochooks.h>
namespace pvxs {
namespace ioc {
/**
* Wrapper class for DBENTRY that is a type that encapsulates an IOC database entry.
*/
class DBEntry {
DBENTRY ent{};
public:
DBEntry() {
dbInitEntry(pdbbase, &ent);
}
explicit DBEntry(dbCommon *prec) {
#if EPICS_VERSION_INT >= VERSION_INT(3, 16, 1, 0)
dbInitEntryFromRecord(prec, &ent);
#else
dbInitEntry(pdbbase, &ent);
(void)dbFindRecord(&ent, prec->name);
#endif
}
DBEntry(const DBEntry&) = delete;
DBEntry(DBEntry&&) = delete;
~DBEntry() {
dbFinishEntry(&ent);
}
operator DBENTRY*() {
return &ent;
}
DBENTRY* operator->() {
return &ent;
}
const char* info(const char *key, const char* defval=nullptr) {
const char *ret = defval;
if(!dbFindInfo(&ent, key)) {
ret = ent.pinfonode->string;
}
return ret;
}
};
} // ioc
} // pvxs
#endif //PVXS_DBENTRY_H