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);
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);
131 epics::pvData::PVStructurePtr
const ©PVStructure,
132 epics::pvData::BitSetPtr
const &bitSet);
140 bool updateCopySetBitSet(
141 epics::pvData::PVStructurePtr
const ©PVStructure,
142 epics::pvData::BitSetPtr
const &bitSet);
150 bool updateCopyFromBitSet(
151 epics::pvData::PVStructurePtr
const ©PVStructure,
152 epics::pvData::BitSetPtr
const &bitSet);
160 epics::pvData::PVStructurePtr
const ©PVStructure,
161 epics::pvData::BitSetPtr
const &bitSet);
170 epics::pvData::PVStructurePtr getOptions(std::size_t fieldOffset);
177 PVCopyPtr getPtrSelf()
179 return shared_from_this();
182 epics::pvData::PVStructurePtr pvMaster;
183 epics::pvData::StructureConstPtr structure;
184 CopyNodePtr headNode;
185 epics::pvData::PVStructurePtr cacheInitStructure;
186 epics::pvData::BitSetPtr ignorechangeBitSet;
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 ©PVStructure,
210 epics::pvData::BitSetPtr
const &bitSet,
212 CopyNodePtr getCopyNode(std::size_t fieldOffset);
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);
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);
230 CopyNodePtr getCopyOffset(
231 CopyStructureNodePtr
const &structureNode,
232 epics::pvData::PVFieldPtr
const &masterPVField);
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);
241 std::string *builder,
242 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.