From c11d0fed2d828d3a23c895328843bda33a4fa71c Mon Sep 17 00:00:00 2001 From: Mark Spruiell Date: Fri, 2 Jul 2004 01:14:00 +0000 Subject: Slice checksum changes --- cpp/src/slice2cpp/Gen.cpp | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) (limited to 'cpp/src/slice2cpp/Gen.cpp') 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 #include #include +#include #include #include @@ -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& 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::iterator p = _includePaths.begin(); p != _includePaths.end(); ++p) { @@ -215,6 +217,11 @@ Slice::Gen::generate(const UnitPtr& p) H << "\n#include "; } + if(_checksum) + { + C << "\n#include "; + } + 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::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;"; -- cgit v1.2.3