This is Unofficial EPICS BASE Doxygen Site
pvTimestampPlugin.cpp
Go to the documentation of this file.
1 /* pvTimestampPlugin.cpp */
2 /*
3  * The License for this software can be found in the file LICENSE that is included with the distribution.
4  */
5 
6 #include <string>
7 #include <map>
8 #include <pv/lock.h>
9 #include <pv/pvData.h>
10 #include <pv/bitSet.h>
11 #include <pv/convert.h>
12 #include <pv/pvTimeStamp.h>
13 #define epicsExportSharedSymbols
14 #include "pv/pvPlugin.h"
15 #include "pv/pvTimestampPlugin.h"
16 
17 
18 using std::string;
19 using std::size_t;
20 using std::cout;
21 using std::endl;
23 using std::vector;
24 using namespace epics::pvData;
25 
26 namespace epics { namespace pvCopy{
27 
28 static ConvertPtr convert = getConvert();
29 static std::string name("timestamp");
30 
31 PVTimestampPlugin::PVTimestampPlugin()
32 {
33 }
34 
35 PVTimestampPlugin::~PVTimestampPlugin()
36 {
37 }
38 
39 void PVTimestampPlugin::create()
40 {
41  static bool firstTime = true;
42  if(firstTime) {
43  firstTime = false;
45  PVPluginRegistry::registerPlugin(name,pvPlugin);
46  }
47 }
48 
49 PVFilterPtr PVTimestampPlugin::create(
50  const std::string & requestValue,
51  const PVCopyPtr & pvCopy,
52  const PVFieldPtr & master)
53 {
54  return PVTimestampFilter::create(requestValue,master);
55 }
56 
57 PVTimestampFilter::~PVTimestampFilter()
58 {
59 }
60 
61 
62 PVTimestampFilterPtr PVTimestampFilter::create(
63  const std::string & requestValue,
64  const PVFieldPtr & master)
65 {
66  PVTimeStamp pvTimeStamp;
67  if(!pvTimeStamp.attach(master)) return PVTimestampFilterPtr();
68  bool current = false;
69  bool copy = false;
70  if(requestValue.compare("current")==0) {
71  current = true;
72  } else if(requestValue.compare("copy")==0){
73  copy = true;
74  } else {
75  return PVTimestampFilterPtr();
76  }
78  new PVTimestampFilter(current,copy,master));
79  return filter;
80 }
81 
82 PVTimestampFilter::PVTimestampFilter(bool current,bool copy,PVFieldPtr const & master)
83 : current(current),
84  copy(copy),
85  master(master)
86 {
87 }
88 
89 
90 bool PVTimestampFilter::filter(const PVFieldPtr & pvCopy,const BitSetPtr & bitSet,bool toCopy)
91 {
92  if(current) {
93  timeStamp.getCurrent();
94  if(toCopy) {
95  if(!pvTimeStamp.attach(pvCopy)) return false;
96  } else {
97  if(!pvTimeStamp.attach(master)) return false;
98  }
99  pvTimeStamp.set(timeStamp);
100  bitSet->set(pvCopy->getFieldOffset());
101  return true;
102  }
103  if(copy) {
104  if(toCopy) {
105  if(!pvTimeStamp.attach(master)) return false;
106  pvTimeStamp.get(timeStamp);
107  if(!pvTimeStamp.attach(pvCopy)) return false;
108  pvTimeStamp.set(timeStamp);
109  bitSet->set(pvCopy->getFieldOffset());
110  } else {
111  if(!pvTimeStamp.attach(pvCopy)) return false;
112  pvTimeStamp.get(timeStamp);
113  if(!pvTimeStamp.attach(master)) return false;
114  pvTimeStamp.set(timeStamp);
115  }
116  return true;
117  }
118  return false;
119 }
120 
121 string PVTimestampFilter::getName()
122 {
123  return name;
124 }
125 
126 }}
A plugin for a filter that sets a timeStamp to the current time.
std::tr1::shared_ptr< PVFilter > PVFilterPtr
Definition: pvPlugin.h:29
std::tr1::shared_ptr< PVCopy > PVCopyPtr
Definition: pvPlugin.h:25
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:788
TODO only here because of the Lockable.
Definition: ntaggregate.cpp:16
void copy(PVValueArray< T > &pvFrom, size_t fromOffset, size_t fromStride, PVValueArray< T > &pvTo, size_t toOffset, size_t toStride, size_t count)
Copy a subarray from one scalar array to another.
pvData
Definition: monitor.h:428
A filter that sets a timeStamp to/from the current field or pvCopy.
Methods for accessing a timeStamp structure.
Definition: pvTimeStamp.h:38
std::tr1::shared_ptr< PVTimestampPlugin > PVTimestampPluginPtr
std::tr1::shared_ptr< PVField > PVFieldPtr
Definition: pvData.h:66
std::tr1::shared_ptr< Convert > ConvertPtr
Definition: convert.h:23
std::tr1::shared_ptr< PVTimestampFilter > PVTimestampFilterPtr
std::tr1::shared_ptr< BitSet > BitSetPtr
Definition: bitSet.h:26
bool attach(PVFieldPtr const &pvField)
Definition: pvTimeStamp.cpp:26