12 #include <pv/pvData.h> 13 #include <pv/pvTimeStamp.h> 14 #include <pv/rpcService.h> 19 namespace epics {
namespace pvDatabase {
58 public std::tr1::enable_shared_from_this<PVRecord>
72 virtual bool init() {initPVRecord();
return true;}
88 virtual void process();
101 virtual void remove();
109 virtual epics::pvAccess::RPCServiceAsync::shared_pointer
getService(
110 epics::pvData::PVStructurePtr
const & pvRequest)
112 return epics::pvAccess::RPCServiceAsync::shared_pointer();
121 static PVRecordPtr create(
122 std::string
const & recordName,
123 epics::pvData::PVStructurePtr
const & pvStructure);
149 PVRecordFieldPtr findPVRecordField(
150 epics::pvData::PVFieldPtr
const & pvField);
182 void lockOtherRecord(PVRecordPtr
const & otherRecord);
191 bool addPVRecordClient(PVRecordClientPtr
const & pvRecordClient);
201 PVListenerPtr
const & pvListener,
208 void nextMasterPVField(epics::pvData::PVFieldPtr
const & pvField);
217 PVListenerPtr
const & pvListener,
224 void beginGroupPut();
246 std::string
const & recordName,
247 epics::pvData::PVStructurePtr
const & pvStructure);
255 PVRecordFieldPtr findPVRecordField(
256 PVRecordStructurePtr
const & pvrs,
257 epics::pvData::PVFieldPtr
const & pvField);
258 void notifyClients();
260 std::string recordName;
261 epics::pvData::PVStructurePtr pvStructure;
262 PVRecordStructurePtr pvRecordStructure;
263 std::list<PVListenerWPtr> pvListenerList;
264 std::list<PVRecordClientWPtr> clientList;
265 epics::pvData::Mutex mutex;
266 std::size_t depthGroupPut;
270 PVListenerWPtr pvListener;
272 epics::pvData::PVTimeStamp pvTimeStamp;
273 epics::pvData::TimeStamp timeStamp;
285 public virtual epics::pvData::PostHandler,
286 public std::tr1::enable_shared_from_this<PVRecordField>
298 epics::pvData::PVFieldPtr
const & pvField,
299 PVRecordStructurePtr
const &parent,
300 PVRecordPtr
const & pvRecord);
310 PVRecordStructurePtr getParent();
316 epics::pvData::PVFieldPtr getPVField();
321 std::string getFullFieldName();
326 std::string getFullName();
331 PVRecordPtr getPVRecord();
336 virtual void postPut();
339 virtual void postParent(PVRecordFieldPtr
const & subField);
340 virtual void postSubField();
342 bool addListener(PVListenerPtr
const & pvListener);
343 virtual void removeListener(PVListenerPtr
const & pvListener);
346 std::list<PVListenerWPtr> pvListenerList;
347 epics::pvData::PVField::weak_pointer pvField;
349 PVRecordStructureWPtr parent;
350 PVRecordWPtr pvRecord;
351 std::string fullName;
352 std::string fullFieldName;
373 epics::pvData::PVStructurePtr
const &pvStructure,
374 PVRecordStructurePtr
const &parent,
375 PVRecordPtr
const & pvRecord);
384 PVRecordFieldPtrArrayPtr getPVRecordFields();
389 epics::pvData::PVStructurePtr getPVStructure();
396 epics::pvData::PVStructure::weak_pointer pvStructure;
397 PVRecordFieldPtrArrayPtr pvRecordFields;
417 virtual void detach(PVRecordPtr
const & pvRecord) = 0;
441 virtual void dataPut(PVRecordFieldPtr
const & pvRecordField) = 0;
448 virtual void dataPut(
449 PVRecordStructurePtr
const & requested,
450 PVRecordFieldPtr
const & pvRecordField) = 0;
455 virtual void beginGroupPut(PVRecordPtr
const & pvRecord) = 0;
460 virtual void endGroupPut(PVRecordPtr
const & pvRecord) = 0;
465 virtual void unlisten(PVRecordPtr
const & pvRecord) = 0;
480 static PVDatabasePtr getMaster();
491 PVRecordPtr findRecord(std::string
const& recordName);
498 bool addRecord(PVRecordPtr
const & record);
504 bool removeRecord(PVRecordPtr
const & record);
509 epics::pvData::PVStringArrayPtr getRecordNames();
514 PVRecordMap recordMap;
515 epics::pvData::Mutex mutex;
516 static bool getMasterFirstCall;
virtual void start()
Optional method for derived class.
int getTraceLevel()
get trace level (0,1,2) means (nothing,lifetime,process)
std::tr1::shared_ptr< PVListener > PVListenerPtr
virtual epics::pvAccess::RPCServiceAsync::shared_pointer getService(epics::pvData::PVStructurePtr const &pvRequest)
Optional method for derived class.
std::tr1::shared_ptr< PVCopy > PVCopyPtr
Listener for PVRecord::message.
virtual ~PVRecordField()
Destructor.
virtual ~PVRecordStructure()
Destructor.
virtual ~PVListener()
Destructor.
std::tr1::shared_ptr< PVRecordClient > PVRecordClientPtr
std::map< std::string, PVRecordPtr > PVRecordMap
virtual ~PVRecordClient()
Destructor.
std::tr1::weak_ptr< PVDatabase > PVDatabaseWPtr
std::tr1::weak_ptr< PVListener > PVListenerWPtr
Base interface for a PVRecord.
std::tr1::shared_ptr< PVDatabase > PVDatabasePtr
virtual bool init()
Optional initialization method.
PVRecordStructurePtr getPVRecordStructure() const
Get the top level PVRecordStructure.
The interface for a database of PVRecords.
std::tr1::weak_ptr< PVRecordStructure > PVRecordStructureWPtr
Interface for a field of a record.
Callback for traversing master structure.
An interface implemented by code that accesses the record.
std::tr1::shared_ptr< PVRecord > PVRecordPtr
virtual void destroy()
DEPRECATED.
std::vector< PVRecordFieldPtr > PVRecordFieldPtrArray
std::tr1::shared_ptr< PVRecordStructure > PVRecordStructurePtr
std::tr1::weak_ptr< PVRecord > PVRecordWPtr
std::string getRecordName() const
Get the name of the record.
std::tr1::shared_ptr< PVRecordField > PVRecordFieldPtr
Interface for a field that is a structure.
std::tr1::shared_ptr< PVRecordFieldPtrArray > PVRecordFieldPtrArrayPtr
epics::pvData::PVStructurePtr getPVStructure() const
Get the top level PVStructure.
std::ostream & operator<<(std::ostream &o, const PVRecord &record)
std::tr1::weak_ptr< PVRecordClient > PVRecordClientWPtr
void setTraceLevel(int level)
set trace level (0,1,2) means (nothing,lifetime,process)