diff options
author | Marc Laukien <marc@zeroc.com> | 2001-12-05 02:20:32 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2001-12-05 02:20:32 +0000 |
commit | 6e3519f511ce934de6c837f68c9314e80d67524a (patch) | |
tree | e9df0d180a79880066019d04a1d1b4e03263c701 /cpp/src/slice2cpp/Gen.cpp | |
parent | Fix README file. (diff) | |
download | ice-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.cpp | 25 |
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 |