summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Proxy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/Proxy.cpp')
-rw-r--r--cpp/src/Ice/Proxy.cpp32
1 files changed, 26 insertions, 6 deletions
diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp
index a39b3eafe89..2176d2874a0 100644
--- a/cpp/src/Ice/Proxy.cpp
+++ b/cpp/src/Ice/Proxy.cpp
@@ -501,6 +501,22 @@ IceProxy::Ice::Object::ice_locator(const LocatorPrx& locator) const
}
ObjectPrx
+IceProxy::Ice::Object::ice_collocationOptimization(bool b) const
+{
+ ReferencePtr ref = _reference->changeCollocationOptimization(b);
+ if(ref == _reference)
+ {
+ return ObjectPrx(const_cast< ::IceProxy::Ice::Object*>(this));
+ }
+ else
+ {
+ ObjectPrx proxy(new ::IceProxy::Ice::Object());
+ proxy->setup(ref);
+ return proxy;
+ }
+}
+
+ObjectPrx
IceProxy::Ice::Object::ice_default() const
{
ReferencePtr ref = _reference->changeDefault();
@@ -664,14 +680,18 @@ IceProxy::Ice::Object::__getDelegate()
throw CommunicatorDestroyedException(__FILE__, __LINE__);
}
- ObjectAdapterPtr adapter = objectAdapterFactory->findObjectAdapter(this);
- if(adapter)
+ if(_reference->collocationOptimization)
{
- Handle< ::IceDelegateD::Ice::Object> delegate = __createDelegateD();
- delegate->setup(_reference, adapter);
- _delegate = delegate;
+ ObjectAdapterPtr adapter = objectAdapterFactory->findObjectAdapter(this);
+ if(adapter)
+ {
+ Handle< ::IceDelegateD::Ice::Object> delegate = __createDelegateD();
+ delegate->setup(_reference, adapter);
+ _delegate = delegate;
+ }
}
- else
+
+ if(!_delegate)
{
Handle< ::IceDelegateM::Ice::Object> delegate = __createDelegateM();
delegate->setup(_reference);