summaryrefslogtreecommitdiff
path: root/cpp/src/slice2cpp/Gen.cpp
diff options
context:
space:
mode:
authorMarc Laukien <marc@zeroc.com>2001-12-05 02:20:32 +0000
committerMarc Laukien <marc@zeroc.com>2001-12-05 02:20:32 +0000
commit6e3519f511ce934de6c837f68c9314e80d67524a (patch)
treee9df0d180a79880066019d04a1d1b4e03263c701 /cpp/src/slice2cpp/Gen.cpp
parentFix README file. (diff)
downloadice-6e3519f511ce934de6c837f68c9314e80d67524a.tar.bz2
ice-6e3519f511ce934de6c837f68c9314e80d67524a.tar.xz
ice-6e3519f511ce934de6c837f68c9314e80d67524a.zip
operator< for structs
Diffstat (limited to 'cpp/src/slice2cpp/Gen.cpp')
-rw-r--r--cpp/src/slice2cpp/Gen.cpp25
1 files changed, 24 insertions, 1 deletions
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp
index 5bca50ba89b..5010e1cc2f0 100644
--- a/cpp/src/slice2cpp/Gen.cpp
+++ b/cpp/src/slice2cpp/Gen.cpp
@@ -113,6 +113,8 @@ Slice::Gen::generate(const UnitPtr& unit)
{
H << "\n#include <Ice/LocalObject.h>";
C << "\n#include <Ice/BasicStream.h>";
+ C << "\n#include <Ice/Proxy.h>";
+ C << "\n#include <Ice/Object.h>";
}
StringList includes = unit->includeFiles();
@@ -378,11 +380,13 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p)
H << sp << nl << _dllExport << "void __write(::IceInternal::BasicStream*) const;"; // NOT virtual!
H << nl << _dllExport << "void __read(::IceInternal::BasicStream*);"; // NOT virtual!
+ H << nl << _dllExport << "bool operator<(const " << name << "&) const;";
H << eb << ';';
TypeStringList memberList;
DataMemberList dataMembers = p->dataMembers();
- for (DataMemberList::const_iterator q = dataMembers.begin(); q != dataMembers.end(); ++q)
+ DataMemberList::const_iterator q;
+ for (q = dataMembers.begin(); q != dataMembers.end(); ++q)
{
memberList.push_back(make_pair((*q)->type(), (*q)->name()));
}
@@ -394,6 +398,25 @@ Slice::Gen::TypesVisitor::visitStructEnd(const StructPtr& p)
C << sb;
writeUnmarshalCode(C, memberList, 0);
C << eb;
+ C << sp << nl << "bool" << nl << scoped.substr(2) << "::operator<(const " << name << "& __rhs) const";
+ C << sb;
+ C << nl << "if (this == &__rhs)";
+ C << sb;
+ C << nl << "return false;";
+ C << eb;
+ for (q = dataMembers.begin(); q != dataMembers.end(); ++q)
+ {
+ C << nl << "if (" << (*q)->name() << " < __rhs." << (*q)->name() << ')';
+ C << sb;
+ C << nl << "return true;";
+ C << eb;
+ C << nl << "else if (__rhs." << (*q)->name() << " < " << (*q)->name() << ')';
+ C << sb;
+ C << nl << "return false;";
+ C << eb;
+ }
+ C << nl << "return false;";
+ C << eb;
}
void