no more returning auto_ptr

This commit is contained in:
Michael Davidsaver
2017-11-06 12:44:36 -06:00
parent 0fde239f23
commit 9bf03fbfbe
3 changed files with 13 additions and 54 deletions

View File

@@ -87,15 +87,12 @@ bool BeaconHandler::updateBeacon(int8 /*remoteTransportRevision*/, TimeStamp* /*
void BeaconHandler::changedTransport()
{
auto_ptr<TransportRegistry::transportVector_t> 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();
}

View File

@@ -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<transportVector_t> 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<transportVector_t> toArray(std::string const & type);
std::auto_ptr<transportVector_t> toArray();
// optimized to avoid reallocation, adds to array
void toArray(transportVector_t & transportArray);

View File

@@ -64,25 +64,25 @@ Transport::shared_pointer TransportRegistry::get(std::string const & /*type*/, c
return Transport::shared_pointer();
}
std::auto_ptr<TransportRegistry::transportVector_t>
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<transportVector_t> 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<transportVector_t>();
}
Transport::shared_pointer TransportRegistry::remove(Transport::shared_pointer const & transport)
@@ -123,41 +123,6 @@ int32 TransportRegistry::numberOfActiveTransports()
return _transportCount;
}
std::auto_ptr<TransportRegistry::transportVector_t>
TransportRegistry::toArray(std::string const & /*type*/)
{
// TODO support type
return toArray();
}
std::auto_ptr<TransportRegistry::transportVector_t>
TransportRegistry::toArray()
{
Lock guard(_mutex);
if (_transportCount == 0)
return std::auto_ptr<transportVector_t>(0);
std::auto_ptr<transportVector_t> 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);