This is Unofficial EPICS BASE Doxygen Site
pvStructureCopy.h
Go to the documentation of this file.
1 /* pvStructureCopy.h */
2 /*
3  * Copyright information and license terms for this software can be
4  * found in the file LICENSE that is included with the distribution
5  */
10 #ifndef PVSTRUCTURECOPY_H
11 #define PVSTRUCTURECOPY_H
12 
13 #include <string>
14 #include <stdexcept>
15 #include <memory>
16 #include <pv/pvData.h>
17 #include <pv/bitSet.h>
18 
19 #include <shareLib.h>
20 
21 namespace epics { namespace pvCopy{
22 
24 typedef std::tr1::shared_ptr<PVCopyTraverseMasterCallback> PVCopyTraverseMasterCallbackPtr;
25 
37 {
38 public:
45  virtual void nextMasterPVField(epics::pvData::PVFieldPtr const &pvField) = 0;
46 };
47 
48 
49 class PVCopy;
50 typedef std::tr1::shared_ptr<PVCopy> PVCopyPtr;
51 
52 struct CopyNode;
53 typedef std::tr1::shared_ptr<CopyNode> CopyNodePtr;
54 
56 typedef std::tr1::shared_ptr<CopyStructureNode> CopyStructureNodePtr;
57 
58 
66  public std::tr1::enable_shared_from_this<PVCopy>
67 {
68 public:
77  static PVCopyPtr create(
78  epics::pvData::PVStructurePtr const &pvMaster,
79  epics::pvData::PVStructurePtr const &pvRequest,
80  std::string const & structureName);
81  virtual ~PVCopy(){}
82  virtual void destroy();
88  epics::pvData::PVStructurePtr getPVMaster();
93  void traverseMaster(PVCopyTraverseMasterCallbackPtr const & callback);
97  epics::pvData::StructureConstPtr getStructure();
102  epics::pvData::PVStructurePtr createPVStructure();
108  std::size_t getCopyOffset(epics::pvData::PVFieldPtr const &masterPVField);
115  std::size_t getCopyOffset(
116  epics::pvData::PVStructurePtr const &masterPVStructure,
117  epics::pvData::PVFieldPtr const &masterPVField);
122  epics::pvData::PVFieldPtr getMasterPVField(std::size_t structureOffset);
130  void initCopy(
131  epics::pvData::PVStructurePtr const &copyPVStructure,
132  epics::pvData::BitSetPtr const &bitSet);
140  bool updateCopySetBitSet(
141  epics::pvData::PVStructurePtr const &copyPVStructure,
142  epics::pvData::BitSetPtr const &bitSet);
150  bool updateCopyFromBitSet(
151  epics::pvData::PVStructurePtr const &copyPVStructure,
152  epics::pvData::BitSetPtr const &bitSet);
159  void updateMaster(
160  epics::pvData::PVStructurePtr const &copyPVStructure,
161  epics::pvData::BitSetPtr const &bitSet);
170  epics::pvData::PVStructurePtr getOptions(std::size_t fieldOffset);
174  std::string dump();
175 private:
176 
177  PVCopyPtr getPtrSelf()
178  {
179  return shared_from_this();
180  }
181 
184  CopyNodePtr headNode;
185  epics::pvData::PVStructurePtr cacheInitStructure;
186  epics::pvData::BitSetPtr ignorechangeBitSet;
187 
188  void traverseMaster(
189  CopyNodePtr const &node,
190  PVCopyTraverseMasterCallbackPtr const & callback);
191  void updateCopySetBitSet(
192  epics::pvData::PVFieldPtr const &pvCopy,
193  epics::pvData::PVFieldPtr const &pvMaster,
194  epics::pvData::BitSetPtr const &bitSet);
195  void updateCopySetBitSet(
196  epics::pvData::PVFieldPtr const &pvCopy,
197  CopyNodePtr const &node,
198  epics::pvData::BitSetPtr const &bitSet);
199  void updateCopyFromBitSet(
200  epics::pvData::PVFieldPtr const &pvCopy,
201  CopyNodePtr const &node,
202  epics::pvData::BitSetPtr const &bitSet);
203  void updateMasterField(
204  CopyNodePtr const & node,
205  epics::pvData::PVFieldPtr const & pvCopy,
206  epics::pvData::PVFieldPtr const &pvMaster,
207  epics::pvData::BitSetPtr const &bitSet);
208  void updateMasterCheckBitSet(
209  epics::pvData::PVStructurePtr const &copyPVStructure,
210  epics::pvData::BitSetPtr const &bitSet,
211  size_t nextSet);
212  CopyNodePtr getCopyNode(std::size_t fieldOffset);
213 
214  PVCopy(epics::pvData::PVStructurePtr const &pvMaster);
215  bool init(epics::pvData::PVStructurePtr const &pvRequest);
216  epics::pvData::StructureConstPtr createStructure(
217  epics::pvData::PVStructurePtr const &pvMaster,
218  epics::pvData::PVStructurePtr const &pvFromRequest);
219  CopyNodePtr createStructureNodes(
220  epics::pvData::PVStructurePtr const &pvMasterStructure,
221  epics::pvData::PVStructurePtr const &pvFromRequest,
222  epics::pvData::PVStructurePtr const &pvFromField);
223  void initPlugin(
224  CopyNodePtr const & node,
225  epics::pvData::PVStructurePtr const & pvOptions,
226  epics::pvData::PVFieldPtr const & pvMasterField);
227  void traverseMasterInitPlugin();
228  void traverseMasterInitPlugin(CopyNodePtr const & node);
229 
230  CopyNodePtr getCopyOffset(
231  CopyStructureNodePtr const &structureNode,
232  epics::pvData::PVFieldPtr const &masterPVField);
233  bool checkIgnore(
234  epics::pvData::PVStructurePtr const & copyPVStructure,
235  epics::pvData::BitSetPtr const & bitSet);
236  void setIgnore(CopyNodePtr const & node);
237  CopyNodePtr getMasterNode(
238  CopyStructureNodePtr const &structureNode,
239  std::size_t structureOffset);
240  void dump(
241  std::string *builder,
242  CopyNodePtr const &node,
243  int indentLevel);
244 };
245 
246 }}
247 
248 #endif /* PVSTRUCTURECOPY_H */
std::tr1::shared_ptr< CopyStructureNode > CopyStructureNodePtr
std::tr1::shared_ptr< CopyNode > CopyNodePtr
std::tr1::shared_ptr< PVCopy > PVCopyPtr
Definition: pvPlugin.h:25
TODO only here because of the Lockable.
Definition: ntaggregate.cpp:16
std::tr1::shared_ptr< const Structure > StructureConstPtr
Definition: pvIntrospect.h:162
Mark external symbols and entry points for shared libraries.
Support for subset of fields in a pvStructure.
std::tr1::shared_ptr< PVCopyTraverseMasterCallback > PVCopyTraverseMasterCallbackPtr
#define POINTER_DEFINITIONS(clazz)
Definition: sharedPtr.h:198
Definition: caget.c:48
#define epicsShareClass
Definition: shareLib.h:206
Callback for traversing master structure.
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
std::tr1::shared_ptr< PVField > PVFieldPtr
Definition: pvData.h:66
std::tr1::shared_ptr< BitSet > BitSetPtr
Definition: bitSet.h:26