This is Unofficial EPICS BASE Doxygen Site
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 
22 using namespace epics::pvData;
23 using namespace epics::pvAccess;
24 using namespace std;
25 
26 namespace epics { namespace pvaClient {
27 
28 
29 typedef std::tr1::shared_ptr<PVArray> PVArrayPtr;
30 
31 static ConvertPtr convert = getConvert();
32 
33 static StructureConstPtr nullStructure;
34 static PVStructurePtr nullPVStructure;
35 
36 static string noStructure("no pvStructure ");
37 static string noValue("no value field");
38 static string noScalar("value is not a scalar");
39 static string notCompatibleScalar("value is not a compatible scalar");
40 static string noArray("value is not an array");
41 static string noScalarArray("value is not a scalarArray");
42 static string notDoubleArray("value is not a doubleArray");
43 static string notStringArray("value is not a stringArray");
44 static string noAlarm("no alarm");
45 static string noTimeStamp("no timeStamp");
46 
47 
48 PvaClientMonitorDataPtr PvaClientMonitorData::create(StructureConstPtr const & structure)
49 {
51  return epv;
52 }
53 
54 PvaClientMonitorData::PvaClientMonitorData(StructureConstPtr const & structure)
55 : PvaClientData(structure)
56 {
57 }
58 
59 void 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 
67 BitSetPtr PvaClientMonitorData::getOverrunBitSet()
68 {
69  if(!overrunBitSet) throw std::runtime_error(messagePrefix + noStructure);
70  return overrunBitSet;
71 }
72 
73 std::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 }}
std::tr1::shared_ptr< PvaClientMonitorData > PvaClientMonitorDataPtr
Definition: pvaClient.h:54
Definition: memory.hpp:41
TODO only here because of the Lockable.
Definition: ntaggregate.cpp:16
std::tr1::shared_ptr< const Structure > StructureConstPtr
Definition: pvIntrospect.h:162
std::tr1::shared_ptr< PVArray > PVArrayPtr
Holds all PVA related.
Definition: pvif.h:34
pvData
Definition: monitor.h:428
A base class for PvaClientGetData, PvaClientPutData, and PvaClientMonitorData.
Definition: pvaClient.h:569
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
A class that holds data returned by PvaClientMonitor.
Definition: pvaClient.h:825
std::tr1::shared_ptr< PVField > PVFieldPtr
Definition: pvData.h:66
std::tr1::shared_ptr< Convert > ConvertPtr
Definition: convert.h:23
std::tr1::shared_ptr< MonitorElement > MonitorElementPtr
Definition: monitor.h:40
std::tr1::shared_ptr< BitSet > BitSetPtr
Definition: bitSet.h:26