From 9bf03fbfbe5e832eccf8ee3dea6056af9afa77a1 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Mon, 6 Nov 2017 12:44:36 -0600 Subject: [PATCH] no more returning auto_ptr --- src/remote/beaconHandler.cpp | 11 +++---- src/remote/pv/transportRegistry.h | 5 +-- src/remote/transportRegistry.cpp | 51 +++++-------------------------- 3 files changed, 13 insertions(+), 54 deletions(-) diff --git a/src/remote/beaconHandler.cpp b/src/remote/beaconHandler.cpp index 2e56e15..4867d42 100644 --- a/src/remote/beaconHandler.cpp +++ b/src/remote/beaconHandler.cpp @@ -87,15 +87,12 @@ bool BeaconHandler::updateBeacon(int8 /*remoteTransportRevision*/, TimeStamp* /* void BeaconHandler::changedTransport() { - auto_ptr transports = - _context.lock()->getTransportRegistry()->get(_protocol, &_responseFrom); - if (!transports.get()) - return; + TransportRegistry::transportVector_t transports; + _context.lock()->getTransportRegistry()->get(_protocol, &_responseFrom, transports); // notify all - for (TransportRegistry::transportVector_t::iterator iter = transports->begin(); - iter != transports->end(); - iter++) + for (TransportRegistry::transportVector_t::iterator iter(transports.begin()), end(transports.end()); + iter != end; iter++) { (*iter)->changedTransport(); } diff --git a/src/remote/pv/transportRegistry.h b/src/remote/pv/transportRegistry.h index 652597e..4e1b01b 100644 --- a/src/remote/pv/transportRegistry.h +++ b/src/remote/pv/transportRegistry.h @@ -46,14 +46,11 @@ public: void put(Transport::shared_pointer const & transport); Transport::shared_pointer get(std::string const & type, const osiSockAddr* address, const epics::pvData::int16 priority); - std::auto_ptr get(std::string const & type, const osiSockAddr* address); + void get(std::string const & type, const osiSockAddr* address, transportVector_t&output); Transport::shared_pointer remove(Transport::shared_pointer const & transport); void clear(); epics::pvData::int32 numberOfActiveTransports(); - // TODO note type not supported - std::auto_ptr toArray(std::string const & type); - std::auto_ptr toArray(); // optimized to avoid reallocation, adds to array void toArray(transportVector_t & transportArray); diff --git a/src/remote/transportRegistry.cpp b/src/remote/transportRegistry.cpp index 929dc88..d357536 100644 --- a/src/remote/transportRegistry.cpp +++ b/src/remote/transportRegistry.cpp @@ -64,25 +64,25 @@ Transport::shared_pointer TransportRegistry::get(std::string const & /*type*/, c return Transport::shared_pointer(); } -std::auto_ptr -TransportRegistry::get(std::string const & /*type*/, const osiSockAddr* address) +void +TransportRegistry::get(std::string const & /*type*/, const osiSockAddr* address, transportVector_t& output) { Lock guard(_mutex); transportsMap_t::iterator transportsIter = _transports.find(address); if(transportsIter != _transports.end()) { - prioritiesMapSharedPtr_t priorities = transportsIter->second; - std::auto_ptr transportArray(new transportVector_t(priorities->size())); - int32 i = 0; + prioritiesMapSharedPtr_t& priorities = transportsIter->second; + + size_t i = output.size(); + output.resize(output.size() + priorities->size()); + for(prioritiesMap_t::iterator prioritiesIter = priorities->begin(); prioritiesIter != priorities->end(); prioritiesIter++, i++) { - (*transportArray)[i] = prioritiesIter->second; + output[i] = prioritiesIter->second; } - return transportArray; } - return std::auto_ptr(); } Transport::shared_pointer TransportRegistry::remove(Transport::shared_pointer const & transport) @@ -123,41 +123,6 @@ int32 TransportRegistry::numberOfActiveTransports() return _transportCount; } - -std::auto_ptr -TransportRegistry::toArray(std::string const & /*type*/) -{ - // TODO support type - return toArray(); -} - - -std::auto_ptr -TransportRegistry::toArray() -{ - Lock guard(_mutex); - if (_transportCount == 0) - return std::auto_ptr(0); - - std::auto_ptr transportArray(new transportVector_t(_transportCount)); - - int32 i = 0; - for (transportsMap_t::iterator transportsIter = _transports.begin(); - transportsIter != _transports.end(); - transportsIter++) - { - prioritiesMapSharedPtr_t priorities = transportsIter->second; - for (prioritiesMap_t::iterator prioritiesIter = priorities->begin(); - prioritiesIter != priorities->end(); - prioritiesIter++, i++) - { - (*transportArray)[i] = prioritiesIter->second; - } - } - - return transportArray; -} - void TransportRegistry::toArray(transportVector_t & transportArray) { Lock guard(_mutex);