diff options
author | Benoit Foucher <benoit@zeroc.com> | 2008-01-15 10:15:19 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2008-01-15 10:15:19 +0100 |
commit | f00672fd53741dc528b81ed7f53dcca8276c2014 (patch) | |
tree | 3625b90e69b8b3ffefc35567c1eeafb2ef07c276 /cpp/src | |
parent | More documentation changes wrt mcpp usage. (diff) | |
download | ice-f00672fd53741dc528b81ed7f53dcca8276c2014.tar.bz2 ice-f00672fd53741dc528b81ed7f53dcca8276c2014.tar.xz ice-f00672fd53741dc528b81ed7f53dcca8276c2014.zip |
Fixed bug 1359
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/Reference.cpp | 106 | ||||
-rw-r--r-- | cpp/src/Ice/Reference.h | 9 |
2 files changed, 59 insertions, 56 deletions
diff --git a/cpp/src/Ice/Reference.cpp b/cpp/src/Ice/Reference.cpp index a65e6883729..d412d2e9b51 100644 --- a/cpp/src/Ice/Reference.cpp +++ b/cpp/src/Ice/Reference.cpp @@ -104,6 +104,19 @@ IceInternal::Reference::changeFacet(const string& newFacet) const return r; } +ReferencePtr +IceInternal::Reference::changeCompress(bool newCompress) const +{ + if(_overrideCompress && newCompress == _compress) + { + return ReferencePtr(const_cast<Reference*>(this)); + } + ReferencePtr r = _instance->referenceFactory()->copy(this); + r->_compress = newCompress; + r->_overrideCompress = true; + return r; +} + Int Reference::hash() const { @@ -311,6 +324,11 @@ IceInternal::Reference::operator==(const Reference& r) const return false; } + if(_overrideCompress != r._overrideCompress || _overrideCompress && _compress != r._compress) + { + return false; + } + return true; } @@ -363,6 +381,26 @@ IceInternal::Reference::operator<(const Reference& r) const return false; } + if(!_overrideCompress && r._overrideCompress) + { + return true; + } + else if(r._overrideCompress < _overrideCompress) + { + return false; + } + else if(_overrideCompress) + { + if(!_compress && r._compress) + { + return true; + } + else if(r._compress < _compress) + { + return false; + } + } + if(getType() < r.getType()) { return true; @@ -400,6 +438,8 @@ public: IceInternal::Reference::Reference(const InstancePtr& inst, const CommunicatorPtr& com, const Identity& ident, const SharedContextPtr& ctx, const string& fs, Mode md) : _hashInitialized(false), + _overrideCompress(false), + _compress(false), _instance(inst), _communicator(com), _mode(md), @@ -411,6 +451,8 @@ IceInternal::Reference::Reference(const InstancePtr& inst, const CommunicatorPtr IceInternal::Reference::Reference(const Reference& r) : _hashInitialized(false), + _overrideCompress(r._overrideCompress), + _compress(r._compress), _instance(r._instance), _communicator(r._communicator), _mode(r._mode), @@ -526,16 +568,6 @@ IceInternal::FixedReference::changeCollocationOptimization(bool) const } ReferencePtr -IceInternal::FixedReference::changeCompress(bool) const -{ - // TODO: FixedReferences should probably have a _compress flag, - // that gets its default from the fixed connection this reference - // refers to. This should be changable with changeCompress(). - throw FixedProxyException(__FILE__, __LINE__); - return 0; // Keep the compiler happy. -} - -ReferencePtr IceInternal::FixedReference::changeTimeout(int) const { throw FixedProxyException(__FILE__, __LINE__); @@ -620,8 +652,20 @@ IceInternal::FixedReference::getConnection(bool& compress) const ConnectionIPtr connection = filteredConns[0]; assert(connection); connection->throwException(); // Throw in case our connection is already destroyed. - compress = connection->endpoint()->compress(); + DefaultsAndOverridesPtr defaultsAndOverrides = getInstance()->defaultsAndOverrides(); + if(defaultsAndOverrides->overrideCompress) + { + compress = defaultsAndOverrides->overrideCompressValue; + } + else if(_overrideCompress) + { + compress = _compress; + } + else + { + compress = connection->endpoint()->compress(); + } return connection; } @@ -844,19 +888,6 @@ IceInternal::RoutableReference::changeCollocationOptimization(bool newCollocatio } ReferencePtr -IceInternal::RoutableReference::changeCompress(bool newCompress) const -{ - if(_overrideCompress && newCompress == _compress) - { - return RoutableReferencePtr(const_cast<RoutableReference*>(this)); - } - RoutableReferencePtr r = RoutableReferencePtr::dynamicCast(getInstance()->referenceFactory()->copy(this)); - r->_compress = newCompress; - r->_overrideCompress = true; - return r; -} - -ReferencePtr IceInternal::RoutableReference::changeTimeout(int newTimeout) const { if(_overrideTimeout && newTimeout == _timeout) @@ -959,10 +990,6 @@ IceInternal::RoutableReference::operator==(const Reference& r) const { return false; } - if(_overrideCompress != rhs->_overrideCompress || _overrideCompress && _compress != rhs->_compress) - { - return false; - } if(_overrideTimeout != rhs->_overrideTimeout || _overrideTimeout && _timeout != rhs->_timeout) { return false; @@ -1043,25 +1070,6 @@ IceInternal::RoutableReference::operator<(const Reference& r) const { return false; } - if(!_overrideCompress && rhs->_overrideCompress) - { - return true; - } - else if(rhs->_overrideCompress < _overrideCompress) - { - return false; - } - else if(_overrideCompress) - { - if(!_compress && rhs->_compress) - { - return true; - } - else if(rhs->_compress < _compress) - { - return false; - } - } if(!_overrideTimeout && rhs->_overrideTimeout) { return true; @@ -1332,8 +1340,6 @@ IceInternal::RoutableReference::RoutableReference(const InstancePtr& inst, const _collocationOptimization(collocationOpt), _cacheConnection(cacheConnection), _endpointSelection(endpointSelection), - _overrideCompress(false), - _compress(false), _overrideTimeout(false), _timeout(-1), _threadPerConnection(threadPerConnection) @@ -1349,8 +1355,6 @@ IceInternal::RoutableReference::RoutableReference(const RoutableReference& r) : _cacheConnection(r._cacheConnection), _endpointSelection(r._endpointSelection), _connectionId(r._connectionId), - _overrideCompress(r._overrideCompress), - _compress(r._compress), _overrideTimeout(r._overrideTimeout), _timeout(r._timeout), _threadPerConnection(r._threadPerConnection) diff --git a/cpp/src/Ice/Reference.h b/cpp/src/Ice/Reference.h index 95715300787..e9b862c01df 100644 --- a/cpp/src/Ice/Reference.h +++ b/cpp/src/Ice/Reference.h @@ -92,12 +92,12 @@ public: ReferencePtr changeMode(Mode) const; ReferencePtr changeIdentity(const Ice::Identity&) const; ReferencePtr changeFacet(const std::string&) const; + virtual ReferencePtr changeCompress(bool) const; virtual ReferencePtr changeSecure(bool) const = 0; virtual ReferencePtr changePreferSecure(bool) const = 0; virtual ReferencePtr changeRouter(const Ice::RouterPrx&) const = 0; virtual ReferencePtr changeLocator(const Ice::LocatorPrx&) const = 0; - virtual ReferencePtr changeCompress(bool) const = 0; virtual ReferencePtr changeTimeout(int) const = 0; virtual ReferencePtr changeConnectionId(const std::string&) const = 0; virtual ReferencePtr changeCollocationOptimization(bool) const = 0; @@ -142,6 +142,9 @@ protected: mutable Ice::Int _hashValue; mutable bool _hashInitialized; + bool _overrideCompress; + bool _compress; // Only used if _overrideCompress == true + private: const InstancePtr _instance; @@ -176,7 +179,6 @@ public: virtual ReferencePtr changeRouter(const Ice::RouterPrx&) const; virtual ReferencePtr changeLocator(const Ice::LocatorPrx&) const; virtual ReferencePtr changeCollocationOptimization(bool) const; - virtual ReferencePtr changeCompress(bool) const; virtual ReferencePtr changeTimeout(int) const; virtual ReferencePtr changeConnectionId(const std::string&) const; virtual ReferencePtr changeLocatorCacheTimeout(int) const; @@ -226,7 +228,6 @@ public: virtual ReferencePtr changePreferSecure(bool) const; virtual ReferencePtr changeRouter(const Ice::RouterPrx&) const; virtual ReferencePtr changeCollocationOptimization(bool) const; - virtual ReferencePtr changeCompress(bool) const; virtual ReferencePtr changeTimeout(int) const; virtual ReferencePtr changeConnectionId(const std::string&) const; virtual ReferencePtr changeCacheConnection(bool) const; @@ -264,8 +265,6 @@ private: Ice::EndpointSelectionType _endpointSelection; std::string _connectionId; - bool _overrideCompress; - bool _compress; // Only used if _overrideCompress == true bool _overrideTimeout; int _timeout; // Only used if _overrideTimeout == true bool _threadPerConnection; |