Files
pvData/pvDataApp/monitor/monitorQueue.cpp
2012-05-09 14:06:17 -04:00

87 lines
2.2 KiB
C++

/* monitorQueue.cpp */
/**
* Copyright - See the COPYRIGHT that is included with this distribution.
* EPICS pvDataCPP is distributed subject to a Software License Agreement found
* in file LICENSE that is included with this distribution.
*/
/* Marty Kraimer 2011.03 */
#include <pv/bitSet.h>
#include <pv/monitorQueue.h>
namespace epics { namespace pvData {
MonitorElementArray MonitorQueue::createMonitorElements(
StructureConstPtr & elementStructure,int number)
{
PVDataCreatePtr pvDataCreate = getPVDataCreate();
MonitorElementArray elementArray(number);
for(int i=0; i<number; i++) {
PVStructurePtr pvStructurePtr
= pvDataCreate->createPVStructure(elementStructure);
MonitorElementPtr monitorElement(new MonitorElement(pvStructurePtr));
elementArray[i] = monitorElement;
}
return elementArray;
}
MonitorQueue::MonitorQueue(MonitorElementArray monitorElementArray)
: elementArray(monitorElementArray),
queue(elementArray)//,
//number(monitorElementArray.size())
{
number = monitorElementArray.size();
if(number<2) {
throw std::logic_error(String("queueSize must be >=2"));
}
}
MonitorQueue::~MonitorQueue()
{
}
void MonitorQueue::clear()
{
queue->clear();
}
int MonitorQueue::getNumberFree()
{
return queue->getNumberFree();
}
int MonitorQueue::capacity()
{
return number;
}
MonitorElementPtr & MonitorQueue::getFree()
{
MonitorElementPtr * queueElement = queue->getFree();
if(queueElement==0) return nullElement;
return *queueElement;
}
void MonitorQueue::setUsed(MonitorElement::shared_pointer const & element)
{
MonitorElementImpl *impl = static_cast<MonitorElementImpl *>(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<MonitorElementImpl *>(element.get());
queue->releaseUsed(impl->getQueueElement());
}
}}