pvaClientCPP 4.8.1
pvaClientMonitorData.cpp
Go to the documentation of this file.
1/* pvaClientMonitorData.cpp */
12#include <typeinfo>
13#include <sstream>
14
15#include <pv/createRequest.h>
16#include <pv/convert.h>
17
18#define epicsExportSharedSymbols
19
20#include <pv/pvaClient.h>
21
22using namespace epics::pvData;
23using namespace epics::pvAccess;
24using namespace std;
25
26namespace epics { namespace pvaClient {
27
28
29typedef std::tr1::shared_ptr<PVArray> PVArrayPtr;
30
31static ConvertPtr convert = getConvert();
32
33static StructureConstPtr nullStructure;
34static PVStructurePtr nullPVStructure;
35
36static string noStructure("no pvStructure ");
37static string noValue("no value field");
38static string noScalar("value is not a scalar");
39static string notCompatibleScalar("value is not a compatible scalar");
40static string noArray("value is not an array");
41static string noScalarArray("value is not a scalarArray");
42static string notDoubleArray("value is not a doubleArray");
43static string notStringArray("value is not a stringArray");
44static string noAlarm("no alarm");
45static string noTimeStamp("no timeStamp");
46
47
48PvaClientMonitorDataPtr PvaClientMonitorData::create(StructureConstPtr const & structure)
49{
51 return epv;
52}
53
54PvaClientMonitorData::PvaClientMonitorData(StructureConstPtr const & structure)
55: PvaClientData(structure)
56{
57}
58
59void PvaClientMonitorData::setData(MonitorElementPtr const & monitorElement)
60{
61 PVStructurePtr pvStructure = monitorElement->pvStructurePtr;
62 BitSetPtr changedBitSet = monitorElement->changedBitSet;
63 PvaClientData::setData(pvStructure,changedBitSet);
64 overrunBitSet = monitorElement->overrunBitSet;
65}
66
68{
69 if(!overrunBitSet) throw std::runtime_error(messagePrefix + noStructure);
70 return overrunBitSet;
71}
72
73std::ostream & PvaClientMonitorData::showOverrun(std::ostream & out)
74{
75 if(!overrunBitSet) throw std::runtime_error(messagePrefix + noStructure);
76 size_t nextSet = overrunBitSet->nextSetBit(0);
77 PVFieldPtr pvField;
78 while(nextSet!=string::npos) {
79 if(nextSet==0) {
80 pvField = getPVStructure();
81 } else {
82 pvField = getPVStructure()->getSubField(nextSet);
83 }
84 string name = pvField->getFullName();
85 out << name << " = " << pvField << endl;
86 nextSet = overrunBitSet->nextSetBit(nextSet+1);
87 }
88 return out;
89}
90
91}}
A base class for PvaClientGetData, PvaClientPutData, and PvaClientMonitorData.
Definition pvaClient.h:542
epics::pvData::PVStructurePtr getPVStructure()
Get the pvStructure.
void setData(epics::pvData::PVStructurePtr const &pvStructureFrom, epics::pvData::BitSetPtr const &bitSetFrom)
New data is present.
A class that holds data returned by PvaClientMonitor.
Definition pvaClient.h:788
epics::pvData::BitSetPtr getOverrunBitSet()
Get the overrun BitSet for the pvStructure This shows which fields have had more than one change.
void setData(epics::pvData::MonitorElementPtr const &monitorElement)
std::ostream & showOverrun(std::ostream &out)
Show the fields that have changed.
static PvaClientMonitorDataPtr create(epics::pvData::StructureConstPtr const &structure)
std::tr1::shared_ptr< PvaClientMonitorData > PvaClientMonitorDataPtr
Definition pvaClient.h:55
std::tr1::shared_ptr< PVArray > PVArrayPtr