12 #include <epicsGuard.h> 15 #include <pv/pvData.h> 16 #include <pv/pvTimeStamp.h> 17 #include <pv/rpcService.h> 19 #define epicsExportSharedSymbols 27 using std::tr1::static_pointer_cast;
32 namespace epics {
namespace pvDatabase {
40 static bool firstTime =
true;
44 PVArrayPlugin::create();
45 PVTimestampPlugin::create();
46 PVDeadbandPlugin::create();
48 return pvDatabaseMaster;
51 PVDatabase::PVDatabase()
53 if(
DEBUG_LEVEL>0) cout <<
"PVDatabase::PVDatabase()\n";
56 PVDatabase::~PVDatabase()
58 if(
DEBUG_LEVEL>0) cout <<
"PVDatabase::~PVDatabase()\n";
61 void PVDatabase::lock() {
65 void PVDatabase::unlock() {
71 epicsGuard<epics::pvData::Mutex> guard(mutex);
72 PVRecordMap::iterator iter = recordMap.find(recordName);
73 if(iter!=recordMap.end()) {
74 return (*iter).second;
81 if(record->getTraceLevel()>0) {
82 cout <<
"PVDatabase::addRecord " << record->getRecordName() << endl;
84 epicsGuard<epics::pvData::Mutex> guard(mutex);
85 string recordName = record->getRecordName();
86 PVRecordMap::iterator iter = recordMap.find(recordName);
87 if(iter!=recordMap.end()) {
91 recordMap.insert(PVRecordMap::value_type(recordName,record));
97 epicsGuard<epics::pvData::Mutex> guard(mutex);
98 string recordName = record->getRecordName();
99 PVRecordMap::iterator iter = recordMap.find(recordName);
100 if(iter!=recordMap.end()) {
102 recordMap.erase(iter);
103 return pvRecord->shared_from_this();
110 if(record->getTraceLevel()>0) {
111 cout <<
"PVDatabase::removeRecord " << record->getRecordName() << endl;
113 epicsGuard<epics::pvData::Mutex> guard(mutex);
115 if(pvRecord.use_count()!=0) {
116 pvRecord.lock()->unlistenClients();
122 PVStringArrayPtr PVDatabase::getRecordNames()
124 epicsGuard<epics::pvData::Mutex> guard(mutex);
125 PVStringArrayPtr xxx;
126 PVStringArrayPtr pvStringArray = static_pointer_cast<PVStringArray>
127 (getPVDataCreate()->createPVScalarArray(pvString));
128 size_t len = recordMap.size();
129 shared_vector<string> names(len);
130 PVRecordMap::iterator iter;
132 for(iter = recordMap.begin(); iter!=recordMap.end(); ++iter) {
133 names[i++] = (*iter).first;
135 shared_vector<const string> temp(freeze(names));
136 pvStringArray->replace(temp);
137 return pvStringArray;
std::tr1::shared_ptr< PVDatabase > PVDatabasePtr
The interface for a database of PVRecords.
std::tr1::shared_ptr< PVRecord > PVRecordPtr
std::tr1::weak_ptr< PVRecord > PVRecordWPtr