summaryrefslogtreecommitdiff
path: root/cpp/src/slice2cpp/Gen.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2004-07-02 01:14:00 +0000
committerMark Spruiell <mes@zeroc.com>2004-07-02 01:14:00 +0000
commitc11d0fed2d828d3a23c895328843bda33a4fa71c (patch)
tree68a9538afa133c126852af348621b05eaa4d7257 /cpp/src/slice2cpp/Gen.cpp
parentwinsock2.h is now included (diff)
downloadice-c11d0fed2d828d3a23c895328843bda33a4fa71c.tar.bz2
ice-c11d0fed2d828d3a23c895328843bda33a4fa71c.tar.xz
ice-c11d0fed2d828d3a23c895328843bda33a4fa71c.zip
Slice checksum changes
Diffstat (limited to 'cpp/src/slice2cpp/Gen.cpp')
-rw-r--r--cpp/src/slice2cpp/Gen.cpp38
1 files changed, 35 insertions, 3 deletions
diff --git a/cpp/src/slice2cpp/Gen.cpp b/cpp/src/slice2cpp/Gen.cpp
index 2cb5bfa7352..e12c24edde6 100644
--- a/cpp/src/slice2cpp/Gen.cpp
+++ b/cpp/src/slice2cpp/Gen.cpp
@@ -11,6 +11,7 @@
#include <Slice/CPlusPlusUtil.h>
#include <IceUtil/Functional.h>
#include <IceUtil/Iterator.h>
+#include <Slice/Checksum.h>
#include <limits>
#include <sys/stat.h>
@@ -21,14 +22,15 @@ using namespace IceUtil;
Slice::Gen::Gen(const string& name, const string& base, const string& headerExtension,
const string& sourceExtension, const string& include, const vector<string>& includePaths,
- const string& dllExport, const string& dir, bool imp) :
+ const string& dllExport, const string& dir, bool imp, bool checksum) :
_base(base),
_headerExtension(headerExtension),
_sourceExtension(sourceExtension),
_include(include),
_includePaths(includePaths),
_dllExport(dllExport),
- _impl(imp)
+ _impl(imp),
+ _checksum(checksum)
{
for(vector<string>::iterator p = _includePaths.begin(); p != _includePaths.end(); ++p)
{
@@ -215,6 +217,11 @@ Slice::Gen::generate(const UnitPtr& p)
H << "\n#include <Ice/FactoryTable.h>";
}
+ if(_checksum)
+ {
+ C << "\n#include <Ice/SliceChecksum.h>";
+ }
+
StringList includes = p->includeFiles();
for(StringList::const_iterator q = includes.begin(); q != includes.end(); ++q)
@@ -286,6 +293,31 @@ Slice::Gen::generate(const UnitPtr& p)
ImplVisitor implVisitor(implH, implC, _dllExport);
p->visit(&implVisitor);
}
+
+ if(_checksum)
+ {
+ ChecksumMap map = createChecksums(p);
+ if(!map.empty())
+ {
+ C << sp << nl << "static const char* __sliceChecksums[] =";
+ C << sb;
+ for(ChecksumMap::const_iterator p = map.begin(); p != map.end(); ++p)
+ {
+ C << nl << "\"" << p->first << "\", \"";
+ ostringstream str;
+ str.flags(ios_base::hex);
+ str.fill('0');
+ for(vector<unsigned char>::const_iterator q = p->second.begin(); q != p->second.end(); ++q)
+ {
+ str << (int)(*q);
+ }
+ C << str.str() << "\",";
+ }
+ C << nl << "0";
+ C << eb << ';';
+ C << nl << "static IceInternal::SliceChecksumInit __sliceChecksumInit(__sliceChecksums);";
+ }
+ }
}
Slice::Gen::TypesVisitor::TypesVisitor(Output& h, Output& c, const string& dllExport) :
@@ -1851,7 +1883,7 @@ Slice::Gen::ObjectVisitor::visitClassDefStart(const ClassDefPtr& p)
H << nl << "public:";
H.inc();
- if(!p->isAbstract())
+ if(!p->isAbstract() && !p->isLocal())
{
H << sp << nl << "void __copyMembers(" << scoped << "Ptr) const;";