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);
256 void unlistenClients();
258 PVRecordFieldPtr findPVRecordField(
259 PVRecordStructurePtr
const & pvrs,
260 epics::pvData::PVFieldPtr
const & pvField);
262 std::string recordName;
263 epics::pvData::PVStructurePtr pvStructure;
264 PVRecordStructurePtr pvRecordStructure;
265 std::list<PVListenerWPtr> pvListenerList;
266 std::list<PVRecordClientWPtr> clientList;
267 epics::pvData::Mutex mutex;
268 std::size_t depthGroupPut;
272 PVListenerWPtr pvListener;
274 epics::pvData::PVTimeStamp pvTimeStamp;
275 epics::pvData::TimeStamp timeStamp;
287 public virtual epics::pvData::PostHandler,
288 public std::tr1::enable_shared_from_this<PVRecordField>
300 epics::pvData::PVFieldPtr
const & pvField,
301 PVRecordStructurePtr
const &parent,
302 PVRecordPtr
const & pvRecord);
312 PVRecordStructurePtr getParent();
318 epics::pvData::PVFieldPtr getPVField();
323 std::string getFullFieldName();
328 std::string getFullName();
333 PVRecordPtr getPVRecord();
338 virtual void postPut();
341 virtual void postParent(PVRecordFieldPtr
const & subField);
342 virtual void postSubField();
344 bool addListener(PVListenerPtr
const & pvListener);
345 virtual void removeListener(PVListenerPtr
const & pvListener);
348 std::list<PVListenerWPtr> pvListenerList;
349 epics::pvData::PVField::weak_pointer pvField;
351 PVRecordStructureWPtr parent;
352 PVRecordWPtr pvRecord;
353 std::string fullName;
354 std::string fullFieldName;
375 epics::pvData::PVStructurePtr
const &pvStructure,
376 PVRecordStructurePtr
const &parent,
377 PVRecordPtr
const & pvRecord);
386 PVRecordFieldPtrArrayPtr getPVRecordFields();
391 epics::pvData::PVStructurePtr getPVStructure();
398 epics::pvData::PVStructure::weak_pointer pvStructure;
399 PVRecordFieldPtrArrayPtr pvRecordFields;
419 virtual void detach(PVRecordPtr
const & pvRecord) = 0;
443 virtual void dataPut(PVRecordFieldPtr
const & pvRecordField) = 0;
450 virtual void dataPut(
451 PVRecordStructurePtr
const & requested,
452 PVRecordFieldPtr
const & pvRecordField) = 0;
457 virtual void beginGroupPut(PVRecordPtr
const & pvRecord) = 0;
462 virtual void endGroupPut(PVRecordPtr
const & pvRecord) = 0;
467 virtual void unlisten(PVRecordPtr
const & pvRecord) = 0;
482 static PVDatabasePtr getMaster();
493 PVRecordPtr findRecord(std::string
const& recordName);
500 bool addRecord(PVRecordPtr
const & record);
507 bool removeRecord(PVRecordPtr
const & record);
512 epics::pvData::PVStringArrayPtr getRecordNames();
516 PVRecordWPtr removeFromMap(PVRecordPtr
const & record);
520 PVRecordMap recordMap;
521 epics::pvData::Mutex mutex;
522 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)