summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/CPlusPlusUtil.cpp
diff options
context:
space:
mode:
authorJoe George <joe@zeroc.com>2016-07-07 14:21:50 -0400
committerJoe George <joe@zeroc.com>2016-07-08 09:36:51 -0400
commite5c2e3c8a6255fbb09b294e37b717dd3452e5ffb (patch)
treed6110ee21fbea6cc67334a5b49361d4501d614b6 /cpp/src/Slice/CPlusPlusUtil.cpp
parentFixed JavaScript optionalBidir test failure (diff)
downloadice-e5c2e3c8a6255fbb09b294e37b717dd3452e5ffb.tar.bz2
ice-e5c2e3c8a6255fbb09b294e37b717dd3452e5ffb.tar.xz
ice-e5c2e3c8a6255fbb09b294e37b717dd3452e5ffb.zip
ICE-7172 - Replace generated comparsion operators
- Add ice_tuple function to structs and classes. Returns a tuple of data members - Replace generated comparsion for structs (and classes) with template comparsion operators which use ice_tuple
Diffstat (limited to 'cpp/src/Slice/CPlusPlusUtil.cpp')
-rw-r--r--cpp/src/Slice/CPlusPlusUtil.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/cpp/src/Slice/CPlusPlusUtil.cpp b/cpp/src/Slice/CPlusPlusUtil.cpp
index 88e0f96da8e..1e3134c718a 100644
--- a/cpp/src/Slice/CPlusPlusUtil.cpp
+++ b/cpp/src/Slice/CPlusPlusUtil.cpp
@@ -1453,6 +1453,32 @@ Slice::writeStreamHelpers(Output& out, bool checkClassMetaData, const ContainedP
out << eb << ";" << nl;
}
}
+void
+Slice::writeIceTuple(::IceUtilInternal::Output& out, DataMemberList dataMembers, int useWstring)
+{
+ out << sp << nl << "std::tuple<";
+ for(DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q)
+ {
+ if(q != dataMembers.begin())
+ {
+ out << ", ";
+ }
+ out << "const ";
+ out << typeToString((*q)->type(), (*q)->optional(), (*q)->getMetaData(), useWstring | TypeContextCpp11) << "&";
+ }
+ out << "> ice_tuple() const";
+ out << sb;
+ out << nl << "return std::tie(";
+ for(DataMemberList::const_iterator pi = dataMembers.begin(); pi != dataMembers.end(); ++pi)
+ {
+ if(pi != dataMembers.begin())
+ {
+ out << ", ";
+ }
+ out << fixKwd((*pi)->name());
+ }
+ out << ");" << eb;
+}
bool
Slice::findMetaData(const string& prefix, const ClassDeclPtr& cl, string& value)