make compatible with latest pvDataCPP and pvAccessCPP; lots of work on queues.

This commit is contained in:
Marty Kraimer
2013-11-06 15:44:58 -05:00
parent 14b3640e9a
commit 006859120e
12 changed files with 78 additions and 554 deletions
-10
View File
@@ -168,14 +168,4 @@ bool PVDatabase::removeRecord(PVRecordPtr const & record)
}
}
String PVDatabase::getRequesterName()
{
static String name("masterDatabase");
return name;
}
void PVDatabase::message(String const & message,MessageType messageType)
{
}
}}
+1 -65
View File
@@ -46,7 +46,6 @@ typedef std::tr1::shared_ptr<PVDatabase> PVDatabasePtr;
* @author mrk
*/
class PVRecord :
public virtual epics::pvData::Requester,
public std::tr1::enable_shared_from_this<PVRecord>
{
public:
@@ -108,18 +107,6 @@ public:
*/
PVRecordFieldPtr findPVRecordField(
epics::pvData::PVFieldPtr const & pvField);
/**
* Add a requester to receive messages.
* @param requester The requester.
* @return <b>true</b> if requester was added.
*/
bool addRequester(epics::pvData::RequesterPtr const & requester);
/**
* Remove a requester.
* @param requester The requester.`
* @return <b>true</b> if requester was removed.
*/
bool removeRequester(epics::pvData::RequesterPtr const & requester);
/**
* Lock the record.
* Any code must lock while accessing a record.
@@ -183,31 +170,6 @@ public:
* Ends a group of puts.
*/
void endGroupPut();
/**
* Virtual method of <b>Requester</b>
* @return the name of the requester.
*/
epics::pvData::String getRequesterName() {return getRecordName();}
/**
* Can be called by implementation code.
* The message will be sent to every requester.
* @param message The message.
* @param messageType The severity of the message.
*/
virtual void message(
epics::pvData::String const & message,
epics::pvData::MessageType messageType);
/**
* Called for a field. It will call the previous method
* after adding field name.
* @param pvRecordField The field for which the message is associated.
* @param message The message.
* @param messageType The severity of the message.
*/
void message(
PVRecordFieldPtr const & pvRecordField,
epics::pvData::String const & message,
epics::pvData::MessageType messageType);
/**
* Calls the next method with indentLevel = 0.
* @param buf String Builder.
@@ -261,7 +223,6 @@ private:
PVRecordStructurePtr pvRecordStructure;
std::list<PVListenerPtr> pvListenerList;
std::list<PVRecordClientPtr> pvRecordClientList;
std::list<epics::pvData::RequesterPtr> requesterList;
epics::pvData::Mutex mutex;
std::size_t depthGroupPut;
int traceLevel;
@@ -341,16 +302,6 @@ public:
* It is called whenever the put method is called.
*/
virtual void postPut();
/**
* Called by implementation code.
* It calls PVRecord::message after prepending the full fieldname.
* @param message The message,
* @param messageType The message severity.
* @return
*/
virtual void message(
epics::pvData::String const & message,
epics::pvData::MessageType messageType);
protected:
PVRecordFieldPtr getPtrSelf()
{
@@ -495,7 +446,7 @@ public:
* The interface to a database of PVRecords.
* @author mrk
*/
class PVDatabase : virtual public epics::pvData::Requester {
class PVDatabase {
public:
POINTER_DEFINITIONS(PVDatabase);
/**
@@ -535,20 +486,6 @@ public:
* @return The names.
*/
epics::pvData::PVStringArrayPtr getRecordNames();
/**
* Virtual method of Requester.
* @return The name.
*/
virtual epics::pvData::String getRequesterName();
/**
* Virtual method of Requester.
* @param message The message.
* @param messageType The message severity.
* @return
*/
virtual void message(
epics::pvData::String const & message,
epics::pvData::MessageType messageType);
private:
PVDatabase();
void lock();
@@ -556,7 +493,6 @@ private:
PVRecordMap recordMap;
epics::pvData::Mutex mutex;
bool isDestroyed;
};
}}
-92
View File
@@ -56,7 +56,6 @@ void PVRecord::initPVRecord()
pvRecordStructure = PVRecordStructurePtr(
new PVRecordStructure(pvStructure,parent,getPtrSelf()));
pvRecordStructure->init();
pvStructure->setRequester(getPtrSelf());
}
void PVRecord::destroy()
@@ -72,16 +71,6 @@ void PVRecord::destroy()
}
isDestroyed = true;
std::list<RequesterPtr>::iterator requesterIter;
while(true) {
requesterIter = requesterList.begin();
if(requesterIter==requesterList.end()) break;
requesterList.erase(requesterIter);
unlock();
(*requesterIter)->message("record destroyed",fatalErrorMessage);
lock();
}
std::list<PVRecordClientPtr>::iterator clientIter;
while(true) {
clientIter = pvRecordClientList.begin();
@@ -122,60 +111,6 @@ PVRecordFieldPtr PVRecord::findPVRecordField(PVFieldPtr const & pvField)
return findPVRecordField(pvRecordStructure,pvField);
}
bool PVRecord::addRequester(epics::pvData::RequesterPtr const & requester)
{
if(traceLevel>2) {
cout << "PVRecord::addRequester() " << recordName << endl;
}
lock();
try {
if(isDestroyed) {
unlock();
return false;
}
std::list<RequesterPtr>::iterator iter;
for (iter = requesterList.begin(); iter!=requesterList.end(); iter++ ) {
if((*iter).get()==requester.get()) {
unlock();
return false;
}
}
requesterList.push_back(requester);
unlock();
return true;
} catch (...) {
unlock();
throw;
}
}
bool PVRecord::removeRequester(epics::pvData::RequesterPtr const & requester)
{
if(traceLevel>2) {
cout << "PVRecord::removeRequester() " << recordName << endl;
}
lock();
try {
if(isDestroyed) {
unlock();
return false;
}
std::list<RequesterPtr>::iterator iter;
for (iter = requesterList.begin(); iter!=requesterList.end(); iter++ ) {
if((*iter).get()==requester.get()) {
requesterList.erase(iter);
unlock();
return true;
}
}
unlock();
return false;
} catch (...) {
unlock();
throw;
}
}
PVRecordFieldPtr PVRecord::findPVRecordField(
PVRecordStructurePtr const & pvrs,
PVFieldPtr const & pvField)
@@ -408,28 +343,6 @@ void PVRecord::endGroupPut()
}
}
void PVRecord::message(String const & message,MessageType messageType)
{
if(isDestroyed) return;
if(requesterList.size()==0 ) {
String xxx(getMessageTypeName(messageType) + " " + message);
printf("%s\n",xxx.c_str());
return;
}
std::list<epics::pvData::RequesterPtr>::iterator iter;
for(iter = requesterList.begin(); iter != requesterList.end(); ++iter) {
(*iter)->message(message,messageType);
}
}
void PVRecord::message(
PVRecordFieldPtr const & pvRecordField,
String const & message,
MessageType messageType)
{
this->message(pvRecordField->getFullName() + " " + message,messageType);
}
void PVRecord::toString(StringBuilder buf)
{
toString(buf,0);
@@ -549,11 +462,6 @@ void PVRecordField::postSubField()
}
}
void PVRecordField::message(String const & message,MessageType messageType)
{
pvRecord->message(getPtrSelf(),message,messageType);
}
void PVRecordField::callListener()
{
std::list<PVListenerPtr>::iterator iter;