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>
73 virtual bool init() {initPVRecord();
return true;}
89 virtual void process();
98 virtual void remove();
106 virtual epics::pvAccess::RPCServiceAsync::shared_pointer
getService(
107 epics::pvData::PVStructurePtr
const & pvRequest)
109 return epics::pvAccess::RPCServiceAsync::shared_pointer();
120 static PVRecordPtr create(
121 std::string
const & recordName,
122 epics::pvData::PVStructurePtr
const & pvStructure,
123 int asLevel = 0,
const std::string& asGroup =
"DEFAULT");
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();
270 std::string
const & recordName,
271 epics::pvData::PVStructurePtr
const & pvStructure,
272 int asLevel = 0,
const std::string& asGroup =
"DEFAULT");
281 void unlistenClients();
283 PVRecordFieldPtr findPVRecordField(
284 PVRecordStructurePtr
const & pvrs,
285 epics::pvData::PVFieldPtr
const & pvField);
287 std::string recordName;
288 epics::pvData::PVStructurePtr pvStructure;
289 PVRecordStructurePtr pvRecordStructure;
290 std::list<PVListenerWPtr> pvListenerList;
291 std::list<PVRecordClientWPtr> clientList;
292 epics::pvData::Mutex mutex;
293 std::size_t depthGroupPut;
297 PVListenerWPtr pvListener;
299 epics::pvData::PVTimeStamp pvTimeStamp;
300 epics::pvData::TimeStamp timeStamp;
315 public virtual epics::pvData::PostHandler,
316 public std::tr1::enable_shared_from_this<PVRecordField>
328 epics::pvData::PVFieldPtr
const & pvField,
329 PVRecordStructurePtr
const &parent,
330 PVRecordPtr
const & pvRecord);
340 PVRecordStructurePtr getParent();
346 epics::pvData::PVFieldPtr getPVField();
351 std::string getFullFieldName();
356 std::string getFullName();
361 PVRecordPtr getPVRecord();
366 virtual void postPut();
369 virtual void postParent(PVRecordFieldPtr
const & subField);
370 virtual void postSubField();
372 bool addListener(PVListenerPtr
const & pvListener);
373 virtual void removeListener(PVListenerPtr
const & pvListener);
376 std::list<PVListenerWPtr> pvListenerList;
377 epics::pvData::PVField::weak_pointer pvField;
379 PVRecordStructureWPtr master;
380 PVRecordStructureWPtr parent;
381 PVRecordWPtr pvRecord;
382 std::string fullName;
383 std::string fullFieldName;
404 epics::pvData::PVStructurePtr
const &pvStructure,
405 PVRecordStructurePtr
const &parent,
406 PVRecordPtr
const & pvRecord);
415 PVRecordFieldPtrArrayPtr getPVRecordFields();
420 epics::pvData::PVStructurePtr getPVStructure();
427 epics::pvData::PVStructure::weak_pointer pvStructure;
428 PVRecordFieldPtrArrayPtr pvRecordFields;
448 virtual void detach(PVRecordPtr
const & pvRecord) = 0;
472 virtual void dataPut(PVRecordFieldPtr
const & pvRecordField) = 0;
479 virtual void dataPut(
480 PVRecordStructurePtr
const & requested,
481 PVRecordFieldPtr
const & pvRecordField) = 0;
486 virtual void beginGroupPut(PVRecordPtr
const & pvRecord) = 0;
491 virtual void endGroupPut(PVRecordPtr
const & pvRecord) = 0;
496 virtual void unlisten(PVRecordPtr
const & pvRecord) = 0;
511 static PVDatabasePtr getMaster();
522 PVRecordPtr findRecord(std::string
const& recordName);
529 bool addRecord(PVRecordPtr
const & record);
536 bool removeRecord(PVRecordPtr
const & record);
541 epics::pvData::PVStringArrayPtr getRecordNames();
545 PVRecordWPtr removeFromMap(PVRecordPtr
const & record);
549 PVRecordMap recordMap;
550 epics::pvData::Mutex mutex;
551 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
std::string getAsGroup() const
Get the AS group name.
Listener for PVRecord::message.
virtual ~PVRecordField()
Destructor.
virtual ~PVRecordStructure()
Destructor.
void setAsLevel(int level)
set access security level.
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
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)
void setAsGroup(const std::string &group)
set access security group
int getAsLevel() const
Get the ASlevel.