diff options
author | Benoit Foucher <benoit@zeroc.com> | 2012-06-12 16:50:58 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2012-06-12 16:50:58 +0200 |
commit | b2c3f4fe51800183e78db500b1e91d0135689caf (patch) | |
tree | f515d08d95609db34b4a6b2c898a488e5fe6be4d /cpp/src/Ice/SlicedData.cpp | |
parent | demo fixes (diff) | |
download | ice-b2c3f4fe51800183e78db500b1e91d0135689caf.tar.bz2 ice-b2c3f4fe51800183e78db500b1e91d0135689caf.tar.xz ice-b2c3f4fe51800183e78db500b1e91d0135689caf.zip |
Fixed support unknown types in unknown optionals
Diffstat (limited to 'cpp/src/Ice/SlicedData.cpp')
-rw-r--r-- | cpp/src/Ice/SlicedData.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/cpp/src/Ice/SlicedData.cpp b/cpp/src/Ice/SlicedData.cpp index 72409a2d79c..568c55a7585 100644 --- a/cpp/src/Ice/SlicedData.cpp +++ b/cpp/src/Ice/SlicedData.cpp @@ -9,6 +9,7 @@ #include <Ice/SlicedData.h> #include <Ice/Object.h> +#include <Ice/BasicStream.h> using namespace std; using namespace Ice; @@ -69,3 +70,66 @@ Ice::SlicedData::__addObject(IceInternal::GCCountMap& m) ++pos->second; } } + +Ice::UnknownSlicedObject::UnknownSlicedObject(const string& unknownTypeId) : _unknownTypeId(unknownTypeId) +{ +} + +const string& +Ice::UnknownSlicedObject::getUnknownTypeId() const +{ + return _unknownTypeId; +} + +void +Ice::UnknownSlicedObject::__addObject(IceInternal::GCCountMap& _c) +{ + IceInternal::GCCountMap::iterator pos = _c.find(this); + if(pos == _c.end()) + { + _c[this] = 1; + } + else + { + ++pos->second; + } +} + +bool +Ice::UnknownSlicedObject::__usesGC() +{ + return true; +} + +void +Ice::UnknownSlicedObject::__gcReachable(IceInternal::GCCountMap& _c) const +{ + if(_slicedData) + { + _slicedData->__addObject(_c); + } +} + +void +Ice::UnknownSlicedObject::__gcClear() +{ + if(_slicedData) + { + _slicedData->__decRefUnsafe(); + _slicedData.__clearHandleUnsafe(); + } +} + +void +Ice::UnknownSlicedObject::__write(IceInternal::BasicStream* __os) const +{ + __os->startWriteObject(_slicedData); + __os->endWriteObject(); +} + +void +Ice::UnknownSlicedObject::__read(IceInternal::BasicStream* __is) +{ + __is->startReadObject(); + _slicedData = __is->endReadObject(true); +} |