monitorfifo better default config handling

This commit is contained in:
Michael Davidsaver
2018-07-14 15:06:44 -07:00
parent f4b245710d
commit 99f68dac04
3 changed files with 24 additions and 8 deletions

View File

@ -22,7 +22,12 @@ typedef epicsGuardRelease<epicsMutex> UnGuard;
namespace epics {namespace pvAccess {
static const MonitorFIFO::Config default_conf = {4, 4, 0, false};
MonitorFIFO::Config::Config()
:maxCount(4)
,defCount(4)
,actualCount(0) // readback
,ignoreRequestMask(false)
{}
size_t MonitorFIFO::num_instances;
@ -31,7 +36,7 @@ MonitorFIFO::Source::~Source() {}
MonitorFIFO::MonitorFIFO(const std::tr1::shared_ptr<MonitorRequester> &requester,
const pvData::PVStructure::const_shared_pointer &pvRequest,
const Source::shared_pointer &source, Config *inconf)
:conf(inconf ? *inconf : default_conf)
:conf(inconf ? *inconf : Config())
,requester(requester)
,pvRequest(pvRequest)
,upstream(source)

View File

@ -270,11 +270,12 @@ public:
//! @param numEmpty The number of empty slots in the FIFO.
virtual void freeHighMark(MonitorFIFO *mon, size_t numEmpty) {}
};
struct Config {
struct epicsShareClass Config {
size_t maxCount, //!< upper limit on requested FIFO size
defCount, //!< FIFO size when client makes no request
actualCount; //!< filled in with actual FIFO size
bool ignoreRequestMask;
Config();
};
/**

View File

@ -369,7 +369,9 @@ void checkTypeChange()
void checkFill()
{
testDiag("==== %s ====", CURRENT_FUNCTION);
pva::MonitorFIFO::Config conf = {4, 2, 0};
pva::MonitorFIFO::Config conf;
conf.maxCount=4;
conf.defCount=2;
Tester tester(pvReqEmpty, &conf);
testEqual(conf.actualCount, 2u);
@ -439,7 +441,9 @@ void checkFill()
void checkSaturate()
{
testDiag("==== %s ====", CURRENT_FUNCTION);
pva::MonitorFIFO::Config conf = {4, 2, 0};
pva::MonitorFIFO::Config conf;
conf.maxCount=4;
conf.defCount=2;
Tester tester(pvReqEmpty, &conf);
testEqual(conf.actualCount, 2u);
@ -501,7 +505,9 @@ void checkSaturate()
void checkPipeline()
{
testDiag("==== %s ====", CURRENT_FUNCTION);
pva::MonitorFIFO::Config conf = {4, 3, 0};
pva::MonitorFIFO::Config conf;
conf.maxCount=4;
conf.defCount=3;
Tester tester(pvReqPipeline, &conf);
testEqual(conf.actualCount, 2u);
@ -597,7 +603,9 @@ void checkPipeline()
void checkSpam()
{
testDiag("==== %s ====", CURRENT_FUNCTION);
pva::MonitorFIFO::Config conf = {4, 3, 0};
pva::MonitorFIFO::Config conf;
conf.maxCount=4;
conf.defCount=3;
Tester tester(pvReqPipeline, &conf);
pvd::uint32 cnt = 0;
@ -663,7 +671,9 @@ void checkSpam()
void checkCountdown()
{
testDiag("==== %s ====", CURRENT_FUNCTION);
pva::MonitorFIFO::Config conf = {4, 3, 0};
pva::MonitorFIFO::Config conf;
conf.maxCount=4;
conf.defCount=3;
Tester tester(pvReqPipeline, &conf);
pvd::int32 cnt = 10;