summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/SlicedData.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/SlicedData.cpp')
-rw-r--r--cpp/src/Ice/SlicedData.cpp64
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);
+}