From 99f68dac04f66a42284ca20105a732c995ab5b6d Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Sat, 14 Jul 2018 15:06:44 -0700 Subject: [PATCH] monitorfifo better default config handling --- src/client/monitor.cpp | 9 +++++++-- src/client/pv/monitor.h | 3 ++- testApp/remote/testmonitorfifo.cpp | 20 +++++++++++++++----- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/src/client/monitor.cpp b/src/client/monitor.cpp index 98494bf..9849ac2 100644 --- a/src/client/monitor.cpp +++ b/src/client/monitor.cpp @@ -22,7 +22,12 @@ typedef epicsGuardRelease 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 &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) diff --git a/src/client/pv/monitor.h b/src/client/pv/monitor.h index 9102b3a..5252d82 100644 --- a/src/client/pv/monitor.h +++ b/src/client/pv/monitor.h @@ -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(); }; /** diff --git a/testApp/remote/testmonitorfifo.cpp b/testApp/remote/testmonitorfifo.cpp index 2aa8117..034664e 100644 --- a/testApp/remote/testmonitorfifo.cpp +++ b/testApp/remote/testmonitorfifo.cpp @@ -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;