10 #ifndef PVSTRUCTURECOPY_H 11 #define PVSTRUCTURECOPY_H 16 #include <pv/pvData.h> 17 #include <pv/bitSet.h> 21 namespace epics {
namespace pvCopy{
45 virtual void nextMasterPVField(epics::pvData::PVFieldPtr
const &pvField) = 0;
50 typedef std::tr1::shared_ptr<PVCopy>
PVCopyPtr;
55 struct CopyStructureNode;
66 public std::tr1::enable_shared_from_this<PVCopy>
69 POINTER_DEFINITIONS(
PVCopy);
77 static PVCopyPtr create(
78 epics::pvData::PVStructurePtr
const &pvMaster,
79 epics::pvData::PVStructurePtr
const &pvRequest,
80 std::string
const & structureName);
87 epics::pvData::PVStructurePtr getPVMaster();
92 void traverseMaster(PVCopyTraverseMasterCallbackPtr
const & callback);
96 epics::pvData::StructureConstPtr getStructure();
101 epics::pvData::PVStructurePtr createPVStructure();
107 std::size_t getCopyOffset(epics::pvData::PVFieldPtr
const &masterPVField);
114 std::size_t getCopyOffset(
115 epics::pvData::PVStructurePtr
const &masterPVStructure,
116 epics::pvData::PVFieldPtr
const &masterPVField);
121 epics::pvData::PVFieldPtr getMasterPVField(std::size_t structureOffset);
130 epics::pvData::PVStructurePtr
const ©PVStructure,
131 epics::pvData::BitSetPtr
const &bitSet);
139 bool updateCopySetBitSet(
140 epics::pvData::PVStructurePtr
const ©PVStructure,
141 epics::pvData::BitSetPtr
const &bitSet);
149 bool updateCopyFromBitSet(
150 epics::pvData::PVStructurePtr
const ©PVStructure,
151 epics::pvData::BitSetPtr
const &bitSet);
159 epics::pvData::PVStructurePtr
const ©PVStructure,
160 epics::pvData::BitSetPtr
const &bitSet);
169 epics::pvData::PVStructurePtr getOptions(std::size_t fieldOffset);
176 PVCopyPtr getPtrSelf()
178 return shared_from_this();
181 epics::pvData::PVStructurePtr pvMaster;
182 epics::pvData::StructureConstPtr structure;
183 CopyNodePtr headNode;
184 epics::pvData::PVStructurePtr cacheInitStructure;
185 epics::pvData::BitSetPtr ignorechangeBitSet;
188 CopyNodePtr
const &node,
189 PVCopyTraverseMasterCallbackPtr
const & callback);
190 void updateCopySetBitSet(
191 epics::pvData::PVFieldPtr
const &pvCopy,
192 epics::pvData::PVFieldPtr
const &pvMaster,
193 epics::pvData::BitSetPtr
const &bitSet);
194 void updateCopySetBitSet(
195 epics::pvData::PVFieldPtr
const &pvCopy,
196 CopyNodePtr
const &node,
197 epics::pvData::BitSetPtr
const &bitSet);
198 void updateCopyFromBitSet(
199 epics::pvData::PVFieldPtr
const &pvCopy,
200 CopyNodePtr
const &node,
201 epics::pvData::BitSetPtr
const &bitSet);
202 void updateMasterField(
203 CopyNodePtr
const & node,
204 epics::pvData::PVFieldPtr
const & pvCopy,
205 epics::pvData::PVFieldPtr
const &pvMaster,
206 epics::pvData::BitSetPtr
const &bitSet);
207 void updateMasterCheckBitSet(
208 epics::pvData::PVStructurePtr
const ©PVStructure,
209 epics::pvData::BitSetPtr
const &bitSet,
211 CopyNodePtr getCopyNode(std::size_t fieldOffset);
213 PVCopy(epics::pvData::PVStructurePtr
const &pvMaster);
214 bool init(epics::pvData::PVStructurePtr
const &pvRequest);
215 epics::pvData::StructureConstPtr createStructure(
216 epics::pvData::PVStructurePtr
const &pvMaster,
217 epics::pvData::PVStructurePtr
const &pvFromRequest);
218 CopyNodePtr createStructureNodes(
219 epics::pvData::PVStructurePtr
const &pvMasterStructure,
220 epics::pvData::PVStructurePtr
const &pvFromRequest,
221 epics::pvData::PVStructurePtr
const &pvFromField);
223 CopyNodePtr
const & node,
224 epics::pvData::PVStructurePtr
const & pvOptions,
225 epics::pvData::PVFieldPtr
const & pvMasterField);
226 void traverseMasterInitPlugin();
227 void traverseMasterInitPlugin(CopyNodePtr
const & node);
229 CopyNodePtr getCopyOffset(
230 CopyStructureNodePtr
const &structureNode,
231 epics::pvData::PVFieldPtr
const &masterPVField);
233 epics::pvData::PVStructurePtr
const & copyPVStructure,
234 epics::pvData::BitSetPtr
const & bitSet);
235 void setIgnore(CopyNodePtr
const & node);
236 CopyNodePtr getMasterNode(
237 CopyStructureNodePtr
const &structureNode,
238 std::size_t structureOffset);
240 std::string *builder,
241 CopyNodePtr
const &node,
std::tr1::shared_ptr< CopyStructureNode > CopyStructureNodePtr
std::tr1::shared_ptr< CopyNode > CopyNodePtr
std::tr1::shared_ptr< PVCopy > PVCopyPtr
Support for subset of fields in a pvStructure.
std::tr1::shared_ptr< PVCopyTraverseMasterCallback > PVCopyTraverseMasterCallbackPtr
virtual ~PVCopyTraverseMasterCallback()
Callback for traversing master structure.