diff --git a/pvDataApp/monitor/monitor.h b/pvDataApp/monitor/monitor.h index 0d98af7..f1f4300 100644 --- a/pvDataApp/monitor/monitor.h +++ b/pvDataApp/monitor/monitor.h @@ -28,17 +28,17 @@ namespace epics { namespace pvData { * Get the PVStructure. * @return The PVStructure. */ - virtual PVStructure::shared_pointer getPVStructure() = 0; + virtual PVStructure::shared_pointer const & getPVStructure() = 0; /** * Get the bitSet showing which fields have changed. * @return The bitSet. */ - virtual BitSet::shared_pointer getChangedBitSet() = 0; + virtual BitSet::shared_pointer const & getChangedBitSet() = 0; /** * Get the bitSet showing which fields have been changed more than once. * @return The bitSet. */ - virtual BitSet::shared_pointer getOverrunBitSet() = 0; + virtual BitSet::shared_pointer const & getOverrunBitSet() = 0; }; @@ -90,7 +90,7 @@ namespace epics { namespace pvData { * @param monitor The monitor * @param structure The structure defining the data. */ - virtual void monitorConnect(const Status &status, + virtual void monitorConnect(Status const &status, Monitor::shared_pointer const & monitor, StructureConstPtr const & structure) = 0; /** * A monitor event has occurred. diff --git a/pvDataApp/monitor/monitorQueue.cpp b/pvDataApp/monitor/monitorQueue.cpp index f1f775b..4a498d5 100644 --- a/pvDataApp/monitor/monitorQueue.cpp +++ b/pvDataApp/monitor/monitorQueue.cpp @@ -18,9 +18,9 @@ class MonitorElementImpl : public MonitorElement { public: MonitorElementImpl(PVStructure::shared_pointer pvStructure); ~MonitorElementImpl(){} - virtual PVStructure::shared_pointer getPVStructure(); - virtual BitSet::shared_pointer getChangedBitSet(); - virtual BitSet::shared_pointer getOverrunBitSet(); + virtual PVStructure::shared_pointer const & getPVStructure(); + virtual BitSet::shared_pointer const & getChangedBitSet(); + virtual BitSet::shared_pointer const & getOverrunBitSet(); void setQueueElement(MonitorQueueElement *queueElement); MonitorQueueElement *getQueueElement(); private: @@ -39,17 +39,17 @@ MonitorElementImpl::MonitorElementImpl(PVStructure::shared_pointer pvStructure) queueElement(0) {} -PVStructure::shared_pointer MonitorElementImpl::getPVStructure() +PVStructure::shared_pointer const & MonitorElementImpl::getPVStructure() { return pvStructure; } -BitSet::shared_pointer MonitorElementImpl::getChangedBitSet() +BitSet::shared_pointer const & MonitorElementImpl::getChangedBitSet() { return changedBitSet; } -BitSet::shared_pointer MonitorElementImpl::getOverrunBitSet() +BitSet::shared_pointer const & MonitorElementImpl::getOverrunBitSet() { return overrunBitSet; } @@ -64,7 +64,7 @@ MonitorQueueElement *MonitorElementImpl::getQueueElement() return queueElement; } -MonitorQueue::MonitorQueue(PVStructure::shared_pointer* structures,int number) +MonitorQueue::MonitorQueue(PVStructureSharedPointerPtrArray structures,int number) : number(number), structures(structures), queue(0), @@ -78,7 +78,7 @@ MonitorQueue::MonitorQueue(PVStructure::shared_pointer* structures,int number) = new MonitorElement::shared_pointer*[number]; for(int i=0; i(queueElements,number); MonitorQueueElement *queueElement; @@ -98,13 +98,13 @@ MonitorQueue::~MonitorQueue() delete[] structures; } -PVStructure::shared_pointer* MonitorQueue::createStructures( +PVStructureSharedPointerPtrArray MonitorQueue::createStructures( PVStructurePtrArray array,int number) { - PVStructure::shared_pointer* elements = - new PVStructure::shared_pointer[number]; + PVStructureSharedPointerPtrArray elements = + new PVStructureSharedPointerPtr[number]; for(int i=0; igetFree(); - if(queueElement==0) return nullElement; - return *queueElement->getObject(); -} - -void MonitorQueue::setUsed(MonitorElement::shared_pointer element) -{ - MonitorElementImpl *impl = static_cast(element.get()); - queue->setUsed(impl->getQueueElement()); -} - -MonitorElement::shared_pointer MonitorQueue::getUsed() +MonitorElement::shared_pointer const & MonitorQueue::getFree() { MonitorQueueElement *queueElement = queue->getUsed(); if(queueElement==0) return nullElement; return *queueElement->getObject(); } -void MonitorQueue::releaseUsed(MonitorElement::shared_pointer element) +void MonitorQueue::setUsed(MonitorElement::shared_pointer const & element) +{ + MonitorElementImpl *impl = static_cast(element.get()); + queue->setUsed(impl->getQueueElement()); +} + +MonitorElement::shared_pointer const & MonitorQueue::getUsed() +{ + MonitorQueueElement *queueElement = queue->getUsed(); + if(queueElement==0) return nullElement; + return *queueElement->getObject(); +} + +void MonitorQueue::releaseUsed(MonitorElement::shared_pointer const & element) { MonitorElementImpl *impl = static_cast(element.get()); queue->releaseUsed(impl->getQueueElement()); diff --git a/pvDataApp/monitor/monitorQueue.h b/pvDataApp/monitor/monitorQueue.h index 749fda8..58ad504 100644 --- a/pvDataApp/monitor/monitorQueue.h +++ b/pvDataApp/monitor/monitorQueue.h @@ -19,22 +19,25 @@ namespace epics { namespace pvData { +typedef PVStructure::shared_pointer* PVStructureSharedPointerPtr; +typedef PVStructureSharedPointerPtr* PVStructureSharedPointerPtrArray; + class MonitorQueue { public: - MonitorQueue(PVStructure::shared_pointer* structures,int number); + MonitorQueue(PVStructureSharedPointerPtrArray structures,int number); ~MonitorQueue(); - static PVStructure::shared_pointer* createStructures( + static PVStructureSharedPointerPtrArray createStructures( PVStructurePtrArray array,int number); void clear(); int getNumberFree(); int capacity(); - MonitorElement::shared_pointer getFree(); - void setUsed(MonitorElement::shared_pointer element); - MonitorElement::shared_pointer getUsed(); - void releaseUsed(MonitorElement::shared_pointer element); + MonitorElement::shared_pointer const & getFree(); + void setUsed(MonitorElement::shared_pointer const & element); + MonitorElement::shared_pointer const & getUsed(); + void releaseUsed(MonitorElement::shared_pointer const & element); private: int number; - PVStructure::shared_pointer* structures; + PVStructureSharedPointerPtrArray structures; Queue *queue; MonitorElement::shared_pointer nullElement; };