From 4e62a7d4df1e467d2a7b499e727a444f300dbabd Mon Sep 17 00:00:00 2001 From: Matej Sekoranja Date: Mon, 9 Jun 2014 22:13:48 +0200 Subject: [PATCH] channelList using svector --- pvAccessApp/ca/caProvider.cpp | 2 +- pvAccessApp/client/pvAccess.h | 3 +-- pvAccessApp/remoteClient/clientContextImpl.cpp | 2 +- pvAccessApp/rpcService/rpcServer.cpp | 7 ++++--- pvAccessApp/server/responseHandlers.cpp | 14 +++----------- testApp/remote/testServer.cpp | 7 ++++--- testApp/remote/testServerContext.cpp | 2 +- 7 files changed, 15 insertions(+), 22 deletions(-) diff --git a/pvAccessApp/ca/caProvider.cpp b/pvAccessApp/ca/caProvider.cpp index 87d0617..0de7be2 100644 --- a/pvAccessApp/ca/caProvider.cpp +++ b/pvAccessApp/ca/caProvider.cpp @@ -65,7 +65,7 @@ ChannelFind::shared_pointer CAChannelProvider::channelList( Status errorStatus(Status::STATUSTYPE_ERROR, "not implemented"); ChannelFind::shared_pointer nullChannelFind; - std::set none; + PVStringArray::const_svector none; EXCEPTION_GUARD(channelListRequester->channelListResult(errorStatus, nullChannelFind, none, false)); return nullChannelFind; } diff --git a/pvAccessApp/client/pvAccess.h b/pvAccessApp/client/pvAccess.h index c2927d2..1b1ad1c 100644 --- a/pvAccessApp/client/pvAccess.h +++ b/pvAccessApp/client/pvAccess.h @@ -8,7 +8,6 @@ #define PVACCESS_H #include -#include #ifdef epicsExportSharedSymbols # define pvAccessEpicsExportSharedSymbols @@ -284,7 +283,7 @@ namespace pvAccess { virtual void channelListResult( const epics::pvData::Status& status, ChannelFind::shared_pointer const & channelFind, - std::set const & channelNames, + epics::pvData::PVStringArray::const_svector const & channelNames, bool hasDynamic) = 0; }; diff --git a/pvAccessApp/remoteClient/clientContextImpl.cpp b/pvAccessApp/remoteClient/clientContextImpl.cpp index 40eedcf..2005ea6 100644 --- a/pvAccessApp/remoteClient/clientContextImpl.cpp +++ b/pvAccessApp/remoteClient/clientContextImpl.cpp @@ -3023,7 +3023,7 @@ namespace epics { Status errorStatus(Status::STATUSTYPE_ERROR, "not implemented"); ChannelFind::shared_pointer nullChannelFind; - std::set none; + PVStringArray::const_svector none; EXCEPTION_GUARD(channelListRequester->channelListResult(errorStatus, nullChannelFind, none, false)); return nullChannelFind; } diff --git a/pvAccessApp/rpcService/rpcServer.cpp b/pvAccessApp/rpcService/rpcServer.cpp index 0e362f2..29b3132 100644 --- a/pvAccessApp/rpcService/rpcServer.cpp +++ b/pvAccessApp/rpcService/rpcServer.cpp @@ -375,17 +375,18 @@ public: if (!channelListRequester.get()) throw std::runtime_error("null requester"); - std::set channelNames; + PVStringArray::svector channelNames; { Lock guard(m_mutex); + channelNames.reserve(m_services.size()); for (RPCServiceMap::const_iterator iter = m_services.begin(); iter != m_services.end(); iter++) - channelNames.insert(iter->first); + channelNames.push_back(iter->first); } ChannelFind::shared_pointer thisPtr(shared_from_this()); - channelListRequester->channelListResult(Status::Ok, thisPtr, channelNames, false); + channelListRequester->channelListResult(Status::Ok, thisPtr, freeze(channelNames), false); return thisPtr; } diff --git a/pvAccessApp/server/responseHandlers.cpp b/pvAccessApp/server/responseHandlers.cpp index 261dbd4..736ad27 100644 --- a/pvAccessApp/server/responseHandlers.cpp +++ b/pvAccessApp/server/responseHandlers.cpp @@ -387,13 +387,13 @@ class ChannelListRequesterImpl : public: POINTER_DEFINITIONS(ChannelListRequesterImpl); - std::set channelNames; + PVStringArray::const_svector channelNames; Status status; virtual void channelListResult( const epics::pvData::Status& status, ChannelFind::shared_pointer const & channelFind, - std::set const & channelNames, + PVStringArray::const_svector const & channelNames, bool hasDynamic) { epics::pvData::Lock lock(_waitMutex); @@ -474,18 +474,10 @@ public: throw RPCRequestException(Status::STATUSTYPE_ERROR, errorMessage); } - std::set& channelNames = listListener->channelNames; - PVStructure::shared_pointer result = getPVDataCreate()->createPVStructure(channelListStructure); PVStringArray::shared_pointer pvArray = result->getSubField("value"); - PVStringArray::svector newdata(channelNames.size()); - size_t i = 0; - for (std::set::const_iterator iter = channelNames.begin(); - iter != channelNames.end(); - iter++) - newdata[i++] = *iter; - pvArray->replace(freeze(newdata)); + pvArray->replace(listListener->channelNames); return result; } diff --git a/testApp/remote/testServer.cpp b/testApp/remote/testServer.cpp index 4669bab..ff50740 100644 --- a/testApp/remote/testServer.cpp +++ b/testApp/remote/testServer.cpp @@ -2633,15 +2633,16 @@ public: throw std::runtime_error("null requester"); // NOTE: this adds only active channels, not all (especially RPC ones) - std::set channelNames; + PVStringArray::svector channelNames; { Lock guard(structureStoreMutex); + channelNames.reserve(structureStore.size()); for (map::const_iterator iter = structureStore.begin(); iter != structureStore.end(); iter++) - channelNames.insert(iter->first); + channelNames.push_back(iter->first); } - channelListRequester->channelListResult(Status::Ok, m_mockChannelFind, channelNames, true); + channelListRequester->channelListResult(Status::Ok, m_mockChannelFind, freeze(channelNames), true); return m_mockChannelFind; } diff --git a/testApp/remote/testServerContext.cpp b/testApp/remote/testServerContext.cpp index a672e28..a8f25d1 100644 --- a/testApp/remote/testServerContext.cpp +++ b/testApp/remote/testServerContext.cpp @@ -27,7 +27,7 @@ public: ChannelFind::shared_pointer channelList(ChannelListRequester::shared_pointer const & channelListRequester) { ChannelFind::shared_pointer nullCF; - std::set none; + PVStringArray::const_svector none; channelListRequester->channelListResult(Status::Ok, nullCF, none, false); return nullCF; }