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";
59 size_t len = recordMap.size();
60 shared_vector<string> names(len);
61 PVRecordMap::iterator iter;
63 for(iter = recordMap.begin(); iter!=recordMap.end(); ++iter) {
64 names[i++] = (*iter).first;
66 for(
size_t i=0; i<len; ++i) removeRecord(findRecord(names[i]));
69 void PVDatabase::lock() {
73 void PVDatabase::unlock() {
79 epicsGuard<epics::pvData::Mutex> guard(mutex);
80 PVRecordMap::iterator iter = recordMap.find(recordName);
81 if(iter!=recordMap.end()) {
82 return (*iter).second;
89 if(record->getTraceLevel()>0) {
90 cout <<
"PVDatabase::addRecord " << record->getRecordName() << endl;
92 epicsGuard<epics::pvData::Mutex> guard(mutex);
93 string recordName = record->getRecordName();
94 PVRecordMap::iterator iter = recordMap.find(recordName);
95 if(iter!=recordMap.end()) {
99 recordMap.insert(PVRecordMap::value_type(recordName,record));
105 if(record->getTraceLevel()>0) {
106 cout <<
"PVDatabase::removeRecord " << record->getRecordName() << endl;
108 epicsGuard<epics::pvData::Mutex> guard(mutex);
109 string recordName = record->getRecordName();
110 PVRecordMap::iterator iter = recordMap.find(recordName);
111 if(iter!=recordMap.end()) {
113 recordMap.erase(iter);
119 PVStringArrayPtr PVDatabase::getRecordNames()
121 epicsGuard<epics::pvData::Mutex> guard(mutex);
122 PVStringArrayPtr xxx;
123 PVStringArrayPtr pvStringArray = static_pointer_cast<PVStringArray>
124 (getPVDataCreate()->createPVScalarArray(pvString));
125 size_t len = recordMap.size();
126 shared_vector<string> names(len);
127 PVRecordMap::iterator iter;
129 for(iter = recordMap.begin(); iter!=recordMap.end(); ++iter) {
130 names[i++] = (*iter).first;
132 shared_vector<const string> temp(freeze(names));
133 pvStringArray->replace(temp);
134 return pvStringArray;
std::tr1::shared_ptr< PVDatabase > PVDatabasePtr
The interface for a database of PVRecords.
std::tr1::shared_ptr< PVRecord > PVRecordPtr