diff --git a/cpp/include/Ice/Connection.h b/cpp/include/Ice/Connection.h index 01ad3e11906..9fd74368dc1 100644 --- a/cpp/include/Ice/Connection.h +++ b/cpp/include/Ice/Connection.h @@ -672,13 +672,6 @@ class ICE_CLASS(ICE_API) WSConnectionInfo : public ::Ice::ConnectionInfo } -/// \cond STREAM -namespace Ice -{ - -} -/// \endcond - /// \cond INTERNAL namespace Ice { diff --git a/cpp/include/Ice/ServantManagerF.h b/cpp/include/Ice/ServantManagerF.h index 0892c000aad..8cf52236a50 100644 --- a/cpp/include/Ice/ServantManagerF.h +++ b/cpp/include/Ice/ServantManagerF.h @@ -5,16 +5,13 @@ #ifndef ICE_SERVANT_MANAGER_F_H #define ICE_SERVANT_MANAGER_F_H -#include - -#include +#include namespace IceInternal { class ServantManager; -ICE_API IceUtil::Shared* upCast(ServantManager*); -typedef Handle ServantManagerPtr; +using ServantManagerPtr = std::shared_ptr; } diff --git a/cpp/src/Ice/Acceptor.cpp b/cpp/src/Ice/Acceptor.cpp index 47281927c97..6399bcea7d4 100644 --- a/cpp/src/Ice/Acceptor.cpp +++ b/cpp/src/Ice/Acceptor.cpp @@ -12,5 +12,3 @@ Acceptor::~Acceptor() { // Out of line to avoid weak vtable } - -IceUtil::Shared* IceInternal::upCast(Acceptor* p) { return p; } diff --git a/cpp/src/Ice/Acceptor.h b/cpp/src/Ice/Acceptor.h index ca94aefb442..047e86b5adf 100644 --- a/cpp/src/Ice/Acceptor.h +++ b/cpp/src/Ice/Acceptor.h @@ -5,7 +5,6 @@ #ifndef ICE_ACCEPTOR_H #define ICE_ACCEPTOR_H -#include #include #include #include @@ -14,7 +13,7 @@ namespace IceInternal { -class ICE_API Acceptor : public virtual ::IceUtil::Shared +class ICE_API Acceptor { public: virtual ~Acceptor(); diff --git a/cpp/src/Ice/AcceptorF.h b/cpp/src/Ice/AcceptorF.h index 4e6b97bf414..bd71fe4ea07 100644 --- a/cpp/src/Ice/AcceptorF.h +++ b/cpp/src/Ice/AcceptorF.h @@ -13,12 +13,10 @@ namespace IceInternal { class Acceptor; -ICE_API IceUtil::Shared* upCast(Acceptor*); -typedef Handle AcceptorPtr; +using AcceptorPtr = std::shared_ptr; class TcpAcceptor; -ICE_API IceUtil::Shared* upCast(TcpAcceptor*); -typedef Handle TcpAcceptorPtr; +using TcpAcceptorPtr = std::shared_ptr; } diff --git a/cpp/src/Ice/ConnectionFactory.cpp b/cpp/src/Ice/ConnectionFactory.cpp index bb7336e2c4f..a5cdd1436c9 100644 --- a/cpp/src/Ice/ConnectionFactory.cpp +++ b/cpp/src/Ice/ConnectionFactory.cpp @@ -38,8 +38,6 @@ using namespace Ice; using namespace Ice::Instrumentation; using namespace IceInternal; -IceUtil::Shared* IceInternal::upCast(OutgoingConnectionFactory* p) { return p; } - namespace { @@ -129,7 +127,7 @@ class FinishCall : public DispatchWorkItem bool IceInternal::OutgoingConnectionFactory::ConnectorInfo::operator==(const ConnectorInfo& other) const { - return connector == other.connector; + return targetEqualTo(connector, other.connector); } void @@ -147,7 +145,7 @@ IceInternal::OutgoingConnectionFactory::destroy() p.second->destroy(ConnectionI::CommunicatorDestroyed); } _destroyed = true; - _communicator = 0; + _communicator = nullptr; _conditionVariable.notify_all(); } @@ -165,7 +163,7 @@ IceInternal::OutgoingConnectionFactory::updateConnectionObservers() void IceInternal::OutgoingConnectionFactory::waitUntilFinished() { - multimap connections; + multimap> connections; { unique_lock lock(_mutex); @@ -239,7 +237,7 @@ IceInternal::OutgoingConnectionFactory::create(const vector& endpt return; } - auto cb = make_shared(_instance, this, endpoints, hasMore, callback, selType); + auto cb = make_shared(_instance, shared_from_this(), endpoints, hasMore, callback, selType); cb->getConnectors(); } @@ -395,9 +393,11 @@ IceInternal::OutgoingConnectionFactory::findConnection(const vectordefaultsAndOverrides(); assert(!endpoints.empty()); - for(vector::const_iterator p = endpoints.begin(); p != endpoints.end(); ++p) + + for(const auto& p : endpoints) { - auto connection = find(_connectionsByEndpoint, *p, + auto connection = find(_connectionsByEndpoint, + p, [](const ConnectionIPtr& conn) { return conn->isActiveOrHolding(); @@ -410,7 +410,7 @@ IceInternal::OutgoingConnectionFactory::findConnection(const vectorcompress(); + compress = p->compress(); } return connection; } @@ -424,14 +424,15 @@ IceInternal::OutgoingConnectionFactory::findConnection(const vectordefaultsAndOverrides(); - for(vector::const_iterator p = connectors.begin(); p != connectors.end(); ++p) + for(const auto& p : connectors) { - if(_pending.find(p->connector) != _pending.end()) + if(_pending.find(p.connector) != _pending.end()) { continue; } - auto connection = find(_connections, p->connector, + auto connection = find(_connections, + p.connector, [](const ConnectionIPtr& conn) { return conn->isActiveOrHolding(); @@ -444,7 +445,7 @@ IceInternal::OutgoingConnectionFactory::findConnection(const vectorendpoint->compress(); + compress = p.endpoint->compress(); } return connection; } @@ -501,11 +502,11 @@ IceInternal::OutgoingConnectionFactory::getConnection(const vector cons; _monitor->swapReapedConnections(cons); - for(vector::const_iterator p = cons.begin(); p != cons.end(); ++p) + for(const auto& p : cons) { - remove(_connections, (*p)->connector(), *p); - remove(_connectionsByEndpoint, (*p)->endpoint(), *p); - remove(_connectionsByEndpoint, (*p)->endpoint()->compress(true), *p); + remove(_connections, p->connector(), p); + remove(_connectionsByEndpoint, p->endpoint(), p); + remove(_connectionsByEndpoint, p->endpoint()->compress(true), p); } // @@ -624,21 +625,21 @@ IceInternal::OutgoingConnectionFactory::finishGetConnection(const vector connectionCallbacks; + ConnectCallbackSet connectionCallbacks; if(cb) { connectionCallbacks.insert(cb); } - set callbacks; + ConnectCallbackSet callbacks; { lock_guard lock(_mutex); for(vector::const_iterator p = connectors.begin(); p != connectors.end(); ++p) { - map >::iterator q = _pending.find(p->connector); + auto q = _pending.find(p->connector); if(q != _pending.end()) { - for(set::const_iterator r = q->second.begin(); r != q->second.end(); ++r) + for(auto r = q->second.begin(); r != q->second.end(); ++r) { if((*r)->hasConnector(ci)) { @@ -653,12 +654,12 @@ IceInternal::OutgoingConnectionFactory::finishGetConnection(const vector::iterator r = connectionCallbacks.begin(); r != connectionCallbacks.end(); ++r) + for(auto r = connectionCallbacks.begin(); r != connectionCallbacks.end(); ++r) { (*r)->removeFromPending(); callbacks.erase(*r); } - for(set::iterator r = callbacks.begin(); r != callbacks.end(); ++r) + for(auto r = callbacks.begin(); r != callbacks.end(); ++r) { (*r)->removeFromPending(); } @@ -676,11 +677,11 @@ IceInternal::OutgoingConnectionFactory::finishGetConnection(const vectorcompress(); } - for(set::const_iterator p = callbacks.begin(); p != callbacks.end(); ++p) + for(auto p = callbacks.begin(); p != callbacks.end(); ++p) { (*p)->getConnection(); } - for(set::const_iterator p = connectionCallbacks.begin(); p != connectionCallbacks.end(); ++p) + for(auto p = connectionCallbacks.begin(); p != connectionCallbacks.end(); ++p) { (*p)->setConnection(connection, compress); } @@ -691,21 +692,21 @@ IceInternal::OutgoingConnectionFactory::finishGetConnection(const vector failedCallbacks; + ConnectCallbackSet failedCallbacks; if(cb) { failedCallbacks.insert(cb); } - set callbacks; + ConnectCallbackSet callbacks; { lock_guard lock(_mutex); - for(vector::const_iterator p = connectors.begin(); p != connectors.end(); ++p) + for(auto p = connectors.begin(); p != connectors.end(); ++p) { - map >::iterator q = _pending.find(p->connector); + auto q = _pending.find(p->connector); if(q != _pending.end()) { - for(set::const_iterator r = q->second.begin(); r != q->second.end(); ++r) + for(auto r = q->second.begin(); r != q->second.end(); ++r) { if((*r)->removeConnectors(connectors)) { @@ -720,7 +721,7 @@ IceInternal::OutgoingConnectionFactory::finishGetConnection(const vector::iterator r = callbacks.begin(); r != callbacks.end(); ++r) + for(auto r = callbacks.begin(); r != callbacks.end(); ++r) { assert(failedCallbacks.find(*r) == failedCallbacks.end()); (*r)->removeFromPending(); @@ -728,11 +729,11 @@ IceInternal::OutgoingConnectionFactory::finishGetConnection(const vector::const_iterator p = callbacks.begin(); p != callbacks.end(); ++p) + for(auto p = callbacks.begin(); p != callbacks.end(); ++p) { (*p)->getConnection(); } - for(set::const_iterator p = failedCallbacks.begin(); p != failedCallbacks.end(); ++p) + for(auto p = failedCallbacks.begin(); p != failedCallbacks.end(); ++p) { (*p)->setException(ex); } @@ -746,9 +747,9 @@ IceInternal::OutgoingConnectionFactory::addToPending(const ConnectCallbackPtr& c // Add the callback to each connector pending list. // bool found = false; - for(vector::const_iterator p = connectors.begin(); p != connectors.end(); ++p) + for(auto p = connectors.begin(); p != connectors.end(); ++p) { - map >::iterator q = _pending.find(p->connector); + auto q = _pending.find(p->connector); if(q != _pending.end()) { found = true; @@ -773,7 +774,7 @@ IceInternal::OutgoingConnectionFactory::addToPending(const ConnectCallbackPtr& c { if(_pending.find(r->connector) == _pending.end()) { - _pending.insert(pair >(r->connector, set())); + _pending.insert(make_pair(r->connector, ConnectCallbackSet())); } } return false; @@ -783,9 +784,9 @@ void IceInternal::OutgoingConnectionFactory::removeFromPending(const ConnectCallbackPtr& cb, const vector& connectors) { - for(vector::const_iterator p = connectors.begin(); p != connectors.end(); ++p) + for(auto p = connectors.begin(); p != connectors.end(); ++p) { - map >::iterator q = _pending.find(p->connector); + auto q = _pending.find(p->connector); if(q != _pending.end()) { q->second.erase(cb); @@ -1093,9 +1094,9 @@ IceInternal::OutgoingConnectionFactory::ConnectCallback::removeConnectors(const // failed, we remove the connectors and return true if there's // no more connectors left to try. // - for(vector::const_iterator p = connectors.begin(); p != connectors.end(); ++p) + for (const auto& p : connectors) { - _connectors.erase(remove(_connectors.begin(), _connectors.end(), *p), _connectors.end()); + _connectors.erase(remove(_connectors.begin(), _connectors.end(), p), _connectors.end()); } return _connectors.empty(); } @@ -1162,7 +1163,7 @@ void IceInternal::IncomingConnectionFactory::updateConnectionObservers() { lock_guard lock(_mutex); - for(const auto& conn : _connections) + for (const auto& conn : _connections) { conn->updateObserver(); } @@ -1214,7 +1215,7 @@ IceInternal::IncomingConnectionFactory::waitUntilFinished() // // Clear the OA. See bug 1673 for the details of why this is necessary. // - _adapter = 0; + _adapter = nullptr; // We want to wait until all connections are finished outside the // thread synchronization. @@ -1484,7 +1485,7 @@ IceInternal::IncomingConnectionFactory::message(ThreadPoolCurrent& current) void IceInternal::IncomingConnectionFactory::finished(ThreadPoolCurrent&, bool close) { - lock_guard lock(_mutex); + unique_lock lock(_mutex); if(_state < StateClosed) { if(close) @@ -1513,7 +1514,7 @@ IceInternal::IncomingConnectionFactory::finished(ThreadPoolCurrent&, bool close) } #if TARGET_OS_IPHONE != 0 - sync.release(); + lock.unlock(); finish(); #endif } diff --git a/cpp/src/Ice/ConnectionFactory.h b/cpp/src/Ice/ConnectionFactory.h index 2758df00dfd..d0a65a12c20 100644 --- a/cpp/src/Ice/ConnectionFactory.h +++ b/cpp/src/Ice/ConnectionFactory.h @@ -40,18 +40,18 @@ namespace IceInternal template class ThreadPoolMessage; -class OutgoingConnectionFactory : public virtual IceUtil::Shared +class OutgoingConnectionFactory final : public std::enable_shared_from_this { public: - class CreateConnectionCallback : public virtual IceUtil::Shared + class CreateConnectionCallback { public: virtual void setConnection(const Ice::ConnectionIPtr&, bool) = 0; virtual void setException(const Ice::LocalException&) = 0; }; - typedef IceUtil::Handle CreateConnectionCallbackPtr; + using CreateConnectionCallbackPtr = std::shared_ptr; void destroy(); @@ -65,7 +65,7 @@ class OutgoingConnectionFactory : public virtual IceUtil::Shared void flushAsyncBatchRequests(const CommunicatorFlushBatchAsyncPtr&, Ice::CompressBatch); OutgoingConnectionFactory(const Ice::CommunicatorPtr&, const InstancePtr&); - virtual ~OutgoingConnectionFactory(); + ~OutgoingConnectionFactory(); friend class Instance; private: @@ -153,8 +153,10 @@ class OutgoingConnectionFactory : public virtual IceUtil::Shared const FactoryACMMonitorPtr _monitor; bool _destroyed; - std::multimap _connections; - std::map > _pending; + using ConnectCallbackSet = std::set>; + + std::multimap> _connections; + std::map> _pending; std::multimap> _connectionsByEndpoint; int _pendingConnectCount; @@ -162,11 +164,12 @@ class OutgoingConnectionFactory : public virtual IceUtil::Shared std::condition_variable _conditionVariable; }; -class IncomingConnectionFactory : public EventHandler, - public Ice::ConnectionI::StartCallback +class IncomingConnectionFactory final : public EventHandler, public Ice::ConnectionI::StartCallback { public: + IncomingConnectionFactory(const InstancePtr&, const EndpointIPtr&, const EndpointIPtr&, + const std::shared_ptr&); void activate(); void hold(); void destroy(); @@ -203,11 +206,8 @@ class IncomingConnectionFactory : public EventHandler, virtual void connectionStartCompleted(const Ice::ConnectionIPtr&); virtual void connectionStartFailed(const Ice::ConnectionIPtr&, const Ice::LocalException&); - - IncomingConnectionFactory(const InstancePtr&, const EndpointIPtr&, const EndpointIPtr&, - const std::shared_ptr&); void initialize(); - virtual ~IncomingConnectionFactory(); + ~IncomingConnectionFactory(); std::shared_ptr shared_from_this() { diff --git a/cpp/src/Ice/ConnectionFactoryF.h b/cpp/src/Ice/ConnectionFactoryF.h index c3929638fb0..4de5b5eab72 100644 --- a/cpp/src/Ice/ConnectionFactoryF.h +++ b/cpp/src/Ice/ConnectionFactoryF.h @@ -5,19 +5,15 @@ #ifndef ICE_CONNECTION_FACTORY_F_H #define ICE_CONNECTION_FACTORY_F_H -#include - -#include +#include namespace IceInternal { class OutgoingConnectionFactory; -IceUtil::Shared* upCast(OutgoingConnectionFactory*); -typedef IceInternal::Handle OutgoingConnectionFactoryPtr; +using OutgoingConnectionFactoryPtr = std::shared_ptr; class IncomingConnectionFactory; - using IncomingConnectionFactoryPtr = ::std::shared_ptr; } diff --git a/cpp/src/Ice/ConnectionI.cpp b/cpp/src/Ice/ConnectionI.cpp index 821e2bb0995..1894b9825a4 100644 --- a/cpp/src/Ice/ConnectionI.cpp +++ b/cpp/src/Ice/ConnectionI.cpp @@ -141,7 +141,6 @@ class ConnectionFlushBatchAsync : public OutgoingAsyncBase const Ice::ConnectionIPtr _connection; }; -typedef IceUtil::Handle ConnectionFlushBatchAsyncPtr; ConnectionState connectionStateMap[] = { ConnectionState::ConnectionStateValidating, // StateNotInitialized @@ -861,7 +860,6 @@ class HeartbeatAsync : public OutgoingAsyncBase CommunicatorPtr _communicator; ConnectionIPtr _connection; }; -typedef IceUtil::Handle HeartbeatAsyncPtr; } diff --git a/cpp/src/Ice/Connector.cpp b/cpp/src/Ice/Connector.cpp index 0d9739d035c..40a5919c0d2 100644 --- a/cpp/src/Ice/Connector.cpp +++ b/cpp/src/Ice/Connector.cpp @@ -12,5 +12,3 @@ Connector::~Connector() { // Out of line to avoid weak vtable } - -IceUtil::Shared* IceInternal::upCast(Connector* p) { return p; } diff --git a/cpp/src/Ice/Connector.h b/cpp/src/Ice/Connector.h index 1daa7a11fd4..62a193af8c9 100644 --- a/cpp/src/Ice/Connector.h +++ b/cpp/src/Ice/Connector.h @@ -12,7 +12,7 @@ namespace IceInternal { -class ICE_API Connector : public ::IceUtil::Shared +class ICE_API Connector { public: diff --git a/cpp/src/Ice/ConnectorF.h b/cpp/src/Ice/ConnectorF.h index 22a5a825bdf..308a1046749 100644 --- a/cpp/src/Ice/ConnectorF.h +++ b/cpp/src/Ice/ConnectorF.h @@ -5,16 +5,13 @@ #ifndef ICE_CONNECTOR_F_H #define ICE_CONNECTOR_F_H -#include - -#include +#include namespace IceInternal { class Connector; -ICE_API IceUtil::Shared* upCast(Connector*); -typedef Handle ConnectorPtr; +using ConnectorPtr = std::shared_ptr; } diff --git a/cpp/src/Ice/EndpointFactory.cpp b/cpp/src/Ice/EndpointFactory.cpp index b673d0f1d4e..c64fa2bec07 100644 --- a/cpp/src/Ice/EndpointFactory.cpp +++ b/cpp/src/Ice/EndpointFactory.cpp @@ -11,8 +11,6 @@ using namespace std; using namespace Ice; using namespace IceInternal; -IceUtil::Shared* IceInternal::upCast(EndpointFactory* p) { return p; } - IceInternal::EndpointFactory::EndpointFactory() { } @@ -82,7 +80,7 @@ IceInternal::EndpointFactoryWithUnderlying::create(vector& args, bool oa { if(!_underlying) { - return 0; // Can't create an endpoint without underlying factory. + return nullptr; // Can't create an endpoint without underlying factory. } return createWithUnderlying(_underlying->create(args, oaEndpoint), args, oaEndpoint); } @@ -92,7 +90,7 @@ IceInternal::EndpointFactoryWithUnderlying::read(InputStream* s) const { if(!_underlying) { - return 0; // Can't create an endpoint without underlying factory. + return nullptr; // Can't create an endpoint without underlying factory. } return readWithUnderlying(_underlying->read(s), s); } @@ -104,7 +102,7 @@ IceInternal::EndpointFactoryWithUnderlying::destroy() { _underlying->destroy(); } - _instance = 0; + _instance = nullptr; } EndpointFactoryPtr @@ -157,7 +155,7 @@ IceInternal::UnderlyingEndpointFactory::create(vector& args, bool oaEndp { if(!_factory) { - return 0; + return nullptr; } return _factory->create(args, oaEndpoint); } @@ -167,7 +165,7 @@ IceInternal::UnderlyingEndpointFactory::read(InputStream* s) const { if(!_factory) { - return 0; + return nullptr; } return _factory->read(s); } @@ -179,11 +177,11 @@ IceInternal::UnderlyingEndpointFactory::destroy() { _factory->destroy(); } - _instance = 0; + _instance = nullptr; } EndpointFactoryPtr IceInternal::UnderlyingEndpointFactory::clone(const ProtocolInstancePtr& instance) const { - return new UnderlyingEndpointFactory(instance, _type, _underlying); + return make_shared(instance, _type, _underlying); } diff --git a/cpp/src/Ice/EndpointFactory.h b/cpp/src/Ice/EndpointFactory.h index 4bcbf5b3d9c..9144c758aec 100644 --- a/cpp/src/Ice/EndpointFactory.h +++ b/cpp/src/Ice/EndpointFactory.h @@ -5,7 +5,6 @@ #ifndef ICE_ENDPOINT_FACTORY_H #define ICE_ENDPOINT_FACTORY_H -#include #include #include #include @@ -22,10 +21,11 @@ class InputStream; namespace IceInternal { -class ICE_API EndpointFactory : public ::IceUtil::Shared +class ICE_API EndpointFactory { public: + EndpointFactory(); virtual ~EndpointFactory(); virtual void initialize(); @@ -36,10 +36,6 @@ class ICE_API EndpointFactory : public ::IceUtil::Shared virtual void destroy() = 0; virtual EndpointFactoryPtr clone(const ProtocolInstancePtr&) const = 0; - -protected: - - EndpointFactory(); }; // diff --git a/cpp/src/Ice/EndpointFactoryF.h b/cpp/src/Ice/EndpointFactoryF.h index 22ae52dd4a0..744afaa752f 100644 --- a/cpp/src/Ice/EndpointFactoryF.h +++ b/cpp/src/Ice/EndpointFactoryF.h @@ -5,16 +5,13 @@ #ifndef ICE_ENDPOINT_FACTORY_F_H #define ICE_ENDPOINT_FACTORY_F_H -#include - -#include +#include namespace IceInternal { class EndpointFactory; -ICE_API IceUtil::Shared* upCast(EndpointFactory*); -typedef Handle EndpointFactoryPtr; +using EndpointFactoryPtr = std::shared_ptr; } diff --git a/cpp/src/Ice/IPEndpointI.cpp b/cpp/src/Ice/IPEndpointI.cpp index f414ac25398..7d8a50b0558 100644 --- a/cpp/src/Ice/IPEndpointI.cpp +++ b/cpp/src/Ice/IPEndpointI.cpp @@ -47,7 +47,7 @@ IceInternal::IPEndpointInfoI::secure() const noexcept Ice::EndpointInfoPtr IceInternal::IPEndpointI::getInfo() const noexcept { - Ice::IPEndpointInfoPtr info = make_shared(ICE_SHARED_FROM_CONST_THIS(IPEndpointI)); + Ice::IPEndpointInfoPtr info = make_shared(const_cast(this)->shared_from_this()); fillEndpointInfo(info.get()); return info; } @@ -88,7 +88,7 @@ IceInternal::IPEndpointI::connectionId(const string& connectionId) const { if(connectionId == _connectionId) { - return ICE_SHARED_FROM_CONST_THIS(IPEndpointI); + return const_cast(this)->shared_from_this(); } else { @@ -99,7 +99,7 @@ IceInternal::IPEndpointI::connectionId(const string& connectionId) const void IceInternal::IPEndpointI::connectors_async(Ice::EndpointSelectionType selType, const EndpointI_connectorsPtr& cb) const { - _instance->resolve(_host, _port, selType, ICE_SHARED_FROM_CONST_THIS(IPEndpointI), cb); + _instance->resolve(_host, _port, selType, const_cast(this)->shared_from_this(), cb); } vector @@ -109,7 +109,7 @@ IceInternal::IPEndpointI::expandIfWildcard() const vector hosts = getHostsForEndpointExpand(_host, _instance->protocolSupport(), false); if(hosts.empty()) { - endps.push_back(ICE_SHARED_FROM_CONST_THIS(IPEndpointI)); + endps.push_back(const_cast(this)->shared_from_this()); } else { @@ -131,7 +131,7 @@ IceInternal::IPEndpointI::expandHost(EndpointIPtr& publish) const if(_host.empty()) { vector endpoints; - endpoints.push_back(ICE_SHARED_FROM_CONST_THIS(IPEndpointI)); + endpoints.push_back(const_cast(this)->shared_from_this()); return endpoints; } @@ -142,7 +142,7 @@ IceInternal::IPEndpointI::expandHost(EndpointIPtr& publish) const // if(_port > 0) { - publish = ICE_SHARED_FROM_CONST_THIS(IPEndpointI); + publish = const_cast(this)->shared_from_this(); } vector
addrs = getAddresses(_host, @@ -155,7 +155,7 @@ IceInternal::IPEndpointI::expandHost(EndpointIPtr& publish) const vector endpoints; if(addrs.size() == 1) { - endpoints.push_back(ICE_SHARED_FROM_CONST_THIS(IPEndpointI)); + endpoints.push_back(const_cast(this)->shared_from_this()); } else { diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp index 927f209fc08..bb764bf20fb 100644 --- a/cpp/src/Ice/Instance.cpp +++ b/cpp/src/Ice/Instance.cpp @@ -1203,9 +1203,9 @@ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const Initi const_cast(_implicitContext) = ImplicitContextI::create(_initData.properties->getProperty("Ice.ImplicitContext")); - _routerManager = new RouterManager; + _routerManager = make_shared(); - _locatorManager = new LocatorManager(_initData.properties); + _locatorManager = make_shared(_initData.properties); _referenceFactory = make_shared(this, communicator); @@ -1247,7 +1247,7 @@ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const Initi _initData.valueFactoryManager = make_shared(); } - _outgoingConnectionFactory = new OutgoingConnectionFactory(communicator, this); + _outgoingConnectionFactory = make_shared(communicator, this); _objectAdapterFactory = make_shared(this, communicator); diff --git a/cpp/src/Ice/LocatorInfo.cpp b/cpp/src/Ice/LocatorInfo.cpp index 562f716cfb7..8437299f910 100644 --- a/cpp/src/Ice/LocatorInfo.cpp +++ b/cpp/src/Ice/LocatorInfo.cpp @@ -19,14 +19,10 @@ using namespace std; using namespace Ice; using namespace IceInternal; -IceUtil::Shared* IceInternal::upCast(LocatorManager* p) { return p; } -IceUtil::Shared* IceInternal::upCast(LocatorInfo* p) { return p; } -IceUtil::Shared* IceInternal::upCast(LocatorTable* p) { return p; } - namespace { -class ObjectRequest : public LocatorInfo::Request +class ObjectRequest final : public LocatorInfo::Request, public std::enable_shared_from_this { public: @@ -39,7 +35,7 @@ class ObjectRequest : public LocatorInfo::Request { try { - LocatorInfo::RequestPtr request = this; + LocatorInfo::RequestPtr request = shared_from_this(); _locatorInfo->getLocator()->findObjectByIdAsync( _reference->getIdentity(), [request](const ObjectPrxPtr& object) @@ -65,7 +61,7 @@ class ObjectRequest : public LocatorInfo::Request } }; -class AdapterRequest : public LocatorInfo::Request +class AdapterRequest final : public LocatorInfo::Request, public std::enable_shared_from_this { public: @@ -78,7 +74,7 @@ class AdapterRequest : public LocatorInfo::Request { try { - LocatorInfo::RequestPtr request = this; + LocatorInfo::RequestPtr request = shared_from_this(); _locatorInfo->getLocator()->findAdapterByIdAsync(_reference->getAdapterId(), [request](const shared_ptr& object) { @@ -393,7 +389,7 @@ IceInternal::LocatorInfo::Request::addCallback(const ReferencePtr& ref, int ttl, const GetEndpointsCallbackPtr& cb) { - RequestCallbackPtr callback = new RequestCallback(ref, ttl, cb); + RequestCallbackPtr callback = make_shared(ref, ttl, cb); { unique_lock lock(_mutex); if(!_response && !_exception) @@ -783,7 +779,7 @@ IceInternal::LocatorInfo::getAdapterRequest(const ReferencePtr& ref) return p->second; } - RequestPtr request = new AdapterRequest(this, ref); + RequestPtr request = make_shared(shared_from_this(), ref); _adapterRequests.insert(make_pair(ref->getAdapterId(), request)); return request; } @@ -803,7 +799,7 @@ IceInternal::LocatorInfo::getObjectRequest(const ReferencePtr& ref) { return p->second; } - RequestPtr request = new ObjectRequest(this, ref); + RequestPtr request = make_shared(shared_from_this(), ref); _objectRequests.insert(make_pair(ref->getIdentity(), request)); return request; } diff --git a/cpp/src/Ice/LocatorInfo.h b/cpp/src/Ice/LocatorInfo.h index dc2e8ca8ab3..7c8df36ee87 100644 --- a/cpp/src/Ice/LocatorInfo.h +++ b/cpp/src/Ice/LocatorInfo.h @@ -21,7 +21,7 @@ namespace IceInternal { -class LocatorManager : public IceUtil::Shared +class LocatorManager final { public: @@ -49,7 +49,7 @@ class LocatorManager : public IceUtil::Shared std::mutex _mutex; }; -class LocatorTable : public IceUtil::Shared +class LocatorTable final { public: @@ -74,20 +74,20 @@ class LocatorTable : public IceUtil::Shared std::mutex _mutex; }; -class LocatorInfo : public IceUtil::Shared +class LocatorInfo final : public std::enable_shared_from_this { public: - class GetEndpointsCallback : public virtual IceUtil::Shared + class GetEndpointsCallback { public: virtual void setEndpoints(const std::vector&, bool) = 0; virtual void setException(const Ice::LocalException&) = 0; }; - typedef IceUtil::Handle GetEndpointsCallbackPtr; + using GetEndpointsCallbackPtr = std::shared_ptr; - class RequestCallback : public virtual IceUtil::Shared + class RequestCallback final { public: @@ -102,9 +102,9 @@ class LocatorInfo : public IceUtil::Shared const int _ttl; const GetEndpointsCallbackPtr _callback; }; - typedef IceUtil::Handle RequestCallbackPtr; + using RequestCallbackPtr = std::shared_ptr; - class Request : public virtual IceUtil::Shared + class Request { public: @@ -132,7 +132,7 @@ class LocatorInfo : public IceUtil::Shared Ice::ObjectPrxPtr _proxy; std::unique_ptr _exception; }; - typedef IceUtil::Handle RequestPtr; + using RequestPtr = std::shared_ptr; LocatorInfo(const Ice::LocatorPrxPtr&, const LocatorTablePtr&, bool); diff --git a/cpp/src/Ice/LocatorInfoF.h b/cpp/src/Ice/LocatorInfoF.h index fd689ce26b9..5d31db0d800 100644 --- a/cpp/src/Ice/LocatorInfoF.h +++ b/cpp/src/Ice/LocatorInfoF.h @@ -5,24 +5,19 @@ #ifndef ICE_LOCATOR_INFO_F_H #define ICE_LOCATOR_INFO_F_H -#include - -#include +#include namespace IceInternal { class LocatorManager; -IceUtil::Shared* upCast(LocatorManager*); -typedef Handle LocatorManagerPtr; +using LocatorManagerPtr = std::shared_ptr; class LocatorInfo; -IceUtil::Shared* upCast(LocatorInfo*); -typedef Handle LocatorInfoPtr; +using LocatorInfoPtr = std::shared_ptr; class LocatorTable; -IceUtil::Shared* upCast(LocatorTable*); -typedef Handle LocatorTablePtr; +using LocatorTablePtr = std::shared_ptr; } diff --git a/cpp/src/Ice/Network.h b/cpp/src/Ice/Network.h index b96bb058f74..b37466fb844 100644 --- a/cpp/src/Ice/Network.h +++ b/cpp/src/Ice/Network.h @@ -128,7 +128,7 @@ struct ICE_API AsyncInfo : WSAOVERLAPPED }; #endif -class ICE_API ReadyCallback : public virtual ::IceUtil::Shared +class ICE_API ReadyCallback { public: @@ -136,9 +136,9 @@ class ICE_API ReadyCallback : public virtual ::IceUtil::Shared virtual void ready(SocketOperation, bool) = 0; }; -typedef IceUtil::Handle ReadyCallbackPtr; +using ReadyCallbackPtr = std::shared_ptr; -class ICE_API NativeInfo : public virtual IceUtil::Shared +class ICE_API NativeInfo { public: @@ -188,7 +188,7 @@ class ICE_API NativeInfo : public virtual IceUtil::Shared SOCKET _newFd; #endif }; -typedef IceUtil::Handle NativeInfoPtr; +using NativeInfoPtr = std::shared_ptr; ICE_API bool noMoreFds(int); ICE_API std::string errorToStringDNS(int); diff --git a/cpp/src/Ice/NetworkF.h b/cpp/src/Ice/NetworkF.h index 56f0b2753e1..cd22e56e93a 100644 --- a/cpp/src/Ice/NetworkF.h +++ b/cpp/src/Ice/NetworkF.h @@ -5,10 +5,6 @@ #ifndef ICE_NETWORK_F_H #define ICE_NETWORK_F_H -#include - -#include - namespace IceInternal { diff --git a/cpp/src/Ice/PluginManagerI.h b/cpp/src/Ice/PluginManagerI.h index d04838279bb..442b1eda7b8 100644 --- a/cpp/src/Ice/PluginManagerI.h +++ b/cpp/src/Ice/PluginManagerI.h @@ -56,7 +56,6 @@ class PluginManagerI : public PluginManager std::mutex _mutex; static const char * const _kindOfObject; }; -typedef IceUtil::Handle PluginManagerIPtr; } diff --git a/cpp/src/Ice/Reference.cpp b/cpp/src/Ice/Reference.cpp index 7a840e78b44..790e218a12c 100644 --- a/cpp/src/Ice/Reference.cpp +++ b/cpp/src/Ice/Reference.cpp @@ -1236,11 +1236,11 @@ IceInternal::RoutableReference::operator==(const Reference& r) const { return false; } - if(_routerInfo != rhs->_routerInfo) + if(!Ice::targetEqualTo(_routerInfo, rhs->_routerInfo)) { return false; } - if(_locatorInfo != rhs->_locatorInfo) + if(!Ice::targetEqualTo(_locatorInfo, rhs->_locatorInfo)) { return false; } @@ -1348,19 +1348,19 @@ IceInternal::RoutableReference::operator<(const Reference& r) const return false; } } - if(_routerInfo < rhs->_routerInfo) + if(Ice::targetLess(_routerInfo, rhs->_routerInfo)) { return true; } - else if(rhs->_routerInfo < _routerInfo) + else if(Ice::targetLess(rhs->_routerInfo, _routerInfo)) { return false; } - if(_locatorInfo < rhs->_locatorInfo) + if(Ice::targetLess(_locatorInfo, rhs->_locatorInfo)) { return true; } - else if(rhs->_locatorInfo < _locatorInfo) + else if(Ice::targetLess(rhs->_locatorInfo, _locatorInfo)) { return false; } @@ -1414,12 +1414,11 @@ IceInternal::RoutableReference::getBatchRequestQueue() const void IceInternal::RoutableReference::getConnection(const GetConnectionCallbackPtr& callback) const { - class Callback : public RouterInfo::GetClientEndpointsCallback + class Callback final : public RouterInfo::GetClientEndpointsCallback { public: - virtual void - setEndpoints(const vector& endpoints) + void setEndpoints(const vector& endpoints) final { vector endpts = endpoints; if(!endpts.empty()) @@ -1432,8 +1431,7 @@ IceInternal::RoutableReference::getConnection(const GetConnectionCallbackPtr& ca _reference->getConnectionNoRouterInfo(_callback); } - virtual void - setException(const Ice::LocalException& ex) + void setException(const Ice::LocalException& ex) final { _callback->setException(ex); } @@ -1456,7 +1454,7 @@ IceInternal::RoutableReference::getConnection(const GetConnectionCallbackPtr& ca // proxy endpoints. // _routerInfo->getClientEndpoints( - new Callback( + make_shared( dynamic_pointer_cast(const_cast(this)->shared_from_this()), callback)); return; @@ -1468,7 +1466,7 @@ IceInternal::RoutableReference::getConnection(const GetConnectionCallbackPtr& ca void IceInternal::RoutableReference::getConnectionNoRouterInfo(const GetConnectionCallbackPtr& callback) const { - class Callback : public LocatorInfo::GetEndpointsCallback + class Callback final : public LocatorInfo::GetEndpointsCallback { public: @@ -1476,14 +1474,12 @@ IceInternal::RoutableReference::getConnectionNoRouterInfo(const GetConnectionCal { public: - virtual void - setConnection(const Ice::ConnectionIPtr& connection, bool compress) + void setConnection(const Ice::ConnectionIPtr& connection, bool compress) final { _callback->setConnection(connection, compress); } - virtual void - setException(const Ice::LocalException& exc) + void setException(const Ice::LocalException& exc) final { try { @@ -1526,8 +1522,7 @@ IceInternal::RoutableReference::getConnectionNoRouterInfo(const GetConnectionCal const bool _cached; }; - virtual void - setEndpoints(const vector& endpoints, bool cached) + void setEndpoints(const vector& endpoints, bool cached) final { if(endpoints.empty()) { @@ -1540,8 +1535,7 @@ IceInternal::RoutableReference::getConnectionNoRouterInfo(const GetConnectionCal _reference->createConnection(endpts, make_shared(_reference, _callback, cached)); } - virtual void - setException(const Ice::LocalException& ex) + void setException(const Ice::LocalException& ex) final { _callback->setException(ex); } @@ -1567,7 +1561,7 @@ IceInternal::RoutableReference::getConnectionNoRouterInfo(const GetConnectionCal { RoutableReferencePtr self = dynamic_pointer_cast( const_cast(this)->shared_from_this()); - _locatorInfo->getEndpoints(self, _locatorCacheTimeout, new Callback(self, callback)); + _locatorInfo->getEndpoints(self, _locatorCacheTimeout, make_shared(self, callback)); } else { @@ -1592,12 +1586,11 @@ IceInternal::RoutableReference::createConnection(const vector& all OutgoingConnectionFactoryPtr factory = getInstance()->outgoingConnectionFactory(); if(getCacheConnection() || endpoints.size() == 1) { - class CB1 : public OutgoingConnectionFactory::CreateConnectionCallback + class CB1 final : public OutgoingConnectionFactory::CreateConnectionCallback { public: - virtual void - setConnection(const Ice::ConnectionIPtr& connection, bool compress) + void setConnection(const Ice::ConnectionIPtr& connection, bool compress) final { // // If we have a router, set the object adapter for this router @@ -1611,8 +1604,7 @@ IceInternal::RoutableReference::createConnection(const vector& all _callback->setConnection(connection, compress); } - virtual void - setException(const Ice::LocalException& ex) + void setException(const Ice::LocalException& ex) final { _callback->setException(ex); } @@ -1632,17 +1624,18 @@ IceInternal::RoutableReference::createConnection(const vector& all // Get an existing connection or create one if there's no // existing connection to one of the given endpoints. // - factory->create(endpoints, false, getEndpointSelection(), new CB1(_routerInfo, callback)); + factory->create(endpoints, false, getEndpointSelection(), make_shared(_routerInfo, callback)); return; } else { - class CB2 : public OutgoingConnectionFactory::CreateConnectionCallback + class CB2 final : + public OutgoingConnectionFactory::CreateConnectionCallback, + public std::enable_shared_from_this { public: - virtual void - setConnection(const Ice::ConnectionIPtr& connection, bool compress) + void setConnection(const Ice::ConnectionIPtr& connection, bool compress) final { // // If we have a router, set the object adapter for this router @@ -1656,8 +1649,7 @@ IceInternal::RoutableReference::createConnection(const vector& all _callback->setConnection(connection, compress); } - virtual void - setException(const Ice::LocalException& ex) + void setException(const Ice::LocalException& ex) final { if(!_exception) { @@ -1675,7 +1667,7 @@ IceInternal::RoutableReference::createConnection(const vector& all endpoint.push_back(_endpoints[_i]); OutgoingConnectionFactoryPtr factory = _reference->getInstance()->outgoingConnectionFactory(); - factory->create(endpoint, more, _reference->getEndpointSelection(), this); + factory->create(endpoint, more, _reference->getEndpointSelection(), shared_from_this()); } CB2(const RoutableReferencePtr& reference, const vector& endpoints, @@ -1708,7 +1700,7 @@ IceInternal::RoutableReference::createConnection(const vector& all endpt.push_back(endpoints[0]); RoutableReferencePtr self = dynamic_pointer_cast( const_cast(this)->shared_from_this()); - factory->create(endpt, true, getEndpointSelection(), new CB2(self, endpoints, callback)); + factory->create(endpt, true, getEndpointSelection(), make_shared(self, endpoints, callback)); return; } } diff --git a/cpp/src/Ice/RouterInfo.cpp b/cpp/src/Ice/RouterInfo.cpp index 4205b8c2d15..1df4214ad3a 100644 --- a/cpp/src/Ice/RouterInfo.cpp +++ b/cpp/src/Ice/RouterInfo.cpp @@ -12,9 +12,6 @@ using namespace std; using namespace Ice; using namespace IceInternal; -IceUtil::Shared* IceInternal::upCast(RouterManager* p) { return p; } -IceUtil::Shared* IceInternal::upCast(RouterInfo* p) { return p; } - IceInternal::RouterManager::RouterManager() : _tableHint(_table.end()) { @@ -38,7 +35,7 @@ IceInternal::RouterManager::get(const RouterPrxPtr& rtr) { if(!rtr) { - return 0; + return nullptr; } RouterPrxPtr router = rtr->ice_router(0); // The router cannot be routed. @@ -176,7 +173,7 @@ IceInternal::RouterInfo::getClientEndpoints(const GetClientEndpointsCallbackPtr& return; } - RouterInfoPtr self = this; + RouterInfoPtr self = shared_from_this(); _router->getClientProxyAsync( [self, callback](const Ice::ObjectPrxPtr& proxy, optional hasRoutingTable) { @@ -241,9 +238,9 @@ IceInternal::RouterInfo::addProxy(const Ice::ObjectPrxPtr& proxy, const AddProxy Ice::ObjectProxySeq proxies; proxies.push_back(proxy); - AddProxyCookiePtr cookie = new AddProxyCookie(callback, proxy); + auto cookie = make_shared(callback, proxy); - RouterInfoPtr self = this; + RouterInfoPtr self = shared_from_this(); _router->addProxiesAsync(proxies, [self, cookie](const Ice::ObjectProxySeq& p) { diff --git a/cpp/src/Ice/RouterInfo.h b/cpp/src/Ice/RouterInfo.h index 49212538015..adf0306c8f9 100644 --- a/cpp/src/Ice/RouterInfo.h +++ b/cpp/src/Ice/RouterInfo.h @@ -20,7 +20,7 @@ namespace IceInternal { -class RouterManager : public IceUtil::Shared +class RouterManager final { public: @@ -46,18 +46,18 @@ class RouterManager : public IceUtil::Shared std::mutex _mutex; }; -class RouterInfo : public IceUtil::Shared +class RouterInfo final : public std::enable_shared_from_this { public: - class GetClientEndpointsCallback : public virtual Ice::LocalObject + class GetClientEndpointsCallback { public: virtual void setEndpoints(const std::vector&) = 0; virtual void setException(const Ice::LocalException&) = 0; }; - typedef IceUtil::Handle GetClientEndpointsCallbackPtr; + using GetClientEndpointsCallbackPtr = std::shared_ptr; class AddProxyCallback { @@ -89,7 +89,7 @@ class RouterInfo : public IceUtil::Shared void getClientEndpoints(const GetClientEndpointsCallbackPtr&); std::vector getServerEndpoints(); - class AddProxyCookie : public Ice::LocalObject + class AddProxyCookie final { public: @@ -114,7 +114,7 @@ class RouterInfo : public IceUtil::Shared const AddProxyCallbackPtr _cb; const Ice::ObjectPrxPtr _proxy; }; - typedef IceUtil::Handle AddProxyCookiePtr; + using AddProxyCookiePtr = std::shared_ptr; void addProxyResponse(const Ice::ObjectProxySeq&, const AddProxyCookiePtr&); void addProxyException(const Ice::Exception&, const AddProxyCookiePtr&); diff --git a/cpp/src/Ice/RouterInfoF.h b/cpp/src/Ice/RouterInfoF.h index 971a0fa0ff6..f0a0c564caf 100644 --- a/cpp/src/Ice/RouterInfoF.h +++ b/cpp/src/Ice/RouterInfoF.h @@ -13,12 +13,10 @@ namespace IceInternal { class RouterManager; -IceUtil::Shared* upCast(RouterManager*); -typedef Handle RouterManagerPtr; +using RouterManagerPtr = std::shared_ptr; class RouterInfo; -IceUtil::Shared* upCast(RouterInfo*); -typedef Handle RouterInfoPtr; +using RouterInfoPtr = std::shared_ptr; } diff --git a/cpp/src/Ice/ServantManager.cpp b/cpp/src/Ice/ServantManager.cpp index 2c202651a88..8511d521c47 100644 --- a/cpp/src/Ice/ServantManager.cpp +++ b/cpp/src/Ice/ServantManager.cpp @@ -13,8 +13,6 @@ using namespace std; using namespace Ice; using namespace IceInternal; -ICE_API IceUtil::Shared* IceInternal::upCast(ServantManager* p) { return p; } - void IceInternal::ServantManager::addServant(const shared_ptr& object, const Identity& ident, const string& facet) { diff --git a/cpp/src/Ice/ServantManager.h b/cpp/src/Ice/ServantManager.h index 2ac8c7ffd9e..19c32eeae87 100644 --- a/cpp/src/Ice/ServantManager.h +++ b/cpp/src/Ice/ServantManager.h @@ -24,10 +24,12 @@ class ServantLocator; namespace IceInternal { -class ServantManager : public IceUtil::Shared +class ServantManager { public: + ServantManager(const InstancePtr&, const std::string&); + ~ServantManager(); void addServant(const std::shared_ptr&, const Ice::Identity&, const std::string&); void addDefaultServant(const std::shared_ptr&, const std::string&); std::shared_ptr removeServant(const Ice::Identity&, const std::string&); @@ -44,8 +46,6 @@ class ServantManager : public IceUtil::Shared private: - ServantManager(const InstancePtr&, const std::string&); - ~ServantManager(); void destroy(); friend class Ice::ObjectAdapterI; diff --git a/cpp/src/Ice/StreamSocket.h b/cpp/src/Ice/StreamSocket.h index 6eb17bf90fc..632b0ebc806 100644 --- a/cpp/src/Ice/StreamSocket.h +++ b/cpp/src/Ice/StreamSocket.h @@ -78,7 +78,7 @@ class ICE_API StreamSocket : public NativeInfo AsyncInfo _write; #endif }; -typedef IceUtil::Handle StreamSocketPtr; +using StreamSocketPtr = std::shared_ptr; } diff --git a/cpp/src/Ice/TcpAcceptor.cpp b/cpp/src/Ice/TcpAcceptor.cpp index dc2c2c2ec04..42ffad5f4a4 100644 --- a/cpp/src/Ice/TcpAcceptor.cpp +++ b/cpp/src/Ice/TcpAcceptor.cpp @@ -31,12 +31,10 @@ using namespace std; using namespace Ice; using namespace IceInternal; -IceUtil::Shared* IceInternal::upCast(TcpAcceptor* p) { return p; } - NativeInfoPtr IceInternal::TcpAcceptor::getNativeInfo() { - return this; + return shared_from_this(); } void @@ -69,7 +67,7 @@ IceInternal::TcpAcceptor::listen() _fd = INVALID_SOCKET; throw; } - _endpoint = _endpoint->endpoint(this); + _endpoint = _endpoint->endpoint(shared_from_this()); return _endpoint; } @@ -141,14 +139,14 @@ IceInternal::TcpAcceptor::accept() SOCKET fd = _acceptFd; _acceptFd = INVALID_SOCKET; - return new TcpTransceiver(_instance, new StreamSocket(_instance, fd)); + return make_shared(_instance, make_shared(_instance, fd)); } #else TransceiverPtr IceInternal::TcpAcceptor::accept() { - return new TcpTransceiver(_instance, new StreamSocket(_instance, doAccept(_fd))); + return make_shared(_instance, make_shared(_instance, doAccept(_fd))); } #endif diff --git a/cpp/src/Ice/TcpAcceptor.h b/cpp/src/Ice/TcpAcceptor.h index 66b9594f32e..2a09da346af 100644 --- a/cpp/src/Ice/TcpAcceptor.h +++ b/cpp/src/Ice/TcpAcceptor.h @@ -15,10 +15,12 @@ namespace IceInternal class TcpEndpoint; -class TcpAcceptor : public Acceptor, public NativeInfo +class TcpAcceptor : public Acceptor, public NativeInfo, public std::enable_shared_from_this { public: + TcpAcceptor(const TcpEndpointIPtr&, const ProtocolInstancePtr&, const std::string&, int); + virtual ~TcpAcceptor(); virtual NativeInfoPtr getNativeInfo(); #if defined(ICE_USE_IOCP) virtual AsyncInfo* getAsyncInfo(SocketOperation); @@ -40,8 +42,6 @@ class TcpAcceptor : public Acceptor, public NativeInfo private: - TcpAcceptor(const TcpEndpointIPtr&, const ProtocolInstancePtr&, const std::string&, int); - virtual ~TcpAcceptor(); friend class TcpEndpointI; TcpEndpointIPtr _endpoint; diff --git a/cpp/src/Ice/TcpConnector.cpp b/cpp/src/Ice/TcpConnector.cpp index 39346fb4524..31893c2b3b5 100644 --- a/cpp/src/Ice/TcpConnector.cpp +++ b/cpp/src/Ice/TcpConnector.cpp @@ -23,7 +23,7 @@ using namespace IceInternal; TransceiverPtr IceInternal::TcpConnector::connect() { - return new TcpTransceiver(_instance, new StreamSocket(_instance, _proxy, _addr, _sourceAddr)); + return make_shared(_instance, make_shared(_instance, _proxy, _addr, _sourceAddr)); } Short diff --git a/cpp/src/Ice/TcpConnector.h b/cpp/src/Ice/TcpConnector.h index e7726f979b9..0444bc5142e 100644 --- a/cpp/src/Ice/TcpConnector.h +++ b/cpp/src/Ice/TcpConnector.h @@ -17,6 +17,9 @@ class TcpConnector : public Connector { public: + TcpConnector(const ProtocolInstancePtr&, const Address&, const NetworkProxyPtr&, const Address&, Ice::Int, + const std::string&); + virtual ~TcpConnector(); virtual TransceiverPtr connect(); virtual Ice::Short type() const; @@ -27,11 +30,6 @@ class TcpConnector : public Connector private: - TcpConnector(const ProtocolInstancePtr&, const Address&, const NetworkProxyPtr&, const Address&, Ice::Int, - const std::string&); - virtual ~TcpConnector(); - friend class TcpEndpointI; - const ProtocolInstancePtr _instance; const Address _addr; const NetworkProxyPtr _proxy; diff --git a/cpp/src/Ice/TcpEndpointI.cpp b/cpp/src/Ice/TcpEndpointI.cpp index aa35a03e1d1..3e631604414 100644 --- a/cpp/src/Ice/TcpEndpointI.cpp +++ b/cpp/src/Ice/TcpEndpointI.cpp @@ -27,7 +27,7 @@ extern "C" Plugin* createIceTCP(const CommunicatorPtr& c, const string&, const StringSeq&) { - return new EndpointFactoryPlugin(c, new TcpEndpointFactory(new ProtocolInstance(c, TCPEndpointType, "tcp", false))); + return new EndpointFactoryPlugin(c, make_shared(new ProtocolInstance(c, TCPEndpointType, "tcp", false))); } } @@ -68,7 +68,7 @@ IceInternal::TcpEndpointI::streamWriteImpl(OutputStream* s) const EndpointInfoPtr IceInternal::TcpEndpointI::getInfo() const noexcept { - auto info = make_shared>(ICE_SHARED_FROM_CONST_THIS(TcpEndpointI)); + auto info = make_shared>(const_cast(this)->shared_from_this()); fillEndpointInfo(info.get()); return info; } @@ -84,7 +84,7 @@ IceInternal::TcpEndpointI::timeout(Int timeout) const { if(timeout == _timeout) { - return ICE_SHARED_FROM_CONST_THIS(TcpEndpointI); + return const_cast(this)->shared_from_this(); } else { @@ -103,7 +103,7 @@ IceInternal::TcpEndpointI::compress(bool compress) const { if(compress == _compress) { - return ICE_SHARED_FROM_CONST_THIS(TcpEndpointI); + return const_cast(this)->shared_from_this(); } else { @@ -126,7 +126,11 @@ IceInternal::TcpEndpointI::transceiver() const AcceptorPtr IceInternal::TcpEndpointI::acceptor(const string&) const { - return new TcpAcceptor(ICE_DYNAMIC_CAST(TcpEndpointI, ICE_SHARED_FROM_CONST_THIS(TcpEndpointI)), _instance, _host, _port); + return make_shared( + dynamic_pointer_cast(const_cast(this)->shared_from_this()), + _instance, + _host, + _port); } TcpEndpointIPtr @@ -135,7 +139,7 @@ IceInternal::TcpEndpointI::endpoint(const TcpAcceptorPtr& acceptor) const int port = acceptor->effectivePort(); if(_port == port) { - return ICE_DYNAMIC_CAST(TcpEndpointI, ICE_SHARED_FROM_CONST_THIS(TcpEndpointI)); + return dynamic_pointer_cast(const_cast(this)->shared_from_this()); } else { @@ -316,7 +320,7 @@ IceInternal::TcpEndpointI::checkOption(const string& option, const string& argum ConnectorPtr IceInternal::TcpEndpointI::createConnector(const Address& address, const NetworkProxyPtr& proxy) const { - return new TcpConnector(_instance, address, proxy, _sourceAddr, _timeout, _connectionId); + return make_shared(_instance, address, proxy, _sourceAddr, _timeout, _connectionId); } IPEndpointIPtr @@ -362,12 +366,12 @@ IceInternal::TcpEndpointFactory::read(InputStream* s) const void IceInternal::TcpEndpointFactory::destroy() { - _instance = 0; + _instance = nullptr; } EndpointFactoryPtr IceInternal::TcpEndpointFactory::clone(const ProtocolInstancePtr& instance) const { - return new TcpEndpointFactory(instance); + return make_shared(instance); } #endif diff --git a/cpp/src/Ice/TcpTransceiver.h b/cpp/src/Ice/TcpTransceiver.h index 67ebec7b199..f0db09b989a 100644 --- a/cpp/src/Ice/TcpTransceiver.h +++ b/cpp/src/Ice/TcpTransceiver.h @@ -16,36 +16,35 @@ namespace IceInternal class TcpConnector; class TcpAcceptor; -class TcpTransceiver : public Transceiver +class TcpTransceiver final : public Transceiver { public: - virtual NativeInfoPtr getNativeInfo(); + TcpTransceiver(const ProtocolInstancePtr&, const StreamSocketPtr&); + ~TcpTransceiver(); + NativeInfoPtr getNativeInfo() final; - virtual SocketOperation initialize(Buffer&, Buffer&); - virtual SocketOperation closing(bool, const Ice::LocalException&); + SocketOperation initialize(Buffer&, Buffer&) final; + SocketOperation closing(bool, const Ice::LocalException&) final; - virtual void close(); - virtual SocketOperation write(Buffer&); - virtual SocketOperation read(Buffer&); + void close() final; + SocketOperation write(Buffer&) final; + SocketOperation read(Buffer&) final; #if defined(ICE_USE_IOCP) - virtual bool startWrite(Buffer&); - virtual void finishWrite(Buffer&); - virtual void startRead(Buffer&); - virtual void finishRead(Buffer&); + bool startWrite(Buffer&) final; + void finishWrite(Buffer&) final; + void startRead(Buffer&) final; + void finishRead(Buffer&) final; #endif - virtual std::string protocol() const; - virtual std::string toString() const; - virtual std::string toDetailedString() const; - virtual Ice::ConnectionInfoPtr getInfo() const; - virtual void checkSendSize(const Buffer&); - virtual void setBufferSize(int rcvSize, int sndSize); + std::string protocol() const final; + std::string toString() const final; + std::string toDetailedString() const final; + Ice::ConnectionInfoPtr getInfo() const final; + void checkSendSize(const Buffer&) final; + void setBufferSize(int rcvSize, int sndSize) final; private: - TcpTransceiver(const ProtocolInstancePtr&, const StreamSocketPtr&); - virtual ~TcpTransceiver(); - friend class TcpConnector; friend class TcpAcceptor; diff --git a/cpp/src/Ice/ThreadPool.cpp b/cpp/src/Ice/ThreadPool.cpp index 944ee236c9b..232823e16c2 100644 --- a/cpp/src/Ice/ThreadPool.cpp +++ b/cpp/src/Ice/ThreadPool.cpp @@ -504,7 +504,7 @@ IceInternal::ThreadPool::initialize(const EventHandlerPtr& handler) const ThreadPoolPtr _threadPool; const EventHandlerPtr _handler; }; - handler->getNativeInfo()->setReadyCallback(new ReadyCallbackI(this, handler)); + handler->getNativeInfo()->setReadyCallback(make_shared(this, handler)); } void diff --git a/cpp/src/Ice/Transceiver.cpp b/cpp/src/Ice/Transceiver.cpp index 83de3162a82..0066821df7f 100644 --- a/cpp/src/Ice/Transceiver.cpp +++ b/cpp/src/Ice/Transceiver.cpp @@ -8,11 +8,9 @@ using namespace std; using namespace Ice; using namespace IceInternal; -IceUtil::Shared* IceInternal::upCast(Transceiver* p) { return p; } - EndpointIPtr IceInternal::Transceiver::bind() { assert(false); - return 0; + return nullptr; } diff --git a/cpp/src/Ice/Transceiver.h b/cpp/src/Ice/Transceiver.h index 51e51345f63..a11aeba1ca6 100644 --- a/cpp/src/Ice/Transceiver.h +++ b/cpp/src/Ice/Transceiver.h @@ -16,7 +16,7 @@ namespace IceInternal class Buffer; -class ICE_API Transceiver : public virtual ::IceUtil::Shared +class ICE_API Transceiver { public: diff --git a/cpp/src/Ice/TransceiverF.h b/cpp/src/Ice/TransceiverF.h index d40a5926a83..6f11197fd36 100644 --- a/cpp/src/Ice/TransceiverF.h +++ b/cpp/src/Ice/TransceiverF.h @@ -13,20 +13,16 @@ namespace IceInternal { class Transceiver; -ICE_API IceUtil::Shared* upCast(Transceiver*); -typedef Handle TransceiverPtr; +using TransceiverPtr = std::shared_ptr; class TcpTransceiver; -ICE_API IceUtil::Shared* upCast(TcpTransceiver*); -typedef Handle TcpTransceiverPtr; +using TcpTransceiverPtr = std::shared_ptr; class UdpTransceiver; -ICE_API IceUtil::Shared* upCast(UdpTransceiver*); -typedef Handle UdpTransceiverPtr; +using UdpTransceiverPtr = std::shared_ptr; class WSTransceiver; -ICE_API IceUtil::Shared* upCast(WSTransceiver*); -typedef Handle WSTransceiverPtr; +using WSTransceiverPtr = std::shared_ptr; } diff --git a/cpp/src/Ice/UdpConnector.cpp b/cpp/src/Ice/UdpConnector.cpp index 02d167dd85e..cb0183aea0a 100644 --- a/cpp/src/Ice/UdpConnector.cpp +++ b/cpp/src/Ice/UdpConnector.cpp @@ -15,7 +15,7 @@ using namespace IceInternal; TransceiverPtr IceInternal::UdpConnector::connect() { - return new UdpTransceiver(_instance, _addr, _sourceAddr, _mcastInterface, _mcastTtl); + return make_shared(_instance, _addr, _sourceAddr, _mcastInterface, _mcastTtl); } Short diff --git a/cpp/src/Ice/UdpConnector.h b/cpp/src/Ice/UdpConnector.h index 56bd2f6cb6d..08ab26d99c4 100644 --- a/cpp/src/Ice/UdpConnector.h +++ b/cpp/src/Ice/UdpConnector.h @@ -17,6 +17,10 @@ class UdpConnector : public Connector { public: + UdpConnector(const ProtocolInstancePtr&, const Address&, const Address&, const std::string&, int, + const std::string&); + + virtual ~UdpConnector(); virtual TransceiverPtr connect(); virtual Ice::Short type() const; @@ -27,12 +31,6 @@ class UdpConnector : public Connector private: - UdpConnector(const ProtocolInstancePtr&, const Address&, const Address&, const std::string&, int, - const std::string&); - - virtual ~UdpConnector(); - friend class UdpEndpointI; - const ProtocolInstancePtr _instance; const Address _addr; const Address _sourceAddr; diff --git a/cpp/src/Ice/UdpEndpointI.cpp b/cpp/src/Ice/UdpEndpointI.cpp index f599daaed1d..957d9465892 100644 --- a/cpp/src/Ice/UdpEndpointI.cpp +++ b/cpp/src/Ice/UdpEndpointI.cpp @@ -24,7 +24,7 @@ extern "C" Plugin* createIceUDP(const CommunicatorPtr& c, const string&, const StringSeq&) { - return new EndpointFactoryPlugin(c, new UdpEndpointFactory(new ProtocolInstance(c, UDPEndpointType, "udp", false))); + return new EndpointFactoryPlugin(c, make_shared(new ProtocolInstance(c, UDPEndpointType, "udp", false))); } } @@ -96,7 +96,7 @@ EndpointInfoPtr IceInternal::UdpEndpointI::getInfo() const noexcept { auto info = make_shared>( - dynamic_pointer_cast(ICE_SHARED_FROM_CONST_THIS(UdpEndpointI))); + dynamic_pointer_cast(const_cast(this)->shared_from_this())); fillEndpointInfo(info.get()); return info; } @@ -110,7 +110,7 @@ IceInternal::UdpEndpointI::timeout() const EndpointIPtr IceInternal::UdpEndpointI::timeout(Int) const { - return ICE_SHARED_FROM_CONST_THIS(UdpEndpointI); + return const_cast(this)->shared_from_this(); } bool @@ -124,7 +124,7 @@ IceInternal::UdpEndpointI::compress(bool compress) const { if(compress == _compress) { - return ICE_SHARED_FROM_CONST_THIS(UdpEndpointI); + return const_cast(this)->shared_from_this(); } else { @@ -142,8 +142,13 @@ IceInternal::UdpEndpointI::datagram() const TransceiverPtr IceInternal::UdpEndpointI::transceiver() const { - return new UdpTransceiver(ICE_DYNAMIC_CAST(UdpEndpointI, ICE_SHARED_FROM_CONST_THIS(UdpEndpointI)), _instance, - _host, _port, _mcastInterface, _connect); + return make_shared( + dynamic_pointer_cast(const_cast(this)->shared_from_this()), + _instance, + _host, + _port, + _mcastInterface, + _connect); } AcceptorPtr @@ -158,7 +163,7 @@ IceInternal::UdpEndpointI::endpoint(const UdpTransceiverPtr& transceiver) const int port = transceiver->effectivePort(); if(port == _port) { - return ICE_DYNAMIC_CAST(UdpEndpointI, ICE_SHARED_FROM_CONST_THIS(UdpEndpointI)); + return dynamic_pointer_cast(const_cast(this)->shared_from_this()); } else { @@ -437,7 +442,7 @@ IceInternal::UdpEndpointI::checkOption(const string& option, const string& argum ConnectorPtr IceInternal::UdpEndpointI::createConnector(const Address& address, const NetworkProxyPtr&) const { - return new UdpConnector(_instance, address, _sourceAddr, _mcastInterface, _mcastTtl, _connectionId); + return make_shared(_instance, address, _sourceAddr, _mcastInterface, _mcastTtl, _connectionId); } IPEndpointIPtr @@ -470,7 +475,7 @@ IceInternal::UdpEndpointFactory::protocol() const EndpointIPtr IceInternal::UdpEndpointFactory::create(vector& args, bool oaEndpoint) const { - IPEndpointIPtr endpt = make_shared(_instance); + auto endpt = make_shared(_instance); endpt->initWithOptions(args, oaEndpoint); return endpt; } @@ -490,5 +495,5 @@ IceInternal::UdpEndpointFactory::destroy() EndpointFactoryPtr IceInternal::UdpEndpointFactory::clone(const ProtocolInstancePtr& instance) const { - return new UdpEndpointFactory(instance); + return make_shared(instance); } diff --git a/cpp/src/Ice/UdpTransceiver.cpp b/cpp/src/Ice/UdpTransceiver.cpp index 1cbe3271ee1..82b082fffbd 100644 --- a/cpp/src/Ice/UdpTransceiver.cpp +++ b/cpp/src/Ice/UdpTransceiver.cpp @@ -16,12 +16,10 @@ using namespace std; using namespace Ice; using namespace IceInternal; -IceUtil::Shared* IceInternal::upCast(UdpTransceiver* p) { return p; } - NativeInfoPtr IceInternal::UdpTransceiver::getNativeInfo() { - return this; + return shared_from_this(); } #if defined(ICE_USE_IOCP) @@ -127,7 +125,7 @@ IceInternal::UdpTransceiver::bind() _bound = true; - _endpoint = _endpoint->endpoint(this); + _endpoint = _endpoint->endpoint(shared_from_this()); return _endpoint; } @@ -660,15 +658,22 @@ IceInternal::UdpTransceiver::UdpTransceiver(const ProtocolInstancePtr& instance, #endif } -IceInternal::UdpTransceiver::UdpTransceiver(const UdpEndpointIPtr& endpoint, const ProtocolInstancePtr& instance, - const string& host, int port, const string& mcastInterface, bool connect) : +IceInternal::UdpTransceiver::UdpTransceiver( + const UdpEndpointIPtr& endpoint, + const ProtocolInstancePtr& instance, + const string& host, + int port, + const string& mcastInterface, + bool connect) : _endpoint(endpoint), _instance(instance), _incoming(true), _bound(false), _addr(getAddressForServer(host, port, instance->protocolSupport(), instance->preferIPv6(), true)), _mcastInterface(mcastInterface), +#ifdef _WIN32 _port(port), +#endif _state(connect ? StateNeedConnect : StateNotConnected) #if defined(ICE_USE_IOCP) , _read(SocketOperationRead), diff --git a/cpp/src/Ice/UdpTransceiver.h b/cpp/src/Ice/UdpTransceiver.h index 0f2291b473d..41d72c181d2 100644 --- a/cpp/src/Ice/UdpTransceiver.h +++ b/cpp/src/Ice/UdpTransceiver.h @@ -14,7 +14,7 @@ namespace IceInternal class UdpEndpoint; -class UdpTransceiver : public Transceiver, public NativeInfo +class UdpTransceiver final : public Transceiver, public NativeInfo, public std::enable_shared_from_this { enum State { @@ -26,45 +26,42 @@ class UdpTransceiver : public Transceiver, public NativeInfo public: - virtual NativeInfoPtr getNativeInfo(); + UdpTransceiver(const ProtocolInstancePtr&, const Address&, const Address&, const std::string&, int); + UdpTransceiver(const UdpEndpointIPtr&, const ProtocolInstancePtr&, const std::string&, int, const std::string&, + bool); + + ~UdpTransceiver() final; + + NativeInfoPtr getNativeInfo() final; #if defined(ICE_USE_IOCP) - virtual AsyncInfo* getAsyncInfo(SocketOperation); + AsyncInfo* getAsyncInfo(SocketOperation) final; #endif - virtual SocketOperation initialize(Buffer&, Buffer&); - virtual SocketOperation closing(bool, const Ice::LocalException&); - virtual void close(); - virtual EndpointIPtr bind(); - virtual SocketOperation write(Buffer&); - virtual SocketOperation read(Buffer&); + SocketOperation initialize(Buffer&, Buffer&) final; + SocketOperation closing(bool, const Ice::LocalException&) final; + void close() final; + EndpointIPtr bind() final; + SocketOperation write(Buffer&) final; + SocketOperation read(Buffer&) final; #if defined(ICE_USE_IOCP) - virtual bool startWrite(Buffer&); - virtual void finishWrite(Buffer&); - virtual void startRead(Buffer&); - virtual void finishRead(Buffer&); + bool startWrite(Buffer&) final; + void finishWrite(Buffer&) final; + void startRead(Buffer&) final; + void finishRead(Buffer&) final; #endif - virtual std::string protocol() const; - virtual std::string toString() const; - virtual std::string toDetailedString() const; - virtual Ice::ConnectionInfoPtr getInfo() const; - virtual void checkSendSize(const Buffer&); - virtual void setBufferSize(int rcvSize, int sndSize); + std::string protocol() const final; + std::string toString() const final; + std::string toDetailedString() const final; + Ice::ConnectionInfoPtr getInfo() const final; + void checkSendSize(const Buffer&) final; + void setBufferSize(int rcvSize, int sndSize) final; int effectivePort() const; private: - UdpTransceiver(const ProtocolInstancePtr&, const Address&, const Address&, const std::string&, int); - UdpTransceiver(const UdpEndpointIPtr&, const ProtocolInstancePtr&, const std::string&, int, const std::string&, - bool); - - virtual ~UdpTransceiver(); - void setBufSize(int, int); - friend class UdpEndpointI; - friend class UdpConnector; - UdpEndpointIPtr _endpoint; const ProtocolInstancePtr _instance; const bool _incoming; @@ -74,7 +71,10 @@ class UdpTransceiver : public Transceiver, public NativeInfo Address _mcastAddr; const std::string _mcastInterface; Address _peerAddr; + +#if defined(_WIN32) int _port; +#endif State _state; int _rcvSize; diff --git a/cpp/src/Ice/WSAcceptor.cpp b/cpp/src/Ice/WSAcceptor.cpp index ce017d2cf3a..571dd7376a5 100644 --- a/cpp/src/Ice/WSAcceptor.cpp +++ b/cpp/src/Ice/WSAcceptor.cpp @@ -58,7 +58,7 @@ IceInternal::WSAcceptor::accept() // WebSocket handshaking is performed in TransceiverI::initialize, since // accept must not block. // - return new WSTransceiver(_instance, _delegate->accept()); + return make_shared(_instance, _delegate->accept()); } string diff --git a/cpp/src/Ice/WSAcceptor.h b/cpp/src/Ice/WSAcceptor.h index b23b3b2ed6b..ced91d38881 100644 --- a/cpp/src/Ice/WSAcceptor.h +++ b/cpp/src/Ice/WSAcceptor.h @@ -16,30 +16,30 @@ namespace IceInternal class WSEndpoint; -class WSAcceptor : public Acceptor, public NativeInfo +class WSAcceptor final : public Acceptor, public NativeInfo { public: - virtual NativeInfoPtr getNativeInfo(); + WSAcceptor(const WSEndpointPtr&, const ProtocolInstancePtr&, const AcceptorPtr&); + ~WSAcceptor(); + NativeInfoPtr getNativeInfo() final; #if defined(ICE_USE_IOCP) - virtual AsyncInfo* getAsyncInfo(SocketOperation); + AsyncInfo* getAsyncInfo(SocketOperation) final; #endif - virtual void close(); - virtual EndpointIPtr listen(); + void close() final; + EndpointIPtr listen() final; #if defined(ICE_USE_IOCP) - virtual void startAccept(); - virtual void finishAccept(); + void startAccept() final; + void finishAccept() final; #endif - virtual TransceiverPtr accept(); - virtual std::string protocol() const; - virtual std::string toString() const; - virtual std::string toDetailedString() const; + TransceiverPtr accept() final; + std::string protocol() const final; + std::string toString() const final; + std::string toDetailedString() const final; private: - WSAcceptor(const WSEndpointPtr&, const ProtocolInstancePtr&, const AcceptorPtr&); - virtual ~WSAcceptor(); friend class WSEndpoint; WSEndpointPtr _endpoint; diff --git a/cpp/src/Ice/WSConnector.cpp b/cpp/src/Ice/WSConnector.cpp index f1935833a8c..4231e5e9514 100644 --- a/cpp/src/Ice/WSConnector.cpp +++ b/cpp/src/Ice/WSConnector.cpp @@ -14,7 +14,7 @@ using namespace IceInternal; TransceiverPtr IceInternal::WSConnector::connect() { - return new WSTransceiver(_instance, _delegate->connect(), _host, _resource); + return make_shared(_instance, _delegate->connect(), _host, _resource); } Short @@ -43,17 +43,12 @@ IceInternal::WSConnector::operator==(const Connector& r) const return true; } - if(_delegate != p->_delegate) - { - return false; - } - if(_resource != p->_resource) { return false; } - return true; + return Ice::targetEqualTo(_delegate, p->_delegate); } bool @@ -70,15 +65,6 @@ IceInternal::WSConnector::operator<(const Connector& r) const return false; } - if(_delegate < p->_delegate) - { - return true; - } - else if(p->_delegate < _delegate) - { - return false; - } - if(_resource < p->_resource) { return true; @@ -88,7 +74,7 @@ IceInternal::WSConnector::operator<(const Connector& r) const return false; } - return false; + return Ice::targetLess(_delegate, p->_delegate); } IceInternal::WSConnector::WSConnector(const ProtocolInstancePtr& instance, const ConnectorPtr& del, const string& host, diff --git a/cpp/src/Ice/WSConnector.h b/cpp/src/Ice/WSConnector.h index c4f30047a45..c7e27bc3a8d 100644 --- a/cpp/src/Ice/WSConnector.h +++ b/cpp/src/Ice/WSConnector.h @@ -15,20 +15,19 @@ namespace IceInternal class WSEndpoint; -class WSConnector : public Connector +class WSConnector final : public Connector { public: - virtual TransceiverPtr connect(); - - virtual Ice::Short type() const; - virtual std::string toString() const; + WSConnector(const ProtocolInstancePtr&, const ConnectorPtr&, const std::string&, const std::string&); + ~WSConnector(); + TransceiverPtr connect() final; - virtual bool operator==(const Connector&) const; - virtual bool operator<(const Connector&) const; + Ice::Short type() const final; + std::string toString() const final; - WSConnector(const ProtocolInstancePtr&, const ConnectorPtr&, const std::string&, const std::string&); - virtual ~WSConnector(); + bool operator==(const Connector&) const final; + bool operator<(const Connector&) const final; private: diff --git a/cpp/src/Ice/WSEndpoint.cpp b/cpp/src/Ice/WSEndpoint.cpp index d8e8ca91eba..287694e9ef2 100644 --- a/cpp/src/Ice/WSEndpoint.cpp +++ b/cpp/src/Ice/WSEndpoint.cpp @@ -72,8 +72,8 @@ WSEndpointFactoryPlugin::WSEndpointFactoryPlugin(const CommunicatorPtr& communic assert(communicator); const EndpointFactoryManagerPtr efm = getInstance(communicator)->endpointFactoryManager(); - efm->add(new WSEndpointFactory(new ProtocolInstance(communicator, WSEndpointType, "ws", false), TCPEndpointType)); - efm->add(new WSEndpointFactory(new ProtocolInstance(communicator, WSSEndpointType, "wss", true), SSLEndpointType)); + efm->add(make_shared(new ProtocolInstance(communicator, WSEndpointType, "ws", false), TCPEndpointType)); + efm->add(make_shared(new ProtocolInstance(communicator, WSSEndpointType, "wss", true), SSLEndpointType)); } void @@ -232,7 +232,7 @@ IceInternal::WSEndpoint::connectors_async(EndpointSelectionType selType, vector connectors = c; for(vector::iterator p = connectors.begin(); p != connectors.end(); ++p) { - *p = new WSConnector(_instance, *p, _host, _resource); + *p = make_shared(_instance, *p, _host, _resource); } _callback->connectors(connectors); } @@ -263,7 +263,7 @@ AcceptorPtr IceInternal::WSEndpoint::acceptor(const string& adapterName) const { AcceptorPtr delAcc = _delegate->acceptor(adapterName); - return new WSAcceptor(ICE_SHARED_FROM_CONST_THIS(WSEndpoint), _instance, delAcc); + return make_shared(ICE_SHARED_FROM_CONST_THIS(WSEndpoint), _instance, delAcc); } WSEndpointPtr @@ -471,7 +471,7 @@ IceInternal::WSEndpointFactory::WSEndpointFactory(const ProtocolInstancePtr& ins EndpointFactoryPtr IceInternal::WSEndpointFactory::cloneWithUnderlying(const ProtocolInstancePtr& instance, Short underlying) const { - return new WSEndpointFactory(instance, underlying); + return make_shared(instance, underlying); } EndpointIPtr diff --git a/cpp/src/Ice/WSTransceiver.h b/cpp/src/Ice/WSTransceiver.h index 44773f2bfc4..09f5c0df01c 100644 --- a/cpp/src/Ice/WSTransceiver.h +++ b/cpp/src/Ice/WSTransceiver.h @@ -19,39 +19,39 @@ namespace IceInternal class ConnectorI; class AcceptorI; -class WSTransceiver : public Transceiver +class WSTransceiver final : public Transceiver { public: - virtual NativeInfoPtr getNativeInfo(); + WSTransceiver(const ProtocolInstancePtr&, const TransceiverPtr&, const std::string&, const std::string&); + WSTransceiver(const ProtocolInstancePtr&, const TransceiverPtr&); + ~WSTransceiver(); + + NativeInfoPtr getNativeInfo() final; #if defined(ICE_USE_IOCP) - virtual AsyncInfo* getAsyncInfo(SocketOperation); + AsyncInfo* getAsyncInfo(SocketOperation); #endif - virtual SocketOperation initialize(Buffer&, Buffer&); - virtual SocketOperation closing(bool, const Ice::LocalException&); - virtual void close(); - virtual SocketOperation write(Buffer&); - virtual SocketOperation read(Buffer&); + SocketOperation initialize(Buffer&, Buffer&) final; + SocketOperation closing(bool, const Ice::LocalException&) final; + void close() final; + SocketOperation write(Buffer&) final; + SocketOperation read(Buffer&) final; #if defined(ICE_USE_IOCP) - virtual bool startWrite(Buffer&); - virtual void finishWrite(Buffer&); - virtual void startRead(Buffer&); - virtual void finishRead(Buffer&); + bool startWrite(Buffer&) final; + void finishWrite(Buffer&) final; + void startRead(Buffer&) final; + void finishRead(Buffer&) final; #endif - virtual std::string protocol() const; - virtual std::string toString() const; - virtual std::string toDetailedString() const; - virtual Ice::ConnectionInfoPtr getInfo() const; - virtual void checkSendSize(const Buffer&); - virtual void setBufferSize(int rcvSize, int sndSize); + std::string protocol() const final; + std::string toString() const final; + std::string toDetailedString() const final; + Ice::ConnectionInfoPtr getInfo() const final; + void checkSendSize(const Buffer&) final; + void setBufferSize(int rcvSize, int sndSize) final; private: - WSTransceiver(const ProtocolInstancePtr&, const TransceiverPtr&, const std::string&, const std::string&); - WSTransceiver(const ProtocolInstancePtr&, const TransceiverPtr&); - virtual ~WSTransceiver(); - void handleRequest(Buffer&); void handleResponse(); diff --git a/cpp/src/IceBT/AcceptorI.cpp b/cpp/src/IceBT/AcceptorI.cpp index 1748199d476..14180653e0f 100644 --- a/cpp/src/IceBT/AcceptorI.cpp +++ b/cpp/src/IceBT/AcceptorI.cpp @@ -21,8 +21,6 @@ using namespace std; using namespace Ice; using namespace IceBT; -IceUtil::Shared* IceBT::upCast(AcceptorI* p) { return p; } - namespace { @@ -50,7 +48,7 @@ class ProfileCallbackI : public ProfileCallback IceInternal::NativeInfoPtr IceBT::AcceptorI::getNativeInfo() { - return this; + return shared_from_this(); } void @@ -79,7 +77,7 @@ IceBT::AcceptorI::listen() try { - ProfileCallbackPtr cb = make_shared(this); + auto cb = make_shared(shared_from_this()); _path = _instance->engine()->registerProfile(_uuid, _name, _channel, cb); } catch(const BluetoothException& ex) @@ -93,7 +91,7 @@ IceBT::AcceptorI::listen() throw InitializationException(__FILE__, __LINE__, os.str()); } - _endpoint = _endpoint->endpoint(this); + _endpoint = _endpoint->endpoint(shared_from_this()); return _endpoint; } @@ -175,7 +173,11 @@ IceBT::AcceptorI::newConnection(int fd) { lock_guard lock(_mutex); - _transceivers.push(new TransceiverI(_instance, new StreamSocket(_instance, fd), 0, _uuid)); + _transceivers.push(make_shared( + _instance, + make_shared(_instance, fd), + nullptr, + _uuid)); // // Notify the thread pool that we are ready to "read". The thread pool will invoke accept() diff --git a/cpp/src/IceBT/AcceptorI.h b/cpp/src/IceBT/AcceptorI.h index b1dff023014..ed1552a2de0 100644 --- a/cpp/src/IceBT/AcceptorI.h +++ b/cpp/src/IceBT/AcceptorI.h @@ -16,18 +16,24 @@ namespace IceBT { -class AcceptorI : public IceInternal::Acceptor, public IceInternal::NativeInfo +class AcceptorI final : + public IceInternal::Acceptor, + public IceInternal::NativeInfo, + public std::enable_shared_from_this { public: - virtual IceInternal::NativeInfoPtr getNativeInfo(); + AcceptorI(const EndpointIPtr&, const InstancePtr&, const std::string&, const std::string&, const std::string&, + const std::string&, int); + ~AcceptorI(); + IceInternal::NativeInfoPtr getNativeInfo() final; - virtual void close(); - virtual IceInternal::EndpointIPtr listen(); - virtual IceInternal::TransceiverPtr accept(); - virtual std::string protocol() const; - virtual std::string toString() const; - virtual std::string toDetailedString() const; + void close() final; + IceInternal::EndpointIPtr listen() final; + IceInternal::TransceiverPtr accept() final; + std::string protocol() const final; + std::string toString() const final; + std::string toDetailedString() const final; int effectiveChannel() const; @@ -35,11 +41,6 @@ class AcceptorI : public IceInternal::Acceptor, public IceInternal::NativeInfo private: - AcceptorI(const EndpointIPtr&, const InstancePtr&, const std::string&, const std::string&, const std::string&, - const std::string&, int); - virtual ~AcceptorI(); - friend class EndpointI; - EndpointIPtr _endpoint; const InstancePtr _instance; const std::string _adapterName; diff --git a/cpp/src/IceBT/ConnectionInfo.cpp b/cpp/src/IceBT/ConnectionInfo.cpp index 24daab554da..c070711a874 100644 --- a/cpp/src/IceBT/ConnectionInfo.cpp +++ b/cpp/src/IceBT/ConnectionInfo.cpp @@ -2,22 +2,7 @@ // Copyright (c) ZeroC, Inc. All rights reserved. // -#ifndef ICEBT_API_EXPORTS -# define ICEBT_API_EXPORTS -#endif #include -#include -#include -#include -#include - -#if defined(_MSC_VER) -# pragma warning(disable:4458) // declaration of ... hides class member -#elif defined(__clang__) -# pragma clang diagnostic ignored "-Wshadow" -#elif defined(__GNUC__) -# pragma GCC diagnostic ignored "-Wshadow" -#endif IceBT::ConnectionInfo::~ConnectionInfo() { diff --git a/cpp/src/IceBT/ConnectorI.cpp b/cpp/src/IceBT/ConnectorI.cpp index b9b29cc91d9..cdf01a5ba65 100644 --- a/cpp/src/IceBT/ConnectorI.cpp +++ b/cpp/src/IceBT/ConnectorI.cpp @@ -26,7 +26,7 @@ IceBT::ConnectorI::connect() // // The transceiver handles all connection activity. // - return new TransceiverI(_instance, _addr, _uuid); + return make_shared(_instance, _addr, _uuid); } Short @@ -73,12 +73,6 @@ IceBT::ConnectorI::operator==(const IceInternal::Connector& r) const return true; } -bool -IceBT::ConnectorI::operator!=(const IceInternal::Connector& r) const -{ - return !operator==(r); -} - bool IceBT::ConnectorI::operator<(const IceInternal::Connector& r) const { diff --git a/cpp/src/IceBT/ConnectorI.h b/cpp/src/IceBT/ConnectorI.h index e0ef01548e0..060a408528b 100644 --- a/cpp/src/IceBT/ConnectorI.h +++ b/cpp/src/IceBT/ConnectorI.h @@ -15,24 +15,21 @@ namespace IceBT { -class ConnectorI : public IceInternal::Connector +class ConnectorI final : public IceInternal::Connector { public: - virtual IceInternal::TransceiverPtr connect(); + ConnectorI(const InstancePtr&, const std::string&, const std::string&, Ice::Int, const std::string&); + IceInternal::TransceiverPtr connect() final; - virtual Ice::Short type() const; - virtual std::string toString() const; + Ice::Short type() const final; + std::string toString() const final; - virtual bool operator==(const IceInternal::Connector&) const; - virtual bool operator!=(const IceInternal::Connector&) const; - virtual bool operator<(const IceInternal::Connector&) const; + bool operator==(const IceInternal::Connector&) const final; + bool operator<(const IceInternal::Connector&) const final; private: - ConnectorI(const InstancePtr&, const std::string&, const std::string&, Ice::Int, const std::string&); - friend class EndpointI; - const InstancePtr _instance; const std::string _addr; const std::string _uuid; diff --git a/cpp/src/IceBT/DBus.cpp b/cpp/src/IceBT/DBus.cpp index a9bfcc04a44..eeb5b816da8 100644 --- a/cpp/src/IceBT/DBus.cpp +++ b/cpp/src/IceBT/DBus.cpp @@ -133,14 +133,25 @@ class MessageI : public Message { public: + MessageI(DBusMessage* m, bool adopt) : + _message(m), + _iter(0) + { + assert(_message); + if(!adopt) + { + ::dbus_message_ref(m); // Bump the reference count. + } + } + static MessagePtr wrap(DBusMessage* m) { - return new MessageI(m, false); + return make_shared(m, false); } static MessagePtr adopt(DBusMessage* m) { - return new MessageI(m, true); + return make_shared(m, true); } virtual ~MessageI() @@ -297,17 +308,6 @@ class MessageI : public Message private: - MessageI(DBusMessage* m, bool adopt) : - _message(m), - _iter(0) - { - assert(_message); - if(!adopt) - { - ::dbus_message_ref(m); // Bump the reference count. - } - } - vector buildTypes() { vector types; @@ -356,11 +356,11 @@ class MessageI : public Message case DBUS_TYPE_ARRAY: { TypePtr elem = buildType(iter); - return new ArrayType(elem); + return make_shared(elem); } case DBUS_TYPE_VARIANT: { - return new VariantType; + return make_shared(); } case '(': // Struct { @@ -371,7 +371,7 @@ class MessageI : public Message } assert(*iter == ')'); ++iter; - return new StructType(types); + return make_shared(types); } case '{': // Dict entry { @@ -380,7 +380,7 @@ class MessageI : public Message value = buildType(iter); assert(*iter == '}'); ++iter; - return new DictEntryType(key, value); + return make_shared(key, value); } case DBUS_TYPE_INVALID: assert(false); @@ -396,7 +396,7 @@ class MessageI : public Message { case Type::KindBoolean: { - BooleanValuePtr v = BooleanValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); const dbus_bool_t b = v->v ? TRUE : FALSE; ::dbus_message_iter_append_basic(iter, DBUS_TYPE_BOOLEAN, &b); @@ -404,63 +404,63 @@ class MessageI : public Message } case Type::KindByte: { - ByteValuePtr v = ByteValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); ::dbus_message_iter_append_basic(iter, DBUS_TYPE_BYTE, &v->v); break; } case Type::KindUint16: { - Uint16ValuePtr v = Uint16ValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); ::dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT16, &v->v); break; } case Type::KindInt16: { - Int16ValuePtr v = Int16ValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); ::dbus_message_iter_append_basic(iter, DBUS_TYPE_INT16, &v->v); break; } case Type::KindUint32: { - Uint32ValuePtr v = Uint32ValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); ::dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT32, &v->v); break; } case Type::KindInt32: { - Int32ValuePtr v = Int32ValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); ::dbus_message_iter_append_basic(iter, DBUS_TYPE_INT32, &v->v); break; } case Type::KindUint64: { - Uint64ValuePtr v = Uint64ValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); ::dbus_message_iter_append_basic(iter, DBUS_TYPE_UINT64, &v->v); break; } case Type::KindInt64: { - Int64ValuePtr v = Int64ValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); ::dbus_message_iter_append_basic(iter, DBUS_TYPE_INT64, &v->v); break; } case Type::KindDouble: { - DoubleValuePtr v = DoubleValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); ::dbus_message_iter_append_basic(iter, DBUS_TYPE_DOUBLE, &v->v); break; } case Type::KindString: { - StringValuePtr v = StringValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); const char* s = v->v.c_str(); ::dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, &s); @@ -468,7 +468,7 @@ class MessageI : public Message } case Type::KindObjectPath: { - ObjectPathValuePtr v = ObjectPathValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); const char* s = v->v.c_str(); ::dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &s); @@ -476,7 +476,7 @@ class MessageI : public Message } case Type::KindSignature: { - SignatureValuePtr v = SignatureValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); const char* s = v->v.c_str(); ::dbus_message_iter_append_basic(iter, DBUS_TYPE_SIGNATURE, &s); @@ -484,16 +484,16 @@ class MessageI : public Message } case Type::KindUnixFD: { - UnixFDValuePtr v = UnixFDValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); ::dbus_message_iter_append_basic(iter, DBUS_TYPE_UNIX_FD, &v->v); break; } case Type::KindArray: { - ArrayTypePtr t = ArrayTypePtr::dynamicCast(p->getType()); + auto t = dynamic_pointer_cast(p->getType()); assert(t); - ArrayValuePtr arr = ArrayValuePtr::dynamicCast(p); + auto arr = dynamic_pointer_cast(p); assert(arr); string sig = t->elementType->getSignature(); @@ -515,7 +515,7 @@ class MessageI : public Message } case Type::KindVariant: { - VariantValuePtr v = VariantValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); string sig = v->v->getType()->getSignature(); @@ -534,7 +534,7 @@ class MessageI : public Message } case Type::KindStruct: { - StructValuePtr v = StructValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); DBusMessageIter sub; @@ -554,7 +554,7 @@ class MessageI : public Message } case Type::KindDictEntry: { - DictEntryValuePtr v = DictEntryValuePtr::dynamicCast(p); + auto v = dynamic_pointer_cast(p); assert(v); DBusMessageIter sub; @@ -645,86 +645,86 @@ class MessageI : public Message { bool v; ::dbus_message_iter_get_basic(_iter, &v); - return new BooleanValue(v); + return make_shared(v); } case Type::KindByte: { unsigned char v; ::dbus_message_iter_get_basic(_iter, &v); - return new ByteValue(v); + return make_shared(v); } case Type::KindUint16: { unsigned short v; ::dbus_message_iter_get_basic(_iter, &v); - return new Uint16Value(v); + return make_shared(v); } case Type::KindInt16: { short v; ::dbus_message_iter_get_basic(_iter, &v); - return new Int16Value(v); + return make_shared(v); } case Type::KindUint32: { unsigned int v; ::dbus_message_iter_get_basic(_iter, &v); - return new Uint32Value(v); + return make_shared(v); } case Type::KindInt32: { int v; ::dbus_message_iter_get_basic(_iter, &v); - return new Int32Value(v); + return make_shared(v); } case Type::KindUint64: { unsigned long long v; ::dbus_message_iter_get_basic(_iter, &v); - return new Uint64Value(v); + return make_shared(v); } case Type::KindInt64: { long long v; ::dbus_message_iter_get_basic(_iter, &v); - return new Int64Value(v); + return make_shared(v); } case Type::KindDouble: { double v; ::dbus_message_iter_get_basic(_iter, &v); - return new DoubleValue(v); + return make_shared(v); } case Type::KindString: { char* str; ::dbus_message_iter_get_basic(_iter, &str); - return new StringValue(str); + return make_shared(str); } case Type::KindObjectPath: { char* str; ::dbus_message_iter_get_basic(_iter, &str); - return new ObjectPathValue(str); + return make_shared(str); } case Type::KindSignature: { char* str; ::dbus_message_iter_get_basic(_iter, &str); - return new SignatureValue(str); + return make_shared(str); } case Type::KindUnixFD: { unsigned int v; ::dbus_message_iter_get_basic(_iter, &v); - return new UnixFDValue(v); + return make_shared(v); } case Type::KindArray: { - ArrayTypePtr arr = ArrayTypePtr::dynamicCast(t); + auto arr = dynamic_pointer_cast(t); assert(arr); pushIter(); - ArrayValuePtr v = new ArrayValue(arr); + ArrayValuePtr v = make_shared(arr); while(true) { Type::Kind k = currentKind(); @@ -748,17 +748,17 @@ class MessageI : public Message string sig = ::dbus_message_iter_get_signature(_iter); string::iterator p = sig.begin(); TypePtr vt = buildType(p); - VariantValuePtr v = new VariantValue; + VariantValuePtr v = make_shared(); v->v = readValue(vt); popIter(); return v; } case Type::KindStruct: { - StructTypePtr st = StructTypePtr::dynamicCast(t); + auto st = dynamic_pointer_cast(t); assert(st); pushIter(); - StructValuePtr v = new StructValue(st); + StructValuePtr v = make_shared(st); for(vector::iterator p = st->memberTypes.begin(); p != st->memberTypes.end(); ++p) { v->members.push_back(readValue(*p)); @@ -769,10 +769,10 @@ class MessageI : public Message } case Type::KindDictEntry: { - DictEntryTypePtr dt = DictEntryTypePtr::dynamicCast(t); + auto dt = dynamic_pointer_cast(t); assert(dt); pushIter(); - DictEntryValuePtr v = new DictEntryValue(dt); + DictEntryValuePtr v = make_shared(dt); v->key = readValue(dt->keyType); next(); v->value = readValue(dt->valueType); @@ -781,7 +781,7 @@ class MessageI : public Message } default: assert(false); - return 0; + return nullptr; } } @@ -804,12 +804,11 @@ class MessageI : public Message stack _iterators; DBusMessageIter* _iter; }; -typedef IceUtil::Handle MessageIPtr; static void pendingCallCompletedCallback(DBusPendingCall*, void*); static void pendingCallFree(void*); -class AsyncResultI : public AsyncResult +class AsyncResultI final : public AsyncResult, public enable_shared_from_this { public: @@ -818,13 +817,12 @@ class AsyncResultI : public AsyncResult _callback(cb), _status(StatusPending) { - // - // Bump our refcount to ensure this object lives until the reply is received. - // The pendingFree function will decrement the refcount. - // - __incRef(); + } - if(!::dbus_pending_call_set_notify(_call, pendingCallCompletedCallback, this, pendingCallFree)) + void init() + { + auto self = new shared_ptr(shared_from_this()); + if(!::dbus_pending_call_set_notify(_call, pendingCallCompletedCallback, self, pendingCallFree)) { ::dbus_pending_call_cancel(_call); ::dbus_pending_call_unref(_call); @@ -896,7 +894,7 @@ class AsyncResultI : public AsyncResult { try { - cb->completed(this); + cb->completed(shared_from_this()); } catch(...) { @@ -931,7 +929,7 @@ class AsyncResultI : public AsyncResult { try { - cb->completed(this); + cb->completed(shared_from_this()); } catch(...) { @@ -955,26 +953,23 @@ class AsyncResultI : public AsyncResult static void pendingCallCompletedCallback(DBusPendingCall*, void* userData) { - AsyncResultI* r = static_cast(userData); + auto r = static_cast*>(userData); assert(r); - r->replyReceived(); + (*r)->replyReceived(); } static void pendingCallFree(void* userData) { - AsyncResultI* r = static_cast(userData); + auto r = static_cast*>(userData); assert(r); - r->__decRef(); + delete r; } static DBusHandlerResult filterCallback(DBusConnection*, DBusMessage*, void*); static void freeConnection(void*); -class ConnectionI; -typedef IceUtil::Handle ConnectionIPtr; - -class ConnectionI : public Connection +class ConnectionI final : public Connection, public enable_shared_from_this { public: @@ -984,7 +979,7 @@ class ConnectionI : public Connection { } - virtual ~ConnectionI() + ~ConnectionI() { if(_connection) { @@ -992,7 +987,7 @@ class ConnectionI : public Connection } } - virtual void addFilter(const FilterPtr& f) + void addFilter(const FilterPtr& f) final { lock_guard lock(_mutex); @@ -1038,7 +1033,7 @@ class ConnectionI : public Connection virtual AsyncResultPtr callAsync(const MessagePtr& m, const AsyncCallbackPtr& cb) { - MessageIPtr mi = MessageIPtr::dynamicCast(m); + auto mi = dynamic_pointer_cast(m); assert(mi); DBusPendingCall* call; @@ -1050,12 +1045,14 @@ class ConnectionI : public Connection { throw ExceptionI("dbus_connection_send_with_reply failed - disconnected?"); } - return new AsyncResultI(call, cb); + auto asyncResult = make_shared(call, cb); + asyncResult->init(); + return asyncResult; } virtual void sendAsync(const MessagePtr& m) { - MessageIPtr mi = MessageIPtr::dynamicCast(m); + auto mi = dynamic_pointer_cast(m); assert(mi); // @@ -1100,7 +1097,8 @@ class ConnectionI : public Connection ::dbus_connection_set_exit_on_disconnect(_connection, FALSE); - if(!::dbus_connection_add_filter(_connection, filterCallback, this, freeConnection)) + auto self = new shared_ptr(shared_from_this()); + if(!::dbus_connection_add_filter(_connection, filterCallback, self, freeConnection)) { throw ExceptionI("out of memory calling dbus_connection_add_filter"); } @@ -1111,8 +1109,6 @@ class ConnectionI : public Connection ::dbus_bus_add_match(_connection, "type='signal'", 0); //::dbus_bus_add_match(_connection, "type='method_call'", 0); - __incRef(); // __decRef called in freeConnection. - _thread = new HelperThread(this); _thread->start(); } @@ -1137,7 +1133,7 @@ class ConnectionI : public Connection { try { - if((*p)->handleMessage(this, msg)) + if((*p)->handleMessage(shared_from_this(), msg)) { return DBUS_HANDLER_RESULT_HANDLED; } @@ -1155,7 +1151,7 @@ class ConnectionI : public Connection { try { - p->second->handleMethodCall(this, msg); + p->second->handleMethodCall(shared_from_this(), msg); } catch(...) { @@ -1214,16 +1210,16 @@ class ConnectionI : public Connection static DBusHandlerResult filterCallback(DBusConnection*, DBusMessage* message, void* userData) { - ConnectionI* c = static_cast(userData); + auto c = static_cast*>(userData); assert(c); - return c->handleMessage(message); + return (*c)->handleMessage(message); } static void freeConnection(void* p) { - ConnectionI* c = static_cast(p); + auto c = static_cast*>(p); assert(c); - c->__decRef(); + delete c; } } @@ -1246,7 +1242,7 @@ IceBT::DBus::Type::getPrimitive(Kind k) case KindObjectPath: case KindSignature: case KindUnixFD: - return new PrimitiveType(k); + return make_shared(k); case KindInvalid: case KindArray: case KindVariant: @@ -1313,7 +1309,7 @@ IceBT::DBus::Message::createCall(const string& dest, const string& path, const s MessagePtr IceBT::DBus::Message::createReturn(const MessagePtr& call) { - MessageIPtr c = MessageIPtr::dynamicCast(call); + auto c = dynamic_pointer_cast(call); assert(c); DBusMessage* r = ::dbus_message_new_method_return(c->message()); if(!r) @@ -1326,7 +1322,7 @@ IceBT::DBus::Message::createReturn(const MessagePtr& call) ConnectionPtr IceBT::DBus::Connection::getSystemBus() { - ConnectionI* conn = new ConnectionI; + auto conn = make_shared(); conn->connect(true); return conn; } @@ -1334,7 +1330,7 @@ IceBT::DBus::Connection::getSystemBus() ConnectionPtr IceBT::DBus::Connection::getSessionBus() { - ConnectionI* conn = new ConnectionI; + auto conn = make_shared(); conn->connect(false); return conn; } diff --git a/cpp/src/IceBT/DBus.h b/cpp/src/IceBT/DBus.h index 6aa60d54712..d7f04e79dc2 100644 --- a/cpp/src/IceBT/DBus.h +++ b/cpp/src/IceBT/DBus.h @@ -5,8 +5,12 @@ #ifndef ICE_BT_DBUS_H #define ICE_BT_DBUS_H -#include -#include +#include +#include +#include +#include +#include +#include using namespace std; @@ -31,9 +35,9 @@ class Exception // Type is the base class for a hierarchy representing DBus data types. // class Type; -typedef IceUtil::Handle TypePtr; +using TypePtr = std::shared_ptr; -class Type : public IceUtil::SimpleShared +class Type { public: @@ -87,7 +91,7 @@ class ArrayType : public Type TypePtr elementType; }; -typedef IceUtil::Handle ArrayTypePtr; +using ArrayTypePtr = std::shared_ptr; class VariantType : public Type { @@ -102,7 +106,7 @@ class VariantType : public Type virtual std::string getSignature() const; }; -typedef IceUtil::Handle VariantTypePtr; +using VariantTypePtr = std::shared_ptr; class StructType : public Type { @@ -122,7 +126,7 @@ class StructType : public Type std::vector memberTypes; }; -typedef IceUtil::Handle StructTypePtr; +using StructTypePtr = std::shared_ptr; class DictEntryType : public Type { @@ -144,15 +148,15 @@ class DictEntryType : public Type TypePtr keyType; TypePtr valueType; }; -typedef IceUtil::Handle DictEntryTypePtr; +using DictEntryTypePtr = std::shared_ptr; // // Value is the base class of a hierarchy representing DBus data values. // class Value; -typedef IceUtil::Handle ValuePtr; +using ValuePtr = std::shared_ptr; -class Value : public IceUtil::SimpleShared +class Value { public: @@ -184,24 +188,24 @@ operator<<(std::ostream& ostr, const ValuePtr& v) } template -class PrimitiveValue : public Value +class PrimitiveValue final : public Value { public: PrimitiveValue() : v(E()), kind(K) {} PrimitiveValue(const E& val) : v(val), kind(K) {} - virtual TypePtr getType() const + TypePtr getType() const final { return Type::getPrimitive(kind); } - virtual ValuePtr clone() const + ValuePtr clone() const final { - return new PrimitiveValue(v); + return make_shared(v); } - virtual std::string toString() const + std::string toString() const final { std::ostringstream out; out << v; @@ -213,51 +217,54 @@ class PrimitiveValue : public Value protected: - virtual void print(std::ostream& ostr) + void print(std::ostream& ostr) final { ostr << v; } }; -typedef PrimitiveValue BooleanValue; -typedef IceUtil::Handle BooleanValuePtr; -typedef PrimitiveValue ByteValue; -typedef IceUtil::Handle ByteValuePtr; -typedef PrimitiveValue Uint16Value; -typedef IceUtil::Handle Uint16ValuePtr; -typedef PrimitiveValue Int16Value; -typedef IceUtil::Handle Int16ValuePtr; -typedef PrimitiveValue Uint32Value; -typedef IceUtil::Handle Uint32ValuePtr; -typedef PrimitiveValue Int32Value; -typedef IceUtil::Handle Int32ValuePtr; -typedef PrimitiveValue Uint64Value; -typedef IceUtil::Handle Uint64ValuePtr; -typedef PrimitiveValue Int64Value; -typedef IceUtil::Handle Int64ValuePtr; -typedef PrimitiveValue DoubleValue; -typedef IceUtil::Handle DoubleValuePtr; -typedef PrimitiveValue StringValue; -typedef IceUtil::Handle StringValuePtr; -typedef PrimitiveValue ObjectPathValue; -typedef IceUtil::Handle ObjectPathValuePtr; -typedef PrimitiveValue SignatureValue; -typedef IceUtil::Handle SignatureValuePtr; -typedef PrimitiveValue UnixFDValue; -typedef IceUtil::Handle UnixFDValuePtr; +using BooleanValue = PrimitiveValue; +using BooleanValuePtr = std::shared_ptr; +using ByteValue = PrimitiveValue; +using ByteValuePtr = std::shared_ptr; +using Uint16Value = PrimitiveValue; +using Uint16ValuePtr = std::shared_ptr; +using Int16Value = PrimitiveValue; +using Int16ValuePtr = std::shared_ptr; +using Uint32Value = PrimitiveValue; +using Uint32ValuePtr = std::shared_ptr; +using Int32Value = PrimitiveValue; +using Int32ValuePtr = std::shared_ptr; +using Uint64Value = PrimitiveValue; +using Uint64ValuePtr = std::shared_ptr; +using Int64Value = PrimitiveValue; +using Int64ValuePtr = std::shared_ptr; +using DoubleValue = PrimitiveValue; +using DoubleValuePtr = std::shared_ptr; +using StringValue = PrimitiveValue; +using StringValuePtr = std::shared_ptr; +using ObjectPathValue = PrimitiveValue; +using ObjectPathValuePtr = std::shared_ptr; +using SignatureValue = PrimitiveValue; +using SignatureValuePtr = std::shared_ptr; +using UnixFDValue = PrimitiveValue; +using UnixFDValuePtr = std::shared_ptr; class VariantValue; -typedef IceUtil::Handle VariantValuePtr; +using VariantValuePtr = std::shared_ptr; -class VariantValue : public Value +class VariantValue : public Value, public std::enable_shared_from_this { public: - VariantValue() : _type(new VariantType) {} + VariantValue() : + _type(make_shared()) + { + } VariantValue(const ValuePtr& val) : v(val), - _type(new VariantType) + _type(make_shared()) { } @@ -268,7 +275,7 @@ class VariantValue : public Value virtual ValuePtr clone() const { - return const_cast(this); + return const_cast(this)->shared_from_this(); } virtual std::string toString() const @@ -291,7 +298,7 @@ class VariantValue : public Value }; class DictEntryValue; -typedef IceUtil::Handle DictEntryValuePtr; +using DictEntryValuePtr = std::shared_ptr; class DictEntryValue : public Value { @@ -313,7 +320,7 @@ class DictEntryValue : public Value virtual ValuePtr clone() const { - DictEntryValuePtr r = new DictEntryValue(_type); + DictEntryValuePtr r = make_shared(_type); r->key = key->clone(); r->value = value->clone(); return r; @@ -342,7 +349,7 @@ class DictEntryValue : public Value }; class ArrayValue; -typedef IceUtil::Handle ArrayValuePtr; +using ArrayValuePtr = std::shared_ptr; class ArrayValue : public Value { @@ -357,7 +364,7 @@ class ArrayValue : public Value virtual ValuePtr clone() const { - ArrayValuePtr r = new ArrayValue(_type); + auto r = make_shared(_type); for(std::vector::const_iterator p = elements.begin(); p != elements.end(); ++p) { r->elements.push_back((*p)->clone()); @@ -383,9 +390,9 @@ class ArrayValue : public Value { for(std::vector::const_iterator p = elements.begin(); p != elements.end(); ++p) { - DictEntryValuePtr de = DictEntryValuePtr::dynamicCast(*p); + auto de = dynamic_pointer_cast(*p); assert(de); - StringValuePtr s = StringValuePtr::dynamicCast(de->key); + auto s = dynamic_pointer_cast(de->key); assert(s); m[s->v] = de->value; } @@ -409,22 +416,22 @@ class ArrayValue : public Value }; class StructValue; -typedef IceUtil::Handle StructValuePtr; +using StructValuePtr = std::shared_ptr; -class StructValue : public Value +class StructValue final : public Value { public: StructValue(const StructTypePtr& t) : _type(t) {} - virtual TypePtr getType() const + TypePtr getType() const final { return _type; } - virtual ValuePtr clone() const + ValuePtr clone() const final { - StructValuePtr r = new StructValue(_type); + auto r = make_shared(_type); for(std::vector::const_iterator p = members.begin(); p != members.end(); ++p) { r->members.push_back((*p)->clone()); @@ -432,7 +439,7 @@ class StructValue : public Value return r; } - virtual std::string toString() const + std::string toString() const final { std::ostringstream out; for(std::vector::const_iterator p = members.begin(); p != members.end(); ++p) @@ -448,9 +455,9 @@ class StructValue : public Value std::vector members; -protected: +private: - virtual void print(std::ostream& ostr) + void print(std::ostream& ostr) final { for(std::vector::const_iterator p = members.begin(); p != members.end(); ++p) { @@ -458,8 +465,6 @@ class StructValue : public Value } } -private: - StructTypePtr _type; }; @@ -467,9 +472,9 @@ class StructValue : public Value // Message encapsulates a DBus message. It only provides the functionality required by the IceBT transport. // class Message; -typedef IceUtil::Handle MessagePtr; +using MessagePtr = std::shared_ptr; -class Message : public IceUtil::Shared +class Message { public: @@ -504,7 +509,7 @@ class Message : public IceUtil::Shared }; class AsyncResult; -typedef IceUtil::Handle AsyncResultPtr; +using AsyncResultPtr = std::shared_ptr; class AsyncCallback { @@ -517,7 +522,7 @@ using AsyncCallbackPtr = std::shared_ptr; // // The result of an asynchronous DBus operation. // -class AsyncResult : public IceUtil::Shared +class AsyncResult { public: @@ -532,7 +537,7 @@ class AsyncResult : public IceUtil::Shared }; class Connection; -typedef IceUtil::Handle ConnectionPtr; +using ConnectionPtr = std::shared_ptr; // // Allows a subclass to intercept DBus messages. @@ -562,7 +567,7 @@ using ServicePtr = std::shared_ptr; // // Encapsulates a DBus connection. // -class Connection : public IceUtil::Shared +class Connection { public: @@ -588,15 +593,12 @@ class Connection : public IceUtil::Shared virtual void sendAsync(const MessagePtr&) = 0; virtual void close() = 0; - -protected: - - Connection() {} }; void initThreads(); } + } #endif diff --git a/cpp/src/IceBT/EndpointI.cpp b/cpp/src/IceBT/EndpointI.cpp index 42ddf9d0f56..cb889ba7b42 100644 --- a/cpp/src/IceBT/EndpointI.cpp +++ b/cpp/src/IceBT/EndpointI.cpp @@ -158,21 +158,21 @@ IceBT::EndpointI::secure() const IceInternal::TransceiverPtr IceBT::EndpointI::transceiver() const { - return 0; + return nullptr; } void IceBT::EndpointI::connectors_async(EndpointSelectionType /*selType*/, const IceInternal::EndpointI_connectorsPtr& cb) const { vector connectors; - connectors.push_back(new ConnectorI(_instance, _addr, _uuid, _timeout, _connectionId)); + connectors.push_back(make_shared(_instance, _addr, _uuid, _timeout, _connectionId)); cb->connectors(connectors); } IceInternal::AcceptorPtr IceBT::EndpointI::acceptor(const string& adapterName) const { - return new AcceptorI(ICE_SHARED_FROM_CONST_THIS(EndpointI), _instance, adapterName, _addr, _uuid, _name, _channel); + return make_shared(ICE_SHARED_FROM_CONST_THIS(EndpointI), _instance, adapterName, _addr, _uuid, _name, _channel); } vector @@ -656,11 +656,11 @@ IceBT::EndpointFactoryI::read(InputStream* s) const void IceBT::EndpointFactoryI::destroy() { - _instance = 0; + _instance = nullptr; } IceInternal::EndpointFactoryPtr IceBT::EndpointFactoryI::clone(const IceInternal::ProtocolInstancePtr& instance) const { - return new EndpointFactoryI(new Instance(_instance->engine(), instance->type(), instance->protocol())); + return make_shared(new Instance(_instance->engine(), instance->type(), instance->protocol())); } diff --git a/cpp/src/IceBT/EndpointI.h b/cpp/src/IceBT/EndpointI.h index 4e7d466018c..0f7b5fd2851 100644 --- a/cpp/src/IceBT/EndpointI.h +++ b/cpp/src/IceBT/EndpointI.h @@ -92,6 +92,7 @@ class EndpointFactoryI : public IceInternal::EndpointFactory { public: + EndpointFactoryI(const InstancePtr&); virtual ~EndpointFactoryI(); virtual Ice::Short type() const; @@ -104,9 +105,6 @@ class EndpointFactoryI : public IceInternal::EndpointFactory private: - EndpointFactoryI(const InstancePtr&); - friend class PluginI; - InstancePtr _instance; }; diff --git a/cpp/src/IceBT/Engine.cpp b/cpp/src/IceBT/Engine.cpp index 9f5ed614c4f..6436c585519 100644 --- a/cpp/src/IceBT/Engine.cpp +++ b/cpp/src/IceBT/Engine.cpp @@ -20,13 +20,13 @@ namespace IceBT { class ConnectionI; -typedef IceUtil::Handle ConnectionIPtr; +using ConnectionIPtr = std::shared_ptr; // // ConnectionI implements IceBT::Connection and encapsulates a DBus connection along with // some additional state. // -class ConnectionI : public Connection +class ConnectionI final : public Connection { public: @@ -45,7 +45,7 @@ class ConnectionI : public Connection // // Blocking close. // - virtual void close() + void close() final { try { @@ -54,7 +54,7 @@ class ConnectionI : public Connection // DBus::MessagePtr msg = DBus::Message::createCall("org.bluez", _devicePath, "org.bluez.Device1", "DisconnectProfile"); - msg->write(new DBus::StringValue(_uuid)); + msg->write(make_shared(_uuid)); DBus::AsyncResultPtr r = _connection->callAsync(msg); r->waitUntilFinished(); // Block until the call completes. } @@ -89,7 +89,7 @@ class Profile : public DBus::Service { public: - virtual void handleMethodCall(const DBus::ConnectionPtr& conn, const DBus::MessagePtr& m) + void handleMethodCall(const DBus::ConnectionPtr& conn, const DBus::MessagePtr& m) final { string member = m->getMember(); if(member == "Release") @@ -106,7 +106,7 @@ class Profile : public DBus::Service // // This argument is the Unix file descriptor for the new connection. // - DBus::UnixFDValuePtr fd = DBus::UnixFDValuePtr::dynamicCast(values[1]); + auto fd = dynamic_pointer_cast(values[1]); assert(fd); try @@ -154,8 +154,6 @@ class Profile : public DBus::Service protected: - Profile() {} - virtual void newConnection(int) = 0; }; using ProfilePtr = std::shared_ptr; @@ -163,7 +161,7 @@ using ProfilePtr = std::shared_ptr; // // ClientProfile represents an outgoing connection profile. // -class ClientProfile : public Profile +class ClientProfile final : public Profile { public: @@ -179,14 +177,14 @@ class ClientProfile : public Profile protected: - virtual void newConnection(int fd) + void newConnection(int fd) final { // // The callback assumes ownership of the file descriptor and connection. // _callback->completed(fd, _connection); - _connection = 0; // Remove circular reference. - _callback = 0; + _connection = nullptr; // Remove circular reference. + _callback = nullptr; } private: @@ -199,7 +197,7 @@ using ClientProfilePtr = std::shared_ptr; // // ServerProfile represents an incoming connection profile. // -class ServerProfile : public Profile +class ServerProfile final : public Profile { public: @@ -210,7 +208,7 @@ class ServerProfile : public Profile protected: - virtual void newConnection(int fd) + void newConnection(int fd) final { _callback->newConnection(fd); } @@ -249,7 +247,7 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi VariantMap::const_iterator i = properties.find("Address"); if(i != properties.end()) { - DBus::StringValuePtr str = DBus::StringValuePtr::dynamicCast(i->second->v); + auto str = dynamic_pointer_cast(i->second->v); assert(str); addr = str->v; } @@ -262,7 +260,7 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi VariantMap::const_iterator i = properties.find("Adapter"); if(i != properties.end()) { - DBus::ObjectPathValuePtr path = DBus::ObjectPathValuePtr::dynamicCast(i->second->v); + auto path = dynamic_pointer_cast(i->second->v); assert(path); adapter = path->v; } @@ -289,7 +287,7 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi VariantMap::const_iterator i = properties.find("Address"); if(i != properties.end()) { - DBus::StringValuePtr str = DBus::StringValuePtr::dynamicCast(i->second->v); + auto str = dynamic_pointer_cast(i->second->v); assert(str); addr = str->v; } @@ -347,7 +345,7 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi vector values = msg->readAll(); assert(values.size() == 2); - DBus::ObjectPathValuePtr path = DBus::ObjectPathValuePtr::dynamicCast(values[0]); + auto path = dynamic_pointer_cast(values[0]); assert(path); InterfacePropertiesMap interfaceProps; @@ -384,15 +382,15 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi vector values = msg->readAll(); assert(values.size() == 2); - DBus::ObjectPathValuePtr path = DBus::ObjectPathValuePtr::dynamicCast(values[0]); + auto path = dynamic_pointer_cast(values[0]); assert(path); - DBus::ArrayValuePtr ifaces = DBus::ArrayValuePtr::dynamicCast(values[1]); + auto ifaces = dynamic_pointer_cast(values[1]); assert(ifaces); for(vector::const_iterator q = ifaces->elements.begin(); q != ifaces->elements.end(); ++q) { assert((*q)->getType()->getKind() == DBus::Type::KindString); - DBus::StringValuePtr ifaceName = DBus::StringValuePtr::dynamicCast(*q); + auto ifaceName = dynamic_pointer_cast(*q); // // A remote device was removed. @@ -421,7 +419,7 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi vector values = msg->readAll(); assert(values.size() == 3); - DBus::StringValuePtr iface = DBus::StringValuePtr::dynamicCast(values[0]); + auto iface = dynamic_pointer_cast(values[0]); assert(iface); if(iface->v != "org.bluez.Device1" && iface->v != "org.bluez.Adapter1") @@ -432,12 +430,12 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi VariantMap changed; extractProperties(values[1], changed); - DBus::ArrayValuePtr a = DBus::ArrayValuePtr::dynamicCast(values[2]); + auto a = dynamic_pointer_cast(values[2]); assert(a); vector removedNames; for(vector::const_iterator p = a->elements.begin(); p != a->elements.end(); ++p) { - DBus::StringValuePtr sv = DBus::StringValuePtr::dynamicCast(*p); + auto sv = dynamic_pointer_cast(*p); assert(sv); removedNames.push_back(sv->v); } @@ -752,13 +750,13 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi // Iterate through the dictionary and collect the objects that we need. // assert(v->getType()->getKind() == DBus::Type::KindArray); - DBus::ArrayValuePtr a = DBus::ArrayValuePtr::dynamicCast(v); + auto a = dynamic_pointer_cast(v); for(vector::const_iterator p = a->elements.begin(); p != a->elements.end(); ++p) { assert((*p)->getType()->getKind() == DBus::Type::KindDictEntry); - DBus::DictEntryValuePtr e = DBus::DictEntryValuePtr::dynamicCast(*p); + auto e = dynamic_pointer_cast(*p); assert(e->key->getType()->getKind() == DBus::Type::KindObjectPath); - DBus::ObjectPathValuePtr path = DBus::ObjectPathValuePtr::dynamicCast(e->key); + auto path = dynamic_pointer_cast(e->key); assert(e->value->getType()->getKind() == DBus::Type::KindArray); InterfacePropertiesMap ipmap; @@ -806,32 +804,41 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi DBus::MessagePtr msg = DBus::Message::createCall("org.bluez", "/org/bluez", "org.bluez.ProfileManager1", "RegisterProfile"); vector args; - args.push_back(new DBus::ObjectPathValue(path)); - args.push_back(new DBus::StringValue(uuid)); - DBus::DictEntryTypePtr dt = - new DBus::DictEntryType(DBus::Type::getPrimitive(DBus::Type::KindString), new DBus::VariantType); - DBus::TypePtr t = new DBus::ArrayType(dt); - DBus::ArrayValuePtr options = new DBus::ArrayValue(t); + args.push_back(make_shared(path)); + args.push_back(make_shared(uuid)); + auto dt = make_shared( + DBus::Type::getPrimitive(DBus::Type::KindString), + make_shared()); + auto t = make_shared(dt); + auto options = make_shared(t); if(!name.empty()) { options->elements.push_back( - new DBus::DictEntryValue(dt, new DBus::StringValue("Name"), - new DBus::VariantValue(new DBus::StringValue(name)))); + make_shared( + dt, + make_shared("Name"), + make_shared(make_shared(name)))); } if(channel != -1) { options->elements.push_back( - new DBus::DictEntryValue(dt, new DBus::StringValue("Channel"), - new DBus::VariantValue(new DBus::Uint16Value(channel)))); + make_shared( + dt, + make_shared("Channel"), + make_shared(make_shared(channel)))); options->elements.push_back( - new DBus::DictEntryValue(dt, new DBus::StringValue("Role"), - new DBus::VariantValue(new DBus::StringValue("server")))); + make_shared( + dt, + make_shared("Role"), + make_shared(make_shared("server")))); } else { options->elements.push_back( - new DBus::DictEntryValue(dt, new DBus::StringValue("Role"), - new DBus::VariantValue(new DBus::StringValue("client")))); + make_shared( + dt, + make_shared("Role"), + make_shared(make_shared("client")))); } args.push_back(options); msg->write(args); @@ -845,7 +852,7 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi // DBus::MessagePtr msg = DBus::Message::createCall("org.bluez", "/org/bluez", "org.bluez.ProfileManager1", "UnregisterProfile"); - msg->write(new DBus::ObjectPathValue(path)); + msg->write(make_shared(path)); return conn->callAsync(msg); } @@ -1031,15 +1038,15 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi // Value: Property value (variant) // - DBus::ArrayValuePtr ifaces = DBus::ArrayValuePtr::dynamicCast(v); + auto ifaces = dynamic_pointer_cast(v); assert(ifaces); for(vector::const_iterator q = ifaces->elements.begin(); q != ifaces->elements.end(); ++q) { assert((*q)->getType()->getKind() == DBus::Type::KindDictEntry); - DBus::DictEntryValuePtr ie = DBus::DictEntryValuePtr::dynamicCast(*q); + auto ie = dynamic_pointer_cast(*q); assert(ie->key->getType()->getKind() == DBus::Type::KindString); - DBus::StringValuePtr ifaceName = DBus::StringValuePtr::dynamicCast(ie->key); + auto ifaceName = dynamic_pointer_cast(ie->key); VariantMap pm; extractProperties(ie->value, pm); @@ -1058,15 +1065,15 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi // assert(v->getType()->getKind() == DBus::Type::KindArray); - DBus::ArrayValuePtr props = DBus::ArrayValuePtr::dynamicCast(v); + auto props = dynamic_pointer_cast(v); for(vector::const_iterator s = props->elements.begin(); s != props->elements.end(); ++s) { assert((*s)->getType()->getKind() == DBus::Type::KindDictEntry); - DBus::DictEntryValuePtr pe = DBus::DictEntryValuePtr::dynamicCast(*s); + auto pe = dynamic_pointer_cast(*s); assert(pe->key->getType()->getKind() == DBus::Type::KindString); - DBus::StringValuePtr propName = DBus::StringValuePtr::dynamicCast(pe->key); + auto propName = dynamic_pointer_cast(pe->key); assert(pe->value->getType()->getKind() == DBus::Type::KindVariant); - vm[propName->v] = DBus::VariantValuePtr::dynamicCast(pe->value); + vm[propName->v] = dynamic_pointer_cast(pe->value); } } @@ -1150,7 +1157,7 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi // We have a matching device, now register a client profile. // DBus::ConnectionPtr dbusConn = DBus::Connection::getSystemBus(); - conn = new ConnectionI(dbusConn, devicePath, uuid); + conn = make_shared(dbusConn, devicePath, uuid); ProfilePtr profile = make_shared(conn, cb); string path = generatePath(); @@ -1175,7 +1182,7 @@ class BluetoothService : public DBus::Filter, public std::enable_shared_from_thi // DBus::MessagePtr msg = DBus::Message::createCall("org.bluez", devicePath, "org.bluez.Device1", "ConnectProfile"); - msg->write(new DBus::StringValue(uuid)); + msg->write(make_shared(uuid)); r = dbusConn->callAsync(msg); reply = r->waitUntilFinished(); if(reply->isError()) diff --git a/cpp/src/IceBT/Engine.h b/cpp/src/IceBT/Engine.h index 16868dc538a..99370a73b24 100644 --- a/cpp/src/IceBT/Engine.h +++ b/cpp/src/IceBT/Engine.h @@ -29,14 +29,14 @@ using ProfileCallbackPtr = std::shared_ptr; // Represents an outgoing (client) connection. The transport must keep a reference to this object // and call close() when no longer needed. // -class Connection : public IceUtil::Shared +class Connection { public: virtual void close() = 0; }; -typedef IceUtil::Handle ConnectionPtr; +using ConnectionPtr = std::shared_ptr; // // Callback API for an outgoing connection attempt. diff --git a/cpp/src/IceBT/EngineF.h b/cpp/src/IceBT/EngineF.h index aa82577b63c..d1c79c32373 100644 --- a/cpp/src/IceBT/EngineF.h +++ b/cpp/src/IceBT/EngineF.h @@ -16,7 +16,7 @@ IceUtil::Shared* upCast(Engine*); typedef IceInternal::Handle EnginePtr; class BluetoothService; -using BluetoothServicePtr = ::std::shared_ptr; +using BluetoothServicePtr = std::shared_ptr; } diff --git a/cpp/src/IceBT/InstanceF.h b/cpp/src/IceBT/InstanceF.h index 8bc404f3a45..68b5dd402a9 100644 --- a/cpp/src/IceBT/InstanceF.h +++ b/cpp/src/IceBT/InstanceF.h @@ -16,15 +16,13 @@ IceUtil::Shared* upCast(Instance*); typedef IceInternal::Handle InstancePtr; class EndpointI; -using EndpointIPtr = ::std::shared_ptr; +using EndpointIPtr = std::shared_ptr; class TransceiverI; -IceUtil::Shared* upCast(TransceiverI*); -typedef IceInternal::Handle TransceiverIPtr; +using TransceiverIPtr = std::shared_ptr; class AcceptorI; -IceUtil::Shared* upCast(AcceptorI*); -typedef IceInternal::Handle AcceptorIPtr; +using AcceptorIPtr = std::shared_ptr; } diff --git a/cpp/src/IceBT/PluginI.cpp b/cpp/src/IceBT/PluginI.cpp index 0d5d99d71e9..6aa846e8be8 100644 --- a/cpp/src/IceBT/PluginI.cpp +++ b/cpp/src/IceBT/PluginI.cpp @@ -62,10 +62,10 @@ IceBT::PluginI::PluginI(const Ice::CommunicatorPtr& com) : // interpret proxies before the plug-in is fully initialized. // InstancePtr bt = new Instance(_engine, BTEndpointType, "bt"); - f->addEndpointFactory(new EndpointFactoryI(bt)); + f->addEndpointFactory(make_shared(bt)); InstancePtr bts = new Instance(_engine, BTSEndpointType, "bts"); - f->addEndpointFactory(new IceInternal::UnderlyingEndpointFactory(bts, SSLEndpointType, BTEndpointType)); + f->addEndpointFactory(make_shared(bts, SSLEndpointType, BTEndpointType)); } void diff --git a/cpp/src/IceBT/StreamSocket.h b/cpp/src/IceBT/StreamSocket.h index 756e4a6be70..368db987419 100644 --- a/cpp/src/IceBT/StreamSocket.h +++ b/cpp/src/IceBT/StreamSocket.h @@ -46,7 +46,7 @@ class StreamSocket : public IceInternal::NativeInfo SocketAddress _addr; std::string _desc; }; -typedef IceUtil::Handle StreamSocketPtr; +using StreamSocketPtr = std::shared_ptr; } diff --git a/cpp/src/IceBT/TransceiverI.cpp b/cpp/src/IceBT/TransceiverI.cpp index 9256942ad7c..d1b2be8afaa 100644 --- a/cpp/src/IceBT/TransceiverI.cpp +++ b/cpp/src/IceBT/TransceiverI.cpp @@ -17,8 +17,6 @@ using namespace std; using namespace Ice; using namespace IceBT; -IceUtil::Shared* IceBT::upCast(TransceiverI* p) { return p; } - IceInternal::NativeInfoPtr IceBT::TransceiverI::getNativeInfo() { @@ -43,7 +41,7 @@ IceBT::TransceiverI::initialize(IceInternal::Buffer& /*readBuffer*/, IceInternal // We need to initiate a connection attempt. // _needConnect = false; - _instance->engine()->connect(_addr, _uuid, make_shared(this)); + _instance->engine()->connect(_addr, _uuid, make_shared(shared_from_this())); return IceInternal::SocketOperationConnect; } diff --git a/cpp/src/IceBT/TransceiverI.h b/cpp/src/IceBT/TransceiverI.h index cfdcd3df8c9..07c8c38d4bb 100644 --- a/cpp/src/IceBT/TransceiverI.h +++ b/cpp/src/IceBT/TransceiverI.h @@ -17,32 +17,28 @@ namespace IceBT class ConnectorI; class AcceptorI; -class TransceiverI : public IceInternal::Transceiver +class TransceiverI final : public IceInternal::Transceiver, public std::enable_shared_from_this { public: - virtual IceInternal::NativeInfoPtr getNativeInfo(); - - virtual IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&); - virtual IceInternal::SocketOperation closing(bool, const Ice::LocalException&); - virtual void close(); - virtual IceInternal::SocketOperation write(IceInternal::Buffer&); - virtual IceInternal::SocketOperation read(IceInternal::Buffer&); - virtual std::string protocol() const; - virtual std::string toString() const; - virtual std::string toDetailedString() const; - virtual Ice::ConnectionInfoPtr getInfo() const; - virtual void checkSendSize(const IceInternal::Buffer&); - virtual void setBufferSize(int rcvSize, int sndSize); - -private: - TransceiverI(const InstancePtr&, const StreamSocketPtr&, const ConnectionPtr&, const std::string&); TransceiverI(const InstancePtr&, const std::string&, const std::string&); - virtual ~TransceiverI(); + ~TransceiverI(); + IceInternal::NativeInfoPtr getNativeInfo() final; + + IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&) final; + IceInternal::SocketOperation closing(bool, const Ice::LocalException&) final; + void close() final; + IceInternal::SocketOperation write(IceInternal::Buffer&) final; + IceInternal::SocketOperation read(IceInternal::Buffer&) final; + std::string protocol() const final; + std::string toString() const final; + std::string toDetailedString() const final; + Ice::ConnectionInfoPtr getInfo() const final; + void checkSendSize(const IceInternal::Buffer&) final; + void setBufferSize(int rcvSize, int sndSize) final; - friend class ConnectorI; - friend class AcceptorI; +private: const InstancePtr _instance; StreamSocketPtr _stream; @@ -55,7 +51,7 @@ class TransceiverI : public IceInternal::Transceiver void connectCompleted(int, const ConnectionPtr&); void connectFailed(const Ice::LocalException&); - class ConnectCallbackI : public ConnectCallback + class ConnectCallbackI final : public ConnectCallback { public: @@ -64,12 +60,12 @@ class TransceiverI : public IceInternal::Transceiver { } - virtual void completed(int fd, const ConnectionPtr& conn) + void completed(int fd, const ConnectionPtr& conn) final { _transceiver->connectCompleted(fd, conn); } - virtual void failed(const Ice::LocalException& ex) + void failed(const Ice::LocalException& ex) final { _transceiver->connectFailed(ex); } diff --git a/cpp/src/IceIAP/Connector.h b/cpp/src/IceIAP/Connector.h index 16a38ecb299..74a51532792 100644 --- a/cpp/src/IceIAP/Connector.h +++ b/cpp/src/IceIAP/Connector.h @@ -22,24 +22,22 @@ class iAPEndpointI; class Instance; typedef IceUtil::Handle InstancePtr; -class iAPConnector : public IceInternal::Connector +class iAPConnector final : public IceInternal::Connector { public: - virtual IceInternal::TransceiverPtr connect(); + iAPConnector(const IceInternal::ProtocolInstancePtr&, Ice::Int, const std::string&, NSString*, EAAccessory*); + ~iAPConnector(); + IceInternal::TransceiverPtr connect() final; - virtual Ice::Short type() const; - virtual std::string toString() const; + Ice::Short type() const final; + std::string toString() const final; - virtual bool operator==(const IceInternal::Connector&) const; - virtual bool operator<(const IceInternal::Connector&) const; + bool operator==(const IceInternal::Connector&) const final; + bool operator<(const IceInternal::Connector&) const final; private: - iAPConnector(const IceInternal::ProtocolInstancePtr&, Ice::Int, const std::string&, NSString*, EAAccessory*); - virtual ~iAPConnector(); - friend class iAPEndpointI; - const IceInternal::ProtocolInstancePtr _instance; const Ice::Int _timeout; const std::string _connectionId; diff --git a/cpp/src/IceIAP/Connector.mm b/cpp/src/IceIAP/Connector.mm index 0a24468efba..b6a8930e108 100644 --- a/cpp/src/IceIAP/Connector.mm +++ b/cpp/src/IceIAP/Connector.mm @@ -25,7 +25,7 @@ { throw Ice::ConnectFailedException(__FILE__, __LINE__, 0); } - TransceiverPtr transceiver = new iAPTransceiver(_instance, session); + auto transceiver = make_shared(_instance, session); #if defined(__clang__) && !__has_feature(objc_arc) [session release]; #endif diff --git a/cpp/src/IceIAP/EndpointI.mm b/cpp/src/IceIAP/EndpointI.mm index cff270df6b0..9dc9a364c8e 100644 --- a/cpp/src/IceIAP/EndpointI.mm +++ b/cpp/src/IceIAP/EndpointI.mm @@ -49,7 +49,7 @@ // SSL based on iAP transport ProtocolInstancePtr iaps = new ProtocolInstance(com, iAPSEndpointType, "iaps", true); - f->addEndpointFactory(new UnderlyingEndpointFactory(iaps, SSLEndpointType, iAPEndpointType)); + f->addEndpointFactory(make_shared(iaps, SSLEndpointType, iAPEndpointType)); } virtual void initialize() {} @@ -260,7 +260,7 @@ virtual void destroy() {} { continue; } - c.push_back(new iAPConnector(_instance, _timeout, _connectionId, protocol, accessory)); + c.push_back(make_shared(_instance, _timeout, _connectionId, protocol, accessory)); } #if defined(__clang__) && !__has_feature(objc_arc) [protocol release]; @@ -281,7 +281,7 @@ virtual void destroy() {} IceObjC::iAPEndpointI::acceptor(const string&) const { assert(false); - return 0; + return nullptr; } vector @@ -688,7 +688,7 @@ virtual void destroy() {} EndpointFactoryPtr IceObjC::iAPEndpointFactory::clone(const ProtocolInstancePtr& instance) const { - return new iAPEndpointFactory(instance); + return make_shared(instance); } #endif diff --git a/cpp/src/IceIAP/Transceiver.h b/cpp/src/IceIAP/Transceiver.h index 14171055695..32e8da85300 100644 --- a/cpp/src/IceIAP/Transceiver.h +++ b/cpp/src/IceIAP/Transceiver.h @@ -18,7 +18,7 @@ namespace IceObjC { -class iAPTransceiver : public IceInternal::Transceiver, public IceInternal::StreamNativeInfo +class iAPTransceiver final : public IceInternal::Transceiver, public IceInternal::StreamNativeInfo { enum State { @@ -30,28 +30,28 @@ class iAPTransceiver : public IceInternal::Transceiver, public IceInternal::Stre public: iAPTransceiver(const IceInternal::ProtocolInstancePtr&, EASession*); - virtual ~iAPTransceiver(); + ~iAPTransceiver(); - virtual void initStreams(IceInternal::SelectorReadyCallback*); - virtual IceInternal::SocketOperation registerWithRunLoop(IceInternal::SocketOperation); - virtual IceInternal::SocketOperation unregisterFromRunLoop(IceInternal::SocketOperation, bool); - virtual void closeStreams(); + void initStreams(IceInternal::SelectorReadyCallback*) final; + IceInternal::SocketOperation registerWithRunLoop(IceInternal::SocketOperation) final; + IceInternal::SocketOperation unregisterFromRunLoop(IceInternal::SocketOperation, bool) final; + void closeStreams() final; - virtual IceInternal::NativeInfoPtr getNativeInfo(); + IceInternal::NativeInfoPtr getNativeInfo() final; - virtual IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&); + IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&) final; - virtual IceInternal::SocketOperation closing(bool, const Ice::LocalException&); - virtual void close(); - virtual IceInternal::SocketOperation write(IceInternal::Buffer&); - virtual IceInternal::SocketOperation read(IceInternal::Buffer&); + IceInternal::SocketOperation closing(bool, const Ice::LocalException&) final; + void close() final; + IceInternal::SocketOperation write(IceInternal::Buffer&) final; + IceInternal::SocketOperation read(IceInternal::Buffer&) final; - virtual std::string protocol() const; - virtual std::string toString() const; - virtual std::string toDetailedString() const; - virtual Ice::ConnectionInfoPtr getInfo() const; - virtual void checkSendSize(const IceInternal::Buffer&); - virtual void setBufferSize(int, int); + std::string protocol() const final; + std::string toString() const final; + std::string toDetailedString() const final; + Ice::ConnectionInfoPtr getInfo() const final; + void checkSendSize(const IceInternal::Buffer&) final; + void setBufferSize(int, int) final; private: diff --git a/cpp/src/IceSSL/AcceptorI.cpp b/cpp/src/IceSSL/AcceptorI.cpp index 78e1f114ac4..aef71d2f159 100644 --- a/cpp/src/IceSSL/AcceptorI.cpp +++ b/cpp/src/IceSSL/AcceptorI.cpp @@ -15,8 +15,6 @@ using namespace std; using namespace Ice; using namespace IceSSL; -IceUtil::Shared* IceSSL::upCast(AcceptorI* p) { return p; } - IceInternal::NativeInfoPtr IceSSL::AcceptorI::getNativeInfo() { diff --git a/cpp/src/IceSSL/AcceptorI.h b/cpp/src/IceSSL/AcceptorI.h index 64d32975f1a..56ee04593a1 100644 --- a/cpp/src/IceSSL/AcceptorI.h +++ b/cpp/src/IceSSL/AcceptorI.h @@ -19,6 +19,8 @@ class AcceptorI : public IceInternal::Acceptor, public IceInternal::NativeInfo { public: + AcceptorI(const EndpointIPtr&, const InstancePtr&, const IceInternal::AcceptorPtr&, const std::string&); + virtual ~AcceptorI(); virtual IceInternal::NativeInfoPtr getNativeInfo(); #if defined(ICE_USE_IOCP) virtual IceInternal::AsyncInfo* getAsyncInfo(IceInternal::SocketOperation); @@ -37,10 +39,6 @@ class AcceptorI : public IceInternal::Acceptor, public IceInternal::NativeInfo private: - AcceptorI(const EndpointIPtr&, const InstancePtr&, const IceInternal::AcceptorPtr&, const std::string&); - virtual ~AcceptorI(); - friend class EndpointI; - EndpointIPtr _endpoint; const InstancePtr _instance; const IceInternal::AcceptorPtr _delegate; diff --git a/cpp/src/IceSSL/ConnectorI.cpp b/cpp/src/IceSSL/ConnectorI.cpp index 1b5c2d53437..5c641d9db82 100644 --- a/cpp/src/IceSSL/ConnectorI.cpp +++ b/cpp/src/IceSSL/ConnectorI.cpp @@ -58,12 +58,7 @@ IceSSL::ConnectorI::operator==(const IceInternal::Connector& r) const return true; } - if(_delegate != p->_delegate) - { - return false; - } - - return true; + return Ice::targetEqualTo(_delegate, p->_delegate); } bool @@ -80,16 +75,7 @@ IceSSL::ConnectorI::operator<(const IceInternal::Connector& r) const return false; } - if(_delegate < p->_delegate) - { - return true; - } - else if(p->_delegate < _delegate) - { - return false; - } - - return false; + return Ice::targetLess(_delegate, p->_delegate); } IceSSL::ConnectorI::ConnectorI(const InstancePtr& instance, const IceInternal::ConnectorPtr& del, const string& h) : diff --git a/cpp/src/IceSSL/ConnectorI.h b/cpp/src/IceSSL/ConnectorI.h index 5bc487a32e0..f2d5775d0c0 100644 --- a/cpp/src/IceSSL/ConnectorI.h +++ b/cpp/src/IceSSL/ConnectorI.h @@ -20,6 +20,8 @@ class ConnectorI : public IceInternal::Connector { public: + ConnectorI(const InstancePtr&, const IceInternal::ConnectorPtr&, const std::string&); + virtual ~ConnectorI(); virtual IceInternal::TransceiverPtr connect(); virtual Ice::Short type() const; @@ -30,8 +32,6 @@ class ConnectorI : public IceInternal::Connector private: - ConnectorI(const InstancePtr&, const IceInternal::ConnectorPtr&, const std::string&); - virtual ~ConnectorI(); friend class EndpointI; const InstancePtr _instance; diff --git a/cpp/src/IceSSL/EndpointI.cpp b/cpp/src/IceSSL/EndpointI.cpp index f13cedf8a12..dccb640e2b1 100644 --- a/cpp/src/IceSSL/EndpointI.cpp +++ b/cpp/src/IceSSL/EndpointI.cpp @@ -164,7 +164,7 @@ IceSSL::EndpointI::connectors_async(Ice::EndpointSelectionType selType, vector connectors = c; for(vector::iterator p = connectors.begin(); p != connectors.end(); ++p) { - *p = new ConnectorI(_instance, *p, _host); + *p = make_shared(_instance, *p, _host); } _callback->connectors(connectors); } @@ -188,7 +188,7 @@ IceSSL::EndpointI::connectors_async(Ice::EndpointSelectionType selType, IceInternal::AcceptorPtr IceSSL::EndpointI::acceptor(const string& adapterName) const { - return new AcceptorI(ICE_SHARED_FROM_CONST_THIS(EndpointI), _instance, _delegate->acceptor(adapterName), adapterName); + return make_shared(ICE_SHARED_FROM_CONST_THIS(EndpointI), _instance, _delegate->acceptor(adapterName), adapterName); } EndpointIPtr @@ -344,7 +344,7 @@ IceSSL::EndpointFactoryI::destroy() IceInternal::EndpointFactoryPtr IceSSL::EndpointFactoryI::cloneWithUnderlying(const IceInternal::ProtocolInstancePtr& instance, Short underlying) const { - return new EndpointFactoryI(new Instance(_sslInstance->engine(), instance->type(), instance->protocol()), underlying); + return make_shared(new Instance(_sslInstance->engine(), instance->type(), instance->protocol()), underlying); } IceInternal::EndpointIPtr diff --git a/cpp/src/IceSSL/OpenSSLEngine.cpp b/cpp/src/IceSSL/OpenSSLEngine.cpp index 4f6ff2bf31f..3750778a982 100644 --- a/cpp/src/IceSSL/OpenSSLEngine.cpp +++ b/cpp/src/IceSSL/OpenSSLEngine.cpp @@ -845,7 +845,7 @@ OpenSSL::SSLEngine::createTransceiver(const InstancePtr& instance, const string& hostOrAdapterName, bool incoming) { - return new OpenSSL::TransceiverI(instance, delegate, hostOrAdapterName, incoming); + return make_shared(instance, delegate, hostOrAdapterName, incoming); } #ifndef OPENSSL_NO_DH diff --git a/cpp/src/IceSSL/OpenSSLTransceiverI.h b/cpp/src/IceSSL/OpenSSLTransceiverI.h index 21d2d2ad120..0fabaa8ff0f 100644 --- a/cpp/src/IceSSL/OpenSSLTransceiverI.h +++ b/cpp/src/IceSSL/OpenSSLTransceiverI.h @@ -25,37 +25,36 @@ namespace IceSSL namespace OpenSSL { -class TransceiverI : public IceInternal::Transceiver +class TransceiverI final : public IceInternal::Transceiver { public: - virtual IceInternal::NativeInfoPtr getNativeInfo(); - - virtual IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&); - virtual IceInternal::SocketOperation closing(bool, const Ice::LocalException&); - virtual void close(); - virtual IceInternal::SocketOperation write(IceInternal::Buffer&); - virtual IceInternal::SocketOperation read(IceInternal::Buffer&); + TransceiverI(const InstancePtr&, const IceInternal::TransceiverPtr&, const std::string&, bool); + ~TransceiverI(); + IceInternal::NativeInfoPtr getNativeInfo() final; + + IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&) final; + IceInternal::SocketOperation closing(bool, const Ice::LocalException&) final; + void close() final; + IceInternal::SocketOperation write(IceInternal::Buffer&) final; + IceInternal::SocketOperation read(IceInternal::Buffer&) final; #ifdef ICE_USE_IOCP - virtual bool startWrite(IceInternal::Buffer&); - virtual void finishWrite(IceInternal::Buffer&); - virtual void startRead(IceInternal::Buffer&); - virtual void finishRead(IceInternal::Buffer&); + bool startWrite(IceInternal::Buffer&) final; + void finishWrite(IceInternal::Buffer&) final; + void startRead(IceInternal::Buffer&) final; + void finishRead(IceInternal::Buffer&) final; #endif - virtual std::string protocol() const; - virtual std::string toString() const; - virtual std::string toDetailedString() const; - virtual Ice::ConnectionInfoPtr getInfo() const; - virtual void checkSendSize(const IceInternal::Buffer&); - virtual void setBufferSize(int rcvSize, int sndSize); + std::string protocol() const final; + std::string toString() const final; + std::string toDetailedString() const final; + Ice::ConnectionInfoPtr getInfo() const final; + void checkSendSize(const IceInternal::Buffer&) final; + void setBufferSize(int rcvSize, int sndSize) final; int verifyCallback(int , X509_STORE_CTX*); private: - TransceiverI(const InstancePtr&, const IceInternal::TransceiverPtr&, const std::string&, bool); - virtual ~TransceiverI(); - bool receive(); bool send(); @@ -81,7 +80,7 @@ class TransceiverI : public IceInternal::Transceiver size_t _maxSendPacketSize; size_t _maxRecvPacketSize; }; -typedef IceUtil::Handle TransceiverIPtr; +using TransceiverIPtr = std::shared_ptr; } // OpenSSL namespace end diff --git a/cpp/src/IceSSL/PluginI.cpp b/cpp/src/IceSSL/PluginI.cpp index 5be701c0f86..022d3ace1b5 100644 --- a/cpp/src/IceSSL/PluginI.cpp +++ b/cpp/src/IceSSL/PluginI.cpp @@ -33,7 +33,7 @@ PluginI::PluginI(const Ice::CommunicatorPtr& com, const SSLEnginePtr& engine) : // interpret proxies before the plug-in is fully initialized. // InstancePtr instance = new Instance(_engine, SSLEndpointType, "ssl"); // SSL based on TCP - IceInternal::getProtocolPluginFacade(com)->addEndpointFactory(new EndpointFactoryI(instance, TCPEndpointType)); + IceInternal::getProtocolPluginFacade(com)->addEndpointFactory(make_shared(instance, TCPEndpointType)); } void diff --git a/cpp/src/IceSSL/SChannelEngine.cpp b/cpp/src/IceSSL/SChannelEngine.cpp index fc2d8ef4349..dab2722233c 100644 --- a/cpp/src/IceSSL/SChannelEngine.cpp +++ b/cpp/src/IceSSL/SChannelEngine.cpp @@ -1218,5 +1218,5 @@ SChannel::SSLEngine::createTransceiver(const InstancePtr& instance, const string& hostOrAdapterName, bool incoming) { - return new SChannel::TransceiverI(instance, delegate, hostOrAdapterName, incoming); + return make_shared(instance, delegate, hostOrAdapterName, incoming); } diff --git a/cpp/src/IceSSL/SChannelTransceiverI.h b/cpp/src/IceSSL/SChannelTransceiverI.h index b319a28dfcb..5c5cfbedfb1 100644 --- a/cpp/src/IceSSL/SChannelTransceiverI.h +++ b/cpp/src/IceSSL/SChannelTransceiverI.h @@ -38,35 +38,34 @@ namespace IceSSL namespace SChannel { -class TransceiverI : public IceInternal::Transceiver +class TransceiverI final : public IceInternal::Transceiver { public: - virtual IceInternal::NativeInfoPtr getNativeInfo(); - - virtual IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&); - virtual IceInternal::SocketOperation closing(bool, const Ice::LocalException&); - virtual void close(); - virtual IceInternal::SocketOperation write(IceInternal::Buffer&); - virtual IceInternal::SocketOperation read(IceInternal::Buffer&); + TransceiverI(const InstancePtr&, const IceInternal::TransceiverPtr&, const std::string&, bool); + ~TransceiverI(); + IceInternal::NativeInfoPtr getNativeInfo() final; + + IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&) final; + IceInternal::SocketOperation closing(bool, const Ice::LocalException&) final; + void close(); + IceInternal::SocketOperation write(IceInternal::Buffer&) final; + IceInternal::SocketOperation read(IceInternal::Buffer&) final; #ifdef ICE_USE_IOCP - virtual bool startWrite(IceInternal::Buffer&); - virtual void finishWrite(IceInternal::Buffer&); - virtual void startRead(IceInternal::Buffer&); - virtual void finishRead(IceInternal::Buffer&); + bool startWrite(IceInternal::Buffer&) final; + void finishWrite(IceInternal::Buffer&) final; + void startRead(IceInternal::Buffer&) final; + void finishRead(IceInternal::Buffer&) final; #endif - virtual std::string protocol() const; - virtual std::string toString() const; - virtual std::string toDetailedString() const; - virtual Ice::ConnectionInfoPtr getInfo() const; - virtual void checkSendSize(const IceInternal::Buffer&); - virtual void setBufferSize(int rcvSize, int sndSize); + std::string protocol() const final; + std::string toString() const final; + std::string toDetailedString() const final; + Ice::ConnectionInfoPtr getInfo() const final; + void checkSendSize(const IceInternal::Buffer&) final; + void setBufferSize(int rcvSize, int sndSize) final; private: - TransceiverI(const InstancePtr&, const IceInternal::TransceiverPtr&, const std::string&, bool); - virtual ~TransceiverI(); - IceInternal::SocketOperation sslHandshake(); size_t decryptMessage(IceInternal::Buffer&); @@ -75,8 +74,6 @@ class TransceiverI : public IceInternal::Transceiver bool writeRaw(IceInternal::Buffer&); bool readRaw(IceInternal::Buffer&); - friend class IceSSL::SChannel::SSLEngine; - enum State { StateNotInitialized, @@ -122,7 +119,7 @@ class TransceiverI : public IceInternal::Transceiver bool _verified; TrustError _trustError; }; -typedef IceUtil::Handle TransceiverIPtr; +using TransceiverIPtr = std::shared_ptr; } // SChannel namespace end diff --git a/cpp/src/IceSSL/SecureTransportEngine.cpp b/cpp/src/IceSSL/SecureTransportEngine.cpp index 38a46f29b16..7a8240c8692 100644 --- a/cpp/src/IceSSL/SecureTransportEngine.cpp +++ b/cpp/src/IceSSL/SecureTransportEngine.cpp @@ -1026,7 +1026,7 @@ IceSSL::SecureTransport::SSLEngine::createTransceiver(const InstancePtr& instanc const string& hostOrAdapterName, bool incoming) { - return new IceSSL::SecureTransport::TransceiverI(instance, delegate, hostOrAdapterName, incoming); + return make_shared(instance, delegate, hostOrAdapterName, incoming); } SSLContextRef diff --git a/cpp/src/IceSSL/SecureTransportTransceiverI.h b/cpp/src/IceSSL/SecureTransportTransceiverI.h index 88b38813ee6..75c9218f977 100644 --- a/cpp/src/IceSSL/SecureTransportTransceiverI.h +++ b/cpp/src/IceSSL/SecureTransportTransceiverI.h @@ -26,35 +26,32 @@ namespace IceSSL namespace SecureTransport { -class TransceiverI : public IceInternal::Transceiver +class TransceiverI final : public IceInternal::Transceiver { public: - virtual IceInternal::NativeInfoPtr getNativeInfo(); - - virtual IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&); - virtual IceInternal::SocketOperation closing(bool, const Ice::LocalException&); - virtual void close(); - virtual IceInternal::SocketOperation write(IceInternal::Buffer&); - virtual IceInternal::SocketOperation read(IceInternal::Buffer&); - - virtual std::string protocol() const; - virtual std::string toString() const; - virtual std::string toDetailedString() const; - virtual Ice::ConnectionInfoPtr getInfo() const; - virtual void checkSendSize(const IceInternal::Buffer&); - virtual void setBufferSize(int rcvSize, int sndSize); + TransceiverI(const InstancePtr&, const IceInternal::TransceiverPtr&, const std::string&, bool); + ~TransceiverI(); + IceInternal::NativeInfoPtr getNativeInfo() final; + + IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&) final; + IceInternal::SocketOperation closing(bool, const Ice::LocalException&) final; + void close() final; + IceInternal::SocketOperation write(IceInternal::Buffer&) final; + IceInternal::SocketOperation read(IceInternal::Buffer&) final; + + std::string protocol() const final; + std::string toString() const final; + std::string toDetailedString() const final; + Ice::ConnectionInfoPtr getInfo() const final; + void checkSendSize(const IceInternal::Buffer&) final; + void setBufferSize(int rcvSize, int sndSize) final; OSStatus writeRaw(const char*, size_t*) const; OSStatus readRaw(char*, size_t*) const; private: - TransceiverI(const InstancePtr&, const IceInternal::TransceiverPtr&, const std::string&, bool); - virtual ~TransceiverI(); - - friend class IceSSL::SecureTransport::SSLEngine; - const InstancePtr _instance; const SSLEnginePtr _engine; const std::string _host; @@ -81,7 +78,7 @@ class TransceiverI : public IceInternal::Transceiver bool _verified; size_t _buffered; }; -typedef IceUtil::Handle TransceiverIPtr; +using TransceiverIPtr = std::shared_ptr; } // SecureTransport namespace end diff --git a/cpp/test/Ice/background/Acceptor.cpp b/cpp/test/Ice/background/Acceptor.cpp index 96666fce577..d93bb3a60aa 100644 --- a/cpp/test/Ice/background/Acceptor.cpp +++ b/cpp/test/Ice/background/Acceptor.cpp @@ -48,7 +48,7 @@ Acceptor::finishAccept() IceInternal::TransceiverPtr Acceptor::accept() { - return new Transceiver(_acceptor->accept()); + return make_shared(_acceptor->accept()); } string diff --git a/cpp/test/Ice/background/Acceptor.h b/cpp/test/Ice/background/Acceptor.h index aea0a940337..ddeb1be990a 100644 --- a/cpp/test/Ice/background/Acceptor.h +++ b/cpp/test/Ice/background/Acceptor.h @@ -12,6 +12,7 @@ class Acceptor : public IceInternal::Acceptor { public: + Acceptor(const EndpointIPtr&, const IceInternal::AcceptorPtr&); virtual IceInternal::NativeInfoPtr getNativeInfo(); virtual void close(); @@ -29,9 +30,6 @@ class Acceptor : public IceInternal::Acceptor private: - Acceptor(const EndpointIPtr&, const IceInternal::AcceptorPtr&); - friend class EndpointI; - EndpointIPtr _endpoint; const IceInternal::AcceptorPtr _acceptor; }; diff --git a/cpp/test/Ice/background/Connector.cpp b/cpp/test/Ice/background/Connector.cpp index 6c55110b6b1..3b4c9d0eb8e 100644 --- a/cpp/test/Ice/background/Connector.cpp +++ b/cpp/test/Ice/background/Connector.cpp @@ -16,7 +16,7 @@ IceInternal::TransceiverPtr Connector::connect() { _configuration->checkConnectException(); - return new Transceiver(_connector->connect()); + return make_shared(_connector->connect()); } Ice::Short diff --git a/cpp/test/Ice/background/EndpointFactory.cpp b/cpp/test/Ice/background/EndpointFactory.cpp index da9c2ff0d52..0c279faf7a1 100644 --- a/cpp/test/Ice/background/EndpointFactory.cpp +++ b/cpp/test/Ice/background/EndpointFactory.cpp @@ -57,5 +57,5 @@ EndpointFactory::destroy() IceInternal::EndpointFactoryPtr EndpointFactory::clone(const IceInternal::ProtocolInstancePtr&) const { - return const_cast(this); + return const_cast(this)->shared_from_this(); } diff --git a/cpp/test/Ice/background/EndpointFactory.h b/cpp/test/Ice/background/EndpointFactory.h index 4cf7d0e707b..2c9ebfa7979 100644 --- a/cpp/test/Ice/background/EndpointFactory.h +++ b/cpp/test/Ice/background/EndpointFactory.h @@ -7,10 +7,11 @@ #include -class EndpointFactory : public IceInternal::EndpointFactory +class EndpointFactory : public IceInternal::EndpointFactory, std::enable_shared_from_this { public: + EndpointFactory(const IceInternal::EndpointFactoryPtr&); virtual ~EndpointFactory() { } virtual ::Ice::Short type() const; @@ -23,9 +24,6 @@ class EndpointFactory : public IceInternal::EndpointFactory protected: - EndpointFactory(const IceInternal::EndpointFactoryPtr&); - friend class TestPluginI; - IceInternal::EndpointFactoryPtr _factory; }; diff --git a/cpp/test/Ice/background/EndpointI.cpp b/cpp/test/Ice/background/EndpointI.cpp index f361fad8435..2bd5e745aa8 100644 --- a/cpp/test/Ice/background/EndpointI.cpp +++ b/cpp/test/Ice/background/EndpointI.cpp @@ -127,7 +127,7 @@ EndpointI::transceiver() const IceInternal::TransceiverPtr transceiver = _endpoint->transceiver(); if(transceiver) { - return new Transceiver(transceiver); + return make_shared(transceiver); } else { @@ -152,7 +152,7 @@ EndpointI::connectors_async(Ice::EndpointSelectionType selType, const IceInterna vector c; for(vector::const_iterator p = connectors.begin(); p != connectors.end(); ++p) { - c.push_back(new Connector(*p)); + c.push_back(make_shared(*p)); } _callback->connectors(c); } @@ -182,7 +182,7 @@ EndpointI::connectors_async(Ice::EndpointSelectionType selType, const IceInterna IceInternal::AcceptorPtr EndpointI::acceptor(const string& adapterName) const { - return new Acceptor(ICE_SHARED_FROM_CONST_THIS(EndpointI), _endpoint->acceptor(adapterName)); + return make_shared(ICE_SHARED_FROM_CONST_THIS(EndpointI), _endpoint->acceptor(adapterName)); } /*IceInternal::EndpointIPtr diff --git a/cpp/test/Ice/background/PluginI.cpp b/cpp/test/Ice/background/PluginI.cpp index e18ab8a434e..ce4fc6d9f9d 100644 --- a/cpp/test/Ice/background/PluginI.cpp +++ b/cpp/test/Ice/background/PluginI.cpp @@ -62,7 +62,7 @@ TestPluginI::initialize() IceInternal::EndpointFactoryPtr factory = facade->getEndpointFactory(s); if(factory) { - facade->addEndpointFactory(new EndpointFactory(factory)); + facade->addEndpointFactory(make_shared(factory)); } } for(Ice::Short s = 1000; s < 1010; ++s) @@ -70,7 +70,7 @@ TestPluginI::initialize() IceInternal::EndpointFactoryPtr factory = facade->getEndpointFactory(s); if(factory) { - facade->addEndpointFactory(new EndpointFactory(factory)); + facade->addEndpointFactory(make_shared(factory)); } } for(Ice::Short s = 10000; s < 10010; ++s) @@ -78,7 +78,7 @@ TestPluginI::initialize() IceInternal::EndpointFactoryPtr factory = facade->getEndpointFactory(s); if(factory) { - facade->addEndpointFactory(new EndpointFactory(factory)); + facade->addEndpointFactory(make_shared(factory)); } } } diff --git a/cpp/test/Ice/background/Transceiver.h b/cpp/test/Ice/background/Transceiver.h index 16b00799a4f..7b79da3feeb 100644 --- a/cpp/test/Ice/background/Transceiver.h +++ b/cpp/test/Ice/background/Transceiver.h @@ -9,35 +9,35 @@ #include #include -class Transceiver : public IceInternal::Transceiver +class Transceiver final : public IceInternal::Transceiver { public: - virtual IceInternal::NativeInfoPtr getNativeInfo(); + Transceiver(const IceInternal::TransceiverPtr&); + IceInternal::NativeInfoPtr getNativeInfo() final; - virtual IceInternal::SocketOperation closing(bool, const Ice::LocalException&); - virtual void close(); - virtual IceInternal::SocketOperation write(IceInternal::Buffer&); - virtual IceInternal::SocketOperation read(IceInternal::Buffer&); + IceInternal::SocketOperation closing(bool, const Ice::LocalException&) final; + void close(); + IceInternal::SocketOperation write(IceInternal::Buffer&) final; + IceInternal::SocketOperation read(IceInternal::Buffer&) final; #ifdef ICE_USE_IOCP - virtual bool startWrite(IceInternal::Buffer&); - virtual void finishWrite(IceInternal::Buffer&); - virtual void startRead(IceInternal::Buffer&); - virtual void finishRead(IceInternal::Buffer&); + bool startWrite(IceInternal::Buffer&) final; + void finishWrite(IceInternal::Buffer&) final; + void startRead(IceInternal::Buffer&) final; + void finishRead(IceInternal::Buffer&) final; #endif - virtual std::string protocol() const; - virtual std::string toString() const; - virtual std::string toDetailedString() const; - virtual Ice::ConnectionInfoPtr getInfo() const; - virtual IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&); - virtual void checkSendSize(const IceInternal::Buffer&); - virtual void setBufferSize(int rcvSize, int sndSize); + std::string protocol() const final; + std::string toString() const final; + std::string toDetailedString() const final; + Ice::ConnectionInfoPtr getInfo() const final; + IceInternal::SocketOperation initialize(IceInternal::Buffer&, IceInternal::Buffer&) final; + void checkSendSize(const IceInternal::Buffer&) final; + void setBufferSize(int rcvSize, int sndSize) final; IceInternal::TransceiverPtr delegate() const { return _transceiver; } private: - Transceiver(const IceInternal::TransceiverPtr&); friend class Connector; friend class Acceptor; friend class EndpointI;