no more returning auto_ptr
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user