diff --git a/README.md b/README.md index a787a96..7acc022 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,20 @@ -Status -=========== +pvaClientCPP +============ -* The API should be almost ready for feature freeze for release 4.5 -* Everything defined in pvaClient.h should be ready but see below for remaining work. -* Everything defined in pvaClientMultiChannel.h is ready but see below for remaining work. +pvaClient is a synchronous client interface to pvAccess, +which is callback based. +pvaClient is thus easier to use than pvAccess itself. + +Building +-------- + +If a proper RELEASE.local file exists one directory level above pvaClientCPP +then just type: + + make + +If RELEASE.local does not exists the look at configure/RELEASE +for directions for how to build. Examples ------------ @@ -15,6 +26,14 @@ For example: /home/epicsv4/pvaClientTestCPP/database/iocBoot/exampleDatabase mrk> ../../bin/linux-x86_64/exampleDatabase st.cmd +Status +------ + +* The API should ready for feature freeze for release 4.5 +* Everything defined in pvaClient.h should be ready but see below for remaining work. +* Everything defined in pvaClientMultiChannel.h is ready but see below for remaining work. + + pvaClientChannel --------------- diff --git a/configure/RELEASE b/configure/RELEASE index 158037f..d859e8c 100644 --- a/configure/RELEASE +++ b/configure/RELEASE @@ -16,13 +16,15 @@ # EPICS V4 Developers: Do not edit the locations in this file! # -# Create a file RELEASE.local pointing to your PVASRV, PVACCESS, -# PVDATA, PVCOMMON and EPICS_BASE build directories, e.g. -# PVASRV = /path/to/epics/pvaSrvCPP -# PVACCESS = /path/to/epics/pvAccessCPP -# PVDATA = /path/to/epics/pvDataCPP -# PVCOMMON = /path/to/epics/pvCommonCPP -# EPICS_BASE = /path/to/epics/base +# A RELEASE.local must exist that has the following definitions +# EPICS_BASE=/home/install/epics/base +# EPICS4_DIR=/home/epicsv4 +# PVCOMMON=${EPICS4_DIR}/pvCommonCPP +# PVDATA=${EPICS4_DIR}/pvDataCPP +# NORMATIVETYPES=${EPICSV4}/normativeTypesCPP +# PVACCESS=${EPICS4_DIR}/pvAccessCPP +#Either create a RELEASE.local one level above the TOP for this module +#OR copy ExampleRELEASE.local to RELEASE.local and edit it. -include $(TOP)/../RELEASE.local -include $(TOP)/configure/RELEASE.local diff --git a/example/src/examplePvaClientNTMulti.cpp b/example/src/examplePvaClientNTMulti.cpp index be72505..5841875 100644 --- a/example/src/examplePvaClientNTMulti.cpp +++ b/example/src/examplePvaClientNTMulti.cpp @@ -103,12 +103,12 @@ static void example( multiPut->put(); multiGet->get(); PvaClientNTMultiDataPtr multiData = multiGet->getData(); - PVStructurePtr pvStructure = multiData->getPVTop(); + PVStructurePtr pvStructure = multiData->getNTMultiChannel()->getPVStructure(); cout << "pvStructure\n" << pvStructure << endl; bool result = multiMonitor->waitEvent(.1); while(result) { multiData = multiMonitor->getData(); - pvStructure = multiData->getPVTop(); + pvStructure = multiData->getNTMultiChannel()->getPVStructure(); cout << "monitor pvStructure\n" << pvStructure << endl; result = multiMonitor->poll(); } diff --git a/src/pvaClientChannel.cpp b/src/pvaClientChannel.cpp index c5c74ae..3350fc3 100644 --- a/src/pvaClientChannel.cpp +++ b/src/pvaClientChannel.cpp @@ -11,7 +11,6 @@ #define epicsExportSharedSymbols #include -#include #include #include #include @@ -247,9 +246,9 @@ void PvaClientChannel::connect(double timeout) issueConnect(); Status status = waitConnect(timeout); if(status.isOK()) return; - stringstream ss; - ss << "channel " << getChannelName() << " PvaClientChannel::connect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + getChannelName() + + " PvaClientChannel::connect " + status.getMessage(); + throw std::runtime_error(message); } void PvaClientChannel::issueConnect() @@ -302,10 +301,10 @@ PvaClientProcessPtr PvaClientChannel::createProcess(string const & request) { PVStructurePtr pvRequest = createRequest->createRequest(request); if(!pvRequest) { - stringstream ss; - ss << "channel " << getChannelName(); - ss << " PvaClientChannel::createProcess invalid pvRequest: " + createRequest->getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + getChannelName() + + " PvaClientChannel::createProcess invalid pvRequest: " + + createRequest->getMessage(); + throw std::runtime_error(message); } return createProcess(pvRequest); } @@ -339,10 +338,10 @@ PvaClientGetPtr PvaClientChannel::createGet(string const & request) { PVStructurePtr pvRequest = createRequest->createRequest(request); if(!pvRequest) { - stringstream ss; - ss << "channel " << getChannelName(); - ss << " PvaClientChannel::createGet invalid pvRequest: " + createRequest->getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + getChannelName() + + " PvaClientChannel::createGet invalid pvRequest: " + + createRequest->getMessage(); + throw std::runtime_error(message); } return createGet(pvRequest); } @@ -377,10 +376,10 @@ PvaClientPutPtr PvaClientChannel::createPut(string const & request) { PVStructurePtr pvRequest = createRequest->createRequest(request); if(!pvRequest) { - stringstream ss; - ss << "channel " << getChannelName(); - ss << " PvaClientChannel::createPut invalid pvRequest: " + createRequest->getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + getChannelName() + + " PvaClientChannel::createPut invalid pvRequest: " + + createRequest->getMessage(); + throw std::runtime_error(message); } return createPut(pvRequest); } @@ -402,10 +401,10 @@ PvaClientPutGetPtr PvaClientChannel::createPutGet(string const & request) { PVStructurePtr pvRequest = createRequest->createRequest(request); if(!pvRequest) { - stringstream ss; - ss << "channel " << getChannelName(); - ss << " PvaClientChannel::createPutGet invalid pvRequest: " + createRequest->getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + getChannelName() + + " PvaClientChannel::createPutGet invalid pvRequest: " + + createRequest->getMessage(); + throw std::runtime_error(message); } return createPutGet(pvRequest); } @@ -428,10 +427,10 @@ PvaClientArrayPtr PvaClientChannel::createArray(string const & request) { PVStructurePtr pvRequest = createRequest->createRequest(request); if(!pvRequest) { - stringstream ss; - ss << "channel " << getChannelName(); - ss << " PvaClientChannel::createArray invalid pvRequest: " + createRequest->getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + getChannelName() + + " PvaClientChannel::createArray invalid pvRequest: " + + createRequest->getMessage(); + throw std::runtime_error(message); } return createArray(pvRequest); } @@ -477,10 +476,10 @@ PvaClientMonitorPtr PvaClientChannel::createMonitor(string const & request) { PVStructurePtr pvRequest = createRequest->createRequest(request); if(!pvRequest) { - stringstream ss; - ss << "channel " << getChannelName(); - ss << " PvaClientChannel::createMonitor invalid pvRequest: " + createRequest->getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + getChannelName() + + " PvaClientChannel::createMonitor invalid pvRequest: " + + createRequest->getMessage(); + throw std::runtime_error(message); } return createMonitor(pvRequest); } diff --git a/src/pvaClientGet.cpp b/src/pvaClientGet.cpp index ccaadbd..24ec4ea 100644 --- a/src/pvaClientGet.cpp +++ b/src/pvaClientGet.cpp @@ -10,7 +10,6 @@ */ #define epicsExportSharedSymbols -#include #include #include @@ -136,18 +135,18 @@ void PvaClientGet::connect() issueConnect(); Status status = waitConnect(); if(status.isOK()) return; - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientGet::connect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientGet::connect " + status.getMessage(); + throw std::runtime_error(message); } void PvaClientGet::issueConnect() { if(isDestroyed) throw std::runtime_error("pvaClientGet was destroyed"); if(connectState!=connectIdle) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " pvaClientGet already connected "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " pvaClientGet already connected "; + throw std::runtime_error(message); } getRequester = ChannelGetRequester::shared_pointer(new ChannelGetRequesterImpl(this)); connectState = connectActive; @@ -159,9 +158,9 @@ Status PvaClientGet::waitConnect() if(isDestroyed) throw std::runtime_error("pvaClientGet was destroyed"); if(connectState==connected) return channelGetConnectStatus; if(connectState!=connectActive) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " pvaClientGet illegal connect state "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " pvaClientGet illegal connect state "; + throw std::runtime_error(message); } waitForConnect.wait(); connectState = channelGetConnectStatus.isOK() ? connected : connectIdle; @@ -174,9 +173,9 @@ void PvaClientGet::get() issueGet(); Status status = waitGet(); if(status.isOK()) return; - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientGet::get " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientGet::get " + status.getMessage(); + throw std::runtime_error(message); } void PvaClientGet::issueGet() @@ -184,9 +183,9 @@ void PvaClientGet::issueGet() if(isDestroyed) throw std::runtime_error("pvaClientGet was destroyed"); if(connectState==connectIdle) connect(); if(getState!=getIdle) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientGet::issueGet get aleady active "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientGet::issueGet get aleady active "; + throw std::runtime_error(message); } getState = getActive; channelGet->get(); @@ -196,9 +195,9 @@ Status PvaClientGet::waitGet() { if(isDestroyed) throw std::runtime_error("pvaClientGet was destroyed"); if(getState!=getActive){ - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientGet::waitGet llegal get state"; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientGet::waitGet llegal get state"; + throw std::runtime_error(message); } waitForGet.wait(); getState = getIdle; diff --git a/src/pvaClientMonitor.cpp b/src/pvaClientMonitor.cpp index 98ff92e..5fd163b 100644 --- a/src/pvaClientMonitor.cpp +++ b/src/pvaClientMonitor.cpp @@ -135,18 +135,18 @@ void PvaClientMonitor::connect() issueConnect(); Status status = waitConnect(); if(status.isOK()) return; - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientMonitor::connect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientMonitor::connect " + status.getMessage(); + throw std::runtime_error(message); } void PvaClientMonitor::issueConnect() { if(isDestroyed) throw std::runtime_error("pvaClientMonitor was destroyed"); if(connectState!=connectIdle) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " pvaClientMonitor already connected "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " pvaClientMonitor already connected "; + throw std::runtime_error(message); } monitorRequester = ChannelMonitorRequester::shared_pointer(new ChannelMonitorRequester(this)); connectState = connectActive; @@ -157,9 +157,9 @@ Status PvaClientMonitor::waitConnect() { if(isDestroyed) throw std::runtime_error("pvaClientMonitor was destroyed"); if(connectState!=connectActive) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " pvaClientMonitor illegal connect state "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " pvaClientMonitor illegal connect state "; + throw std::runtime_error(message); } waitForConnect.wait(); connectState = connectStatus.isOK() ? connected : connectIdle; diff --git a/src/pvaClientMultiChannel.cpp b/src/pvaClientMultiChannel.cpp index 228dc37..5db125c 100644 --- a/src/pvaClientMultiChannel.cpp +++ b/src/pvaClientMultiChannel.cpp @@ -11,7 +11,6 @@ #define epicsExportSharedSymbols #include -#include #include #include #include @@ -34,9 +33,8 @@ PvaClientMultiChannelPtr PvaClientMultiChannel::create( string const & providerName, size_t maxNotConnected) { - PvaClientMultiChannelPtr channel( + return PvaClientMultiChannelPtr( new PvaClientMultiChannel(pvaClient,channelNames,providerName,maxNotConnected)); - return channel; } @@ -199,9 +197,9 @@ PvaClientNTMultiGetPtr PvaClientMultiChannel::createNTGet(std::string const &req checkConnected(); PVStructurePtr pvRequest = createRequest->createRequest(request); if(!pvRequest) { - stringstream ss; - ss << " PvaClientMultiChannel::createNTGet invalid pvRequest: " + createRequest->getMessage(); - throw std::runtime_error(ss.str()); + string message = " PvaClientMultiChannel::createNTGet invalid pvRequest: " + + createRequest->getMessage(); + throw std::runtime_error(message); } return PvaClientNTMultiGet::create(getPtrSelf(), pvaClientChannelArray,pvRequest); } @@ -217,9 +215,9 @@ PvaClientNTMultiMonitorPtr PvaClientMultiChannel::createNTMonitor(std::string co checkConnected(); PVStructurePtr pvRequest = createRequest->createRequest(request); if(!pvRequest) { - stringstream ss; - ss << " PvaClientMultiChannel::createNTMonitor invalid pvRequest: " + createRequest->getMessage(); - throw std::runtime_error(ss.str()); + string message = " PvaClientMultiChannel::createNTMonitor invalid pvRequest: " + + createRequest->getMessage(); + throw std::runtime_error(message); } return PvaClientNTMultiMonitor::create(getPtrSelf(), pvaClientChannelArray,pvRequest); } diff --git a/src/pvaClientMultiChannel.h b/src/pvaClientMultiChannel.h index 86ae925..a250490 100644 --- a/src/pvaClientMultiChannel.h +++ b/src/pvaClientMultiChannel.h @@ -417,10 +417,11 @@ private: PvaClientMultiChannelPtr pvaClientMultiChannel; PvaClientChannelArray pvaClientChannelArray; + epics::pvData::PVStructurePtr pvRequest; size_t nchannel; epics::pvData::Mutex mutex; - epics::pvData::PVStructurePtr pvRequest; + PvaClientNTMultiDataPtr pvaClientNTMultiData; std::vector pvaClientGet; bool isConnected; @@ -550,10 +551,9 @@ private: PvaClientMultiChannelPtr pvaClientMultiChannel; PvaClientChannelArray pvaClientChannelArray; + epics::pvData::PVStructurePtr pvRequest; size_t nchannel; epics::pvData::Mutex mutex; - - epics::pvData::PVStructurePtr pvRequest; PvaClientNTMultiDataPtr pvaClientNTMultiData; std::vector pvaClientMonitor; bool isConnected; @@ -612,12 +612,6 @@ public: * @return The value. */ epics::nt::NTMultiChannelPtr getNTMultiChannel(); - - /** - * Get the top level structure. - * @return The top level structure. - */ - epics::pvData::PVStructurePtr getPVTop(); /** Get the shared pointer to self. * @return The shared pointer. */ @@ -632,15 +626,12 @@ private: PvaClientMultiChannelPtr const &pvaNTMultiChannel, PvaClientChannelArray const &pvaClientChannelArray, epics::pvData::PVStructurePtr const & pvRequest); - static epics::pvData::PVStructurePtr createRequest(std::string const & request); void setStructure(epics::pvData::StructureConstPtr const & structure,size_t index); void setPVStructure( epics::pvData::PVStructurePtr const &pvStructure,size_t index); PvaClientMultiChannelPtr pvaClientMultiChannel; PvaClientChannelArray pvaClientChannelArray; - epics::pvData::PVStructurePtr pvRequest; - epics::pvData::UnionConstPtr u; size_t nchannel; epics::pvData::Mutex mutex; @@ -649,8 +640,7 @@ private: bool gotTimeStamp; bool isDestroyed; - epics::nt::NTMultiChannelPtr ntMultiChannel; - epics::pvData::PVStructurePtr pvTop; + epics::pvData::StructureConstPtr ntMultiChannelStructure; epics::pvData::shared_vector unionValue; epics::pvData::shared_vector severity; epics::pvData::shared_vector status; @@ -659,7 +649,6 @@ private: epics::pvData::shared_vector nanoseconds; epics::pvData::shared_vector userTag; epics::pvData::Alarm alarm; - epics::pvData::PVAlarm pvAlarm; epics::pvData::TimeStamp timeStamp;; epics::pvData::PVTimeStamp pvTimeStamp; friend class PvaClientNTMultiGet; diff --git a/src/pvaClientMultiGetDouble.cpp b/src/pvaClientMultiGetDouble.cpp index 3697337..289a11d 100644 --- a/src/pvaClientMultiGetDouble.cpp +++ b/src/pvaClientMultiGetDouble.cpp @@ -82,10 +82,9 @@ void PvaClientMultiGetDouble::connect() if(isConnected[i]) { Status status = pvaClientGet[i]->waitConnect(); if(status.isOK()) continue; - stringstream ss; - string channelName = pvaClientChannelArray[i]->getChannelName(); - ss << "channel " << channelName << " PvaChannelGet::waitConnect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + pvaClientChannelArray[i]->getChannelName() + + " PvaChannelGet::waitConnect " + status.getMessage(); + throw std::runtime_error(message); } } isGetConnected = true; @@ -107,10 +106,9 @@ epics::pvData::shared_vector PvaClientMultiGetDouble::get() if(isConnected[i]) { Status status = pvaClientGet[i]->waitGet(); if(status.isOK()) continue; - stringstream ss; - string channelName = pvaClientChannelArray[i]->getChannelName(); - ss << "channel " << channelName << " PvaChannelGet::waitConnect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + pvaClientChannelArray[i]->getChannelName() + + " PvaChannelGet::waitGet " + status.getMessage(); + throw std::runtime_error(message); } } diff --git a/src/pvaClientMultiMonitorDouble.cpp b/src/pvaClientMultiMonitorDouble.cpp index c0efd28..ff5a77f 100644 --- a/src/pvaClientMultiMonitorDouble.cpp +++ b/src/pvaClientMultiMonitorDouble.cpp @@ -83,10 +83,9 @@ void PvaClientMultiMonitorDouble::connect() if(isConnected[i]) { Status status = pvaClientMonitor[i]->waitConnect(); if(status.isOK()) continue; - stringstream ss; - string channelName = pvaClientChannelArray[i]->getChannelName(); - ss << "channel " << channelName << " PvaChannelGet::waitConnect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + pvaClientChannelArray[i]->getChannelName() + + " PvaChannelMonitor::waitConnect " + status.getMessage(); + throw std::runtime_error(message); } } for(size_t i=0; iwaitConnect(); if(status.isOK()) continue; - stringstream ss; - string channelName = pvaClientChannelArray[i]->getChannelName(); - ss << "channel " << channelName << " PvaChannelPut::waitConnect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + pvaClientChannelArray[i]->getChannelName() + + " PvaChannelPut::waitConnect " + status.getMessage(); + throw std::runtime_error(message); } } isPutConnected = true; @@ -110,10 +109,9 @@ void PvaClientMultiPutDouble::put(epics::pvData::shared_vector const &da if(isConnected[i]) { Status status = pvaClientPut[i]->waitPut(); if(status.isOK()) continue; - stringstream ss; - string channelName = pvaClientChannelArray[i]->getChannelName(); - ss << "channel " << channelName << " PvaChannelPut::waitConnect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + pvaClientChannelArray[i]->getChannelName() + + " PvaChannelPut::waitPut " + status.getMessage(); + throw std::runtime_error(message); } } } diff --git a/src/pvaClientNTMultiData.cpp b/src/pvaClientNTMultiData.cpp index 57c571b..84e27d9 100644 --- a/src/pvaClientNTMultiData.cpp +++ b/src/pvaClientNTMultiData.cpp @@ -11,8 +11,6 @@ #define epicsExportSharedSymbols #include -#include -#include #include using std::tr1::static_pointer_cast; @@ -23,10 +21,7 @@ using namespace std; namespace epics { namespace pvaClient { -static ConvertPtr convert = getConvert(); -static FieldCreatePtr fieldCreate = getFieldCreate(); static PVDataCreatePtr pvDataCreate = getPVDataCreate(); -static StandardFieldPtr standardField = getStandardField(); PvaClientNTMultiDataPtr PvaClientNTMultiData::create( @@ -35,9 +30,8 @@ PvaClientNTMultiDataPtr PvaClientNTMultiData::create( PvaClientChannelArray const &pvaClientChannelArray, PVStructurePtr const & pvRequest) { - PvaClientNTMultiDataPtr pvaClientNTMultiData( + return PvaClientNTMultiDataPtr( new PvaClientNTMultiData(u,pvaMultiChannel,pvaClientChannelArray,pvRequest)); - return pvaClientNTMultiData; } PvaClientNTMultiData::PvaClientNTMultiData( @@ -47,8 +41,6 @@ PvaClientNTMultiData::PvaClientNTMultiData( epics::pvData::PVStructurePtr const & pvRequest) : pvaClientMultiChannel(pvaClientMultiChannel), pvaClientChannelArray(pvaClientChannelArray), - pvRequest(pvRequest), - u(u), nchannel(pvaClientChannelArray.size()), gotAlarm(false), gotTimeStamp(false), @@ -88,8 +80,7 @@ PvaClientNTMultiData::PvaClientNTMultiData( nanoseconds.resize(nchannel); userTag.resize(nchannel); } - ntMultiChannel = builder->create(); - ntMultiChannel->getChannelName()->replace(pvaClientMultiChannel->getChannelNames()); + ntMultiChannelStructure = builder->createStructure(); } @@ -180,6 +171,19 @@ void PvaClientNTMultiData::endDeltaTime() } } +} + +TimeStamp PvaClientNTMultiData::getTimeStamp() +{ + pvTimeStamp.get(timeStamp); + return timeStamp; +} + +NTMultiChannelPtr PvaClientNTMultiData::getNTMultiChannel() +{ + PVStructurePtr pvStructure = pvDataCreate->createPVStructure(ntMultiChannelStructure); + NTMultiChannelPtr ntMultiChannel = NTMultiChannel::wrap(pvStructure); + ntMultiChannel->getChannelName()->replace(pvaClientMultiChannel->getChannelNames()); shared_vector val(nchannel); for(size_t i=0; igetValue()->replace(freeze(val)); @@ -211,22 +215,7 @@ void PvaClientNTMultiData::endDeltaTime() for(size_t i=0; igetUserTag()->replace(freeze(tag)); } -} - -TimeStamp PvaClientNTMultiData::getTimeStamp() -{ - pvTimeStamp.get(timeStamp); - return timeStamp; -} - -NTMultiChannelPtr PvaClientNTMultiData::getNTMultiChannel() -{ return ntMultiChannel; } -PVStructurePtr PvaClientNTMultiData::getPVTop() -{ - return ntMultiChannel->getPVStructure(); -} - }} diff --git a/src/pvaClientNTMultiGet.cpp b/src/pvaClientNTMultiGet.cpp index c541096..61d55c2 100644 --- a/src/pvaClientNTMultiGet.cpp +++ b/src/pvaClientNTMultiGet.cpp @@ -47,8 +47,8 @@ PvaClientNTMultiGet::PvaClientNTMultiGet( epics::pvData::PVStructurePtr const & pvRequest) : pvaClientMultiChannel(pvaClientMultiChannel), pvaClientChannelArray(pvaClientChannelArray), - nchannel(pvaClientChannelArray.size()), pvRequest(pvRequest), + nchannel(pvaClientChannelArray.size()), pvaClientNTMultiData( PvaClientNTMultiData::create( u, @@ -94,10 +94,9 @@ void PvaClientNTMultiGet::connect() if(isConnected[i]) { Status status = pvaClientGet[i]->waitConnect(); if(status.isOK()) continue; - stringstream ss; - string channelName = pvaClientChannelArray[i]->getChannelName(); - ss << "channel " << channelName << " PvaChannelGet::waitConnect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") +pvaClientChannelArray[i]->getChannelName() + + " PvaChannelGet::waitConnect " + status.getMessage(); + throw std::runtime_error(message); } } this->isConnected = true; @@ -119,10 +118,9 @@ void PvaClientNTMultiGet::get() if(isConnected[i]) { Status status = pvaClientGet[i]->waitGet(); if(status.isOK()) continue; - stringstream ss; - string channelName = pvaClientChannelArray[i]->getChannelName(); - ss << "channel " << channelName << " PvaChannelGet::waitConnect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") +pvaClientChannelArray[i]->getChannelName() + + " PvaChannelGet::waitGet " + status.getMessage(); + throw std::runtime_error(message); } } pvaClientNTMultiData->startDeltaTime(); diff --git a/src/pvaClientNTMultiMonitor.cpp b/src/pvaClientNTMultiMonitor.cpp index 5fd1709..9e2052e 100644 --- a/src/pvaClientNTMultiMonitor.cpp +++ b/src/pvaClientNTMultiMonitor.cpp @@ -24,11 +24,7 @@ using namespace std; namespace epics { namespace pvaClient { -static ConvertPtr convert = getConvert(); static FieldCreatePtr fieldCreate = getFieldCreate(); -static PVDataCreatePtr pvDataCreate = getPVDataCreate(); -static StandardFieldPtr standardField = getStandardField(); - PvaClientNTMultiMonitorPtr PvaClientNTMultiMonitor::create( PvaClientMultiChannelPtr const &pvaMultiChannel, @@ -48,8 +44,8 @@ PvaClientNTMultiMonitor::PvaClientNTMultiMonitor( PVStructurePtr const & pvRequest) : pvaClientMultiChannel(pvaClientMultiChannel), pvaClientChannelArray(pvaClientChannelArray), - nchannel(pvaClientChannelArray.size()), pvRequest(pvRequest), + nchannel(pvaClientChannelArray.size()), pvaClientNTMultiData( PvaClientNTMultiData::create( u, @@ -97,10 +93,9 @@ void PvaClientNTMultiMonitor::connect() if(isConnected[i]) { Status status = pvaClientMonitor[i]->waitConnect(); if(status.isOK()) continue; - stringstream ss; - string channelName = pvaClientChannelArray[i]->getChannelName(); - ss << "channel " << channelName << " PvaChannelMonitor::waitConnect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") +pvaClientChannelArray[i]->getChannelName() + + " PvaChannelMonitor::waitConnect " + status.getMessage(); + throw std::runtime_error(message); } } for(size_t i=0; iwaitConnect(); if(status.isOK()) continue; - stringstream ss; - string channelName = pvaClientChannelArray[i]->getChannelName(); - ss << "channel " << channelName << " PvaChannelPut::waitConnect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") +pvaClientChannelArray[i]->getChannelName() + + " PvaChannelPut::waitConnect " + status.getMessage(); + throw std::runtime_error(message); } } for(size_t i=0; iwaitGet(); if(status.isOK()) continue; - stringstream ss; - string channelName = pvaClientChannelArray[i]->getChannelName(); - ss << "channel " << channelName << " PvaChannelPut::waitGet " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") +pvaClientChannelArray[i]->getChannelName() + + " PvaChannelPut::waitGet " + status.getMessage(); + throw std::runtime_error(message); } } for(size_t i=0; iwaitPut(); if(status.isOK()) continue; - stringstream ss; - string channelName = pvaClientChannelArray[i]->getChannelName(); - ss << "channel " << channelName << " PvaChannelPut::waitConnect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") +pvaClientChannelArray[i]->getChannelName() + + " PvaChannelPut::waitPut " + status.getMessage(); + throw std::runtime_error(message); } } } diff --git a/src/pvaClientProcess.cpp b/src/pvaClientProcess.cpp index e9e8e80..eaa516e 100644 --- a/src/pvaClientProcess.cpp +++ b/src/pvaClientProcess.cpp @@ -10,7 +10,6 @@ */ #define epicsExportSharedSymbols -#include #include #include @@ -115,18 +114,18 @@ void PvaClientProcess::connect() issueConnect(); Status status = waitConnect(); if(status.isOK()) return; - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientProcess::connect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientProcess::connect " + status.getMessage(); + throw std::runtime_error(message); } void PvaClientProcess::issueConnect() { if(isDestroyed) throw std::runtime_error("pvaClientProcess was destroyed"); if(connectState!=connectIdle) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " pvaClientProcess already connected "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " pvaClientProcess already connected "; + throw std::runtime_error(message); } processRequester = ChannelProcessRequester::shared_pointer(new ChannelProcessRequesterImpl(this)); connectState = connectActive; @@ -137,9 +136,9 @@ Status PvaClientProcess::waitConnect() { if(isDestroyed) throw std::runtime_error("pvaClientProcess was destroyed"); if(connectState!=connectActive) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " pvaClientProcess illegal connect state "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " pvaClientProcess illegal connect state "; + throw std::runtime_error(message); } waitForConnect.wait(); connectState = channelProcessConnectStatus.isOK() ? connected : connectIdle; @@ -152,9 +151,9 @@ void PvaClientProcess::process() issueProcess(); Status status = waitProcess(); if(status.isOK()) return; - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientProcess::process " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientProcess::process" + status.getMessage(); + throw std::runtime_error(message); } void PvaClientProcess::issueProcess() @@ -162,9 +161,9 @@ void PvaClientProcess::issueProcess() if(isDestroyed) throw std::runtime_error("pvaClientProcess was destroyed"); if(connectState==connectIdle) connect(); if(processState!=processIdle) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientProcess::issueProcess process aleady active "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientProcess::issueProcess process aleady active "; + throw std::runtime_error(message); } processState = processActive; channelProcess->process(); @@ -174,9 +173,9 @@ Status PvaClientProcess::waitProcess() { if(isDestroyed) throw std::runtime_error("pvaClientProcess was destroyed"); if(processState!=processActive){ - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientProcess::waitProcess llegal process state"; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientProcess::waitProcess llegal process state"; + throw std::runtime_error(message); } waitForProcess.wait(); processState = processIdle; diff --git a/src/pvaClientPut.cpp b/src/pvaClientPut.cpp index e674df5..8362d11 100644 --- a/src/pvaClientPut.cpp +++ b/src/pvaClientPut.cpp @@ -10,7 +10,6 @@ */ #define epicsExportSharedSymbols -#include #include #include @@ -153,18 +152,18 @@ void PvaClientPut::connect() issueConnect(); Status status = waitConnect(); if(status.isOK()) return; - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPut::connect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPut::connect " + status.getMessage(); + throw std::runtime_error(message); } void PvaClientPut::issueConnect() { if(isDestroyed) throw std::runtime_error("pvaClientPut was destroyed"); if(connectState!=connectIdle) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " pvaClientPut already connected "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " pvaClientPut already connected "; + throw std::runtime_error(message); } putRequester = ChannelPutRequester::shared_pointer(new ChannelPutRequesterImpl(this)); connectState = connectActive; @@ -175,9 +174,9 @@ Status PvaClientPut::waitConnect() { if(isDestroyed) throw std::runtime_error("pvaClientPut was destroyed"); if(connectState!=connectActive) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " pvaClientPut illegal connect state "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " pvaClientPut illegal connect state "; + throw std::runtime_error(message); } waitForConnect.wait(); connectState = channelPutConnectStatus.isOK() ? connected : connectIdle; @@ -190,9 +189,9 @@ void PvaClientPut::get() issueGet(); Status status = waitGet(); if(status.isOK()) return; - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPut::get " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPut::get " + status.getMessage(); + throw std::runtime_error(message); } void PvaClientPut::issueGet() @@ -200,9 +199,9 @@ void PvaClientPut::issueGet() if(isDestroyed) throw std::runtime_error("pvaClientPut was destroyed"); if(connectState==connectIdle) connect(); if(putState!=putIdle) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPut::issueGet get or put aleady active "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + "PvaClientPut::issueGet get or put aleady active "; + throw std::runtime_error(message); } putState = getActive; pvaClientData->getChangedBitSet()->clear(); @@ -213,9 +212,9 @@ Status PvaClientPut::waitGet() { if(isDestroyed) throw std::runtime_error("pvaClientPut was destroyed"); if(putState!=getActive){ - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPut::waitGet llegal put state"; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPut::waitGet llegal put state"; + throw std::runtime_error(message); } waitForGetPut.wait(); putState = putIdle; @@ -228,9 +227,9 @@ void PvaClientPut::put() issuePut(); Status status = waitPut(); if(status.isOK()) return; - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPut::put " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPut::put " + status.getMessage(); + throw std::runtime_error(message); } void PvaClientPut::issuePut() @@ -238,9 +237,9 @@ void PvaClientPut::issuePut() if(isDestroyed) throw std::runtime_error("pvaClientPut was destroyed"); if(connectState==connectIdle) connect(); if(putState!=putIdle) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPut::issueGet get or put aleady active "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + "PvaClientPut::issueGet get or put aleady active "; + throw std::runtime_error(message); } putState = putActive; channelPut->put(pvaClientData->getPVStructure(),pvaClientData->getChangedBitSet()); @@ -250,9 +249,9 @@ Status PvaClientPut::waitPut() { if(isDestroyed) throw std::runtime_error("pvaClientPut was destroyed"); if(putState!=putActive){ - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPut::waitPut llegal put state"; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPut::waitPut llegal put state"; + throw std::runtime_error(message); } waitForGetPut.wait(); putState = putIdle; diff --git a/src/pvaClientPutGet.cpp b/src/pvaClientPutGet.cpp index f80f64f..2a9a7e5 100644 --- a/src/pvaClientPutGet.cpp +++ b/src/pvaClientPutGet.cpp @@ -10,7 +10,6 @@ */ #define epicsExportSharedSymbols -#include #include #include @@ -193,18 +192,18 @@ void PvaClientPutGet::connect() issueConnect(); Status status = waitConnect(); if(status.isOK()) return; - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPutGet::connect " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPutGet::connect " + status.getMessage(); + throw std::runtime_error(message); } void PvaClientPutGet::issueConnect() { if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed"); if(connectState!=connectIdle) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " pvaClientPutGet already connected "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " pvaClientPutGet already connected "; + throw std::runtime_error(message); } putGetRequester = ChannelPutGetRequester::shared_pointer(new ChannelPutGetRequesterImpl(this)); connectState = connectActive; @@ -215,9 +214,9 @@ Status PvaClientPutGet::waitConnect() { if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed"); if(connectState!=connectActive) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " pvaClientPutGet illegal connect state "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " pvaClientPutGet illegal connect state "; + throw std::runtime_error(message); } waitForConnect.wait(); connectState = channelPutGetConnectStatus.isOK() ? connected : connectIdle; @@ -231,9 +230,9 @@ void PvaClientPutGet::putGet() issuePutGet(); Status status = waitPutGet(); if(status.isOK()) return; - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPutGet::putGet " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPutGet::putGet " + status.getMessage(); + throw std::runtime_error(message); } void PvaClientPutGet::issuePutGet() @@ -241,9 +240,9 @@ void PvaClientPutGet::issuePutGet() if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed"); if(connectState==connectIdle) connect(); if(putGetState!=putGetIdle) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPutGet::issueGet get or put aleady active "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPutGet::issueGet get or put aleady active "; + throw std::runtime_error(message); } putGetState = putGetActive; channelPutGet->putGet(pvaClientPutData->getPVStructure(),pvaClientPutData->getChangedBitSet()); @@ -254,9 +253,9 @@ Status PvaClientPutGet::waitPutGet() { if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed"); if(putGetState!=putGetActive){ - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPutGet::waitPutGet llegal put state"; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPutGet::waitPutGet llegal put state"; + throw std::runtime_error(message); } waitForPutGet.wait(); putGetState = putGetIdle; @@ -269,9 +268,9 @@ void PvaClientPutGet::getGet() issueGetGet(); Status status = waitGetGet(); if(status.isOK()) return; - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPutGet::getGet " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPutGet::getGet " + status.getMessage(); + throw std::runtime_error(message); } void PvaClientPutGet::issueGetGet() @@ -279,9 +278,9 @@ void PvaClientPutGet::issueGetGet() if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed"); if(connectState==connectIdle) connect(); if(putGetState!=putGetIdle) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPutGet::issueGetGet aleady active "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPutGet::issueGetGet aleady active "; + throw std::runtime_error(message); } putGetState = putGetActive; channelPutGet->getGet(); @@ -291,9 +290,9 @@ Status PvaClientPutGet::waitGetGet() { if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed"); if(putGetState!=putGetActive){ - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPutGet::waitGetGet illegal state"; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPutGet::waitGetGet illegal state"; + throw std::runtime_error(message); } waitForPutGet.wait(); putGetState = putGetIdle; @@ -306,9 +305,9 @@ void PvaClientPutGet::getPut() issueGetPut(); Status status = waitGetPut(); if(status.isOK()) return; - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPutGet::getPut " << status.getMessage(); - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPutGet::getPut " + status.getMessage(); + throw std::runtime_error(message); } void PvaClientPutGet::issueGetPut() @@ -316,9 +315,9 @@ void PvaClientPutGet::issueGetPut() if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed"); if(connectState==connectIdle) connect(); if(putGetState!=putGetIdle) { - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPutGet::issueGetPut aleady active "; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPutGet::issueGetPut aleady active "; + throw std::runtime_error(message); } putGetState = putGetActive; channelPutGet->getPut(); @@ -328,9 +327,9 @@ Status PvaClientPutGet::waitGetPut() { if(isDestroyed) throw std::runtime_error("pvaClientPutGet was destroyed"); if(putGetState!=putGetActive){ - stringstream ss; - ss << "channel " << channel->getChannelName() << " PvaClientPutGet::waitGetPut illegal state"; - throw std::runtime_error(ss.str()); + string message = string("channel ") + channel->getChannelName() + + " PvaClientPutGet::waitGetPut illegal state"; + throw std::runtime_error(message); } waitForPutGet.wait(); putGetState = putGetIdle;