summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Slice/CPlusPlusUtil.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/cpp/src/Slice/CPlusPlusUtil.cpp b/cpp/src/Slice/CPlusPlusUtil.cpp
index 841e26d48ad..a3ec06913c4 100644
--- a/cpp/src/Slice/CPlusPlusUtil.cpp
+++ b/cpp/src/Slice/CPlusPlusUtil.cpp
@@ -730,9 +730,19 @@ Slice::writeMarshalUnmarshalCode(Output& out, const TypePtr& type, const string&
<< typeToString(innerProxy) << ">(" << stream << ", " << fixedParam << ", "
<< innerScope << "__write);";
return;
+ }
+ ClassDeclPtr innerClass = ClassDeclPtr::dynamicCast(seq->type());
+ if(innerClass)
+ {
+ string innerScope = fixKwd(innerClass->scope());
+ out << nl << "::IceInternal::writeSequence7<" << typeStr << ", "
+ << typeToString(innerClass) << ">(" << stream << ", " << fixedParam << ", "
+ << innerScope << "__write);";
+ return;
}
+
out << nl << "::IceInternal::writeSequence2<" << typeStr << ">(" << stream
<< ", " << fixedParam << ");";
}
@@ -926,6 +936,16 @@ Slice::writeMarshalUnmarshalCode(Output& out, const TypePtr& type, const string&
return;
}
+ ClassDeclPtr innerClass = ClassDeclPtr::dynamicCast(seq->type());
+ if(innerClass)
+ {
+ string innerScope = fixKwd(innerClass->scope());
+ out << nl << "::IceInternal::readSequence6<" << typeStr << ">(" << stream << ", "
+ << fixedParam << ", " << innerClass->minWireSize() << ", "
+ << innerScope << "__patch__" << innerClass->name() << "Ptr);";
+ return;
+ }
+
TypePtr elemType = seq->type();
out << nl << "::IceInternal::readSequence2<" << typeStr << ">(" << stream << ", "
<< fixedParam << ", " << elemType->minWireSize() << ", "