diff options
author | Bernard Normier <bernard@zeroc.com> | 2016-07-18 20:55:31 +0000 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2016-07-18 20:56:23 +0000 |
commit | a05470bdfc2c43e49eae41bbf045cd8856d9433d (patch) | |
tree | 4dc1d42cd865dfa3663a7083d08e1ad5df9b5e60 /cpp/src/Slice/CPlusPlusUtil.cpp | |
parent | Customizable PHP config (diff) | |
download | ice-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.cpp | 36 |
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); |