From 7ccd8df02f6440d940ae9fe6d5263c0e73f3af21 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Thu, 22 Jun 2017 13:09:42 +0200 Subject: [PATCH] PipelineMonitor -> Monitor collapse PipelineMonitor into Monitor no-op virtual call is probably less work than dynamic_cast. --- src/client/pv/monitor.h | 6 ++++++ src/client/pv/pvAccess.h | 12 +----------- src/server/responseHandlers.cpp | 10 ++-------- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/src/client/pv/monitor.h b/src/client/pv/monitor.h index ae1c9bd..1cbf509 100644 --- a/src/client/pv/monitor.h +++ b/src/client/pv/monitor.h @@ -93,6 +93,12 @@ class epicsShareClass Monitor : public virtual epics::pvData::Destroyable{ virtual void getStats(Stats& s) const { s.nfilled = s.noutstanding = s.nempty = 0; } + + /** + * Report remote queue status. + * @param freeElements number of free elements. + */ + virtual void reportRemoteQueueStatus(epics::pvData::int32 freeElements) {} }; diff --git a/src/client/pv/pvAccess.h b/src/client/pv/pvAccess.h index f36ab73..3b44410 100644 --- a/src/client/pv/pvAccess.h +++ b/src/client/pv/pvAccess.h @@ -1383,17 +1383,7 @@ epicsShareFunc void unregisterAllChannelProviderFactory() EPICS_DEPRECATED; * @brief Pipeline (streaming) support API (optional). * This is used by pvAccess to implement pipeline (streaming) monitors. */ -class epicsShareClass PipelineMonitor : public virtual Monitor { -public: - POINTER_DEFINITIONS(PipelineMonitor); - virtual ~PipelineMonitor() {} - - /** - * Report remote queue status. - * @param freeElements number of free elements. - */ - virtual void reportRemoteQueueStatus(epics::pvData::int32 freeElements) = 0; -}; +typedef Monitor PipelineMonitor; } diff --git a/src/server/responseHandlers.cpp b/src/server/responseHandlers.cpp index 297f0c0..31e3536 100644 --- a/src/server/responseHandlers.cpp +++ b/src/server/responseHandlers.cpp @@ -1882,10 +1882,7 @@ void ServerMonitorHandler::handleResponse(osiSockAddr* responseFrom, int32 nfree = payloadBuffer->getInt(); ServerMonitorRequesterImpl::shared_pointer request = static_pointer_cast(channel->getRequest(ioid)); - Monitor::shared_pointer mp = request->getChannelMonitor(); - PipelineMonitor* pmp = dynamic_cast(mp.get()); - if (pmp) - pmp->reportRemoteQueueStatus(nfree); + request->getChannelMonitor()->reportRemoteQueueStatus(nfree); } } @@ -1907,10 +1904,7 @@ void ServerMonitorHandler::handleResponse(osiSockAddr* responseFrom, { transport->ensureData(4); int32 nfree = payloadBuffer->getInt(); - Monitor::shared_pointer mp = request->getChannelMonitor(); - PipelineMonitor* pmp = dynamic_cast(mp.get()); - if (pmp) - pmp->reportRemoteQueueStatus(nfree); + request->getChannelMonitor()->reportRemoteQueueStatus(nfree); return; // note: not possible to ack and destroy }