summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/CPlusPlusUtil.cpp
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2016-07-18 20:55:31 +0000
committerBernard Normier <bernard@zeroc.com>2016-07-18 20:56:23 +0000
commita05470bdfc2c43e49eae41bbf045cd8856d9433d (patch)
tree4dc1d42cd865dfa3663a7083d08e1ad5df9b5e60 /cpp/src/Slice/CPlusPlusUtil.cpp
parentCustomizable PHP config (diff)
downloadice-a05470bdfc2c43e49eae41bbf045cd8856d9433d.tar.bz2
ice-a05470bdfc2c43e49eae41bbf045cd8856d9433d.tar.xz
ice-a05470bdfc2c43e49eae41bbf045cd8856d9433d.zip
New C++11 optional mapping
Diffstat (limited to 'cpp/src/Slice/CPlusPlusUtil.cpp')
-rw-r--r--cpp/src/Slice/CPlusPlusUtil.cpp36
1 files changed, 28 insertions, 8 deletions
diff --git a/cpp/src/Slice/CPlusPlusUtil.cpp b/cpp/src/Slice/CPlusPlusUtil.cpp
index 57fdf1bf2ff..dd282d5b68e 100644
--- a/cpp/src/Slice/CPlusPlusUtil.cpp
+++ b/cpp/src/Slice/CPlusPlusUtil.cpp
@@ -49,6 +49,26 @@ string toTemplateArg(const string& arg)
}
string
+toOptional(const string& s, int typeCtx)
+{
+ bool cpp11 = (typeCtx & TypeContextCpp11) != 0;
+ string result = cpp11 ? "Ice::optional" : "IceUtil::Optional";
+ result += '<';
+ if(cpp11)
+ {
+ result += s;
+ }
+ else
+ {
+ result += toTemplateArg(s);
+ }
+
+ result += '>';
+ return result;
+}
+
+
+string
stringTypeToString(const TypePtr& type, const StringList& metaData, int typeCtx)
{
string strType = findMetaData(metaData, typeCtx);
@@ -98,7 +118,7 @@ sequenceTypeToString(const SequencePtr& seq, const StringList& metaData, int typ
return "::std::vector<" + s + '>';
}
}
- string s = typeToString(seq->type(), seq->typeMetaData(), inWstringModule(seq) ? TypeContextUseWstring : 0);
+ string s = typeToString(seq->type(), seq->typeMetaData(), typeCtx | (inWstringModule(seq) ? TypeContextUseWstring : 0));
return "::std::pair<const " + s + "*, const " + s + "*>";
}
else if(seqType.find("%range") == 0)
@@ -154,7 +174,7 @@ writeParamAllocateCode(Output& out, const TypePtr& type, bool optional, const st
string s = typeToString(type, metaData, typeCtx);
if(optional)
{
- s = "IceUtil::Optional<" + toTemplateArg(s) + '>';
+ s = toOptional(s, typeCtx);
}
out << nl << s << ' ' << fixedName << ';';
@@ -195,7 +215,7 @@ writeParamAllocateCode(Output& out, const TypePtr& type, bool optional, const st
{
if(optional)
{
- s = "IceUtil::Optional<" + toTemplateArg(s) + '>';
+ s = toOptional(s, typeCtx);
}
out << nl << s << " ___" << fixedName << ";";
}
@@ -746,7 +766,7 @@ Slice::typeToString(const TypePtr& type, bool optional, const StringList& metaDa
{
if(optional)
{
- return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) + ">";
+ return toOptional(typeToString(type, metaData, typeCtx), typeCtx);
}
else
{
@@ -764,7 +784,7 @@ Slice::returnTypeToString(const TypePtr& type, bool optional, const StringList&
if(optional)
{
- return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) + ">";
+ return toOptional(typeToString(type, metaData, typeCtx), typeCtx);
}
return typeToString(type, metaData, typeCtx);
@@ -811,7 +831,7 @@ Slice::inputTypeToString(const TypePtr& type, bool optional, const StringList& m
if(optional)
{
- return "const IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) +">&";
+ return "const " + toOptional(typeToString(type, metaData, typeCtx), typeCtx) + '&';
}
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
@@ -819,7 +839,7 @@ Slice::inputTypeToString(const TypePtr& type, bool optional, const StringList& m
{
if(builtin->kind() == Builtin::KindString)
{
- return string("const ") + stringTypeToString(type, metaData, typeCtx) + "&";
+ return string("const ") + stringTypeToString(type, metaData, typeCtx) + '&';
}
else
{
@@ -972,7 +992,7 @@ Slice::outputTypeToString(const TypePtr& type, bool optional, const StringList&
if(optional)
{
- return "IceUtil::Optional<" + toTemplateArg(typeToString(type, metaData, typeCtx)) +">&";
+ return toOptional(typeToString(type, metaData, typeCtx), typeCtx) + '&';
}
BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);