diff options
author | Mark Spruiell <mes@zeroc.com> | 2004-07-02 01:14:00 +0000 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2004-07-02 01:14:00 +0000 |
commit | c11d0fed2d828d3a23c895328843bda33a4fa71c (patch) | |
tree | 68a9538afa133c126852af348621b05eaa4d7257 /cpp/src/slice2cpp | |
parent | winsock2.h is now included (diff) | |
download | ice-c11d0fed2d828d3a23c895328843bda33a4fa71c.tar.bz2 ice-c11d0fed2d828d3a23c895328843bda33a4fa71c.tar.xz ice-c11d0fed2d828d3a23c895328843bda33a4fa71c.zip |
Slice checksum changes
Diffstat (limited to 'cpp/src/slice2cpp')
-rw-r--r-- | cpp/src/slice2cpp/.depend | 2 | ||||
-rw-r--r-- | cpp/src/slice2cpp/Gen.cpp | 38 | ||||
-rw-r--r-- | cpp/src/slice2cpp/Gen.h | 2 | ||||
-rw-r--r-- | cpp/src/slice2cpp/Main.cpp | 13 |
4 files changed, 50 insertions, 5 deletions
diff --git a/cpp/src/slice2cpp/.depend b/cpp/src/slice2cpp/.depend index 31f8f9f1846..f6f33296ae8 100644 --- a/cpp/src/slice2cpp/.depend +++ b/cpp/src/slice2cpp/.depend @@ -1,2 +1,2 @@ -Gen.o: Gen.cpp Gen.h ../../include/Slice/Parser.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/OutputUtil.h ../../include/Slice/CPlusPlusUtil.h ../../include/IceUtil/Functional.h ../../include/IceUtil/Iterator.h +Gen.o: Gen.cpp Gen.h ../../include/Slice/Parser.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Config.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/OutputUtil.h ../../include/Slice/CPlusPlusUtil.h ../../include/IceUtil/Functional.h ../../include/IceUtil/Iterator.h ../../include/Slice/Checksum.h Main.o: Main.cpp ../../include/Slice/Preprocessor.h ../../include/IceUtil/Config.h Gen.h ../../include/Slice/Parser.h ../../include/IceUtil/Shared.h ../../include/IceUtil/Handle.h ../../include/IceUtil/Exception.h ../../include/IceUtil/InputUtil.h ../../include/IceUtil/OutputUtil.h 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;"; diff --git a/cpp/src/slice2cpp/Gen.h b/cpp/src/slice2cpp/Gen.h index 9787eb51610..16480c9b5e7 100644 --- a/cpp/src/slice2cpp/Gen.h +++ b/cpp/src/slice2cpp/Gen.h @@ -28,6 +28,7 @@ public: const std::vector<std::string>&, const std::string&, const std::string&, + bool, bool); ~Gen(); @@ -50,6 +51,7 @@ private: std::vector<std::string> _includePaths; std::string _dllExport; bool _impl; + bool _checksum; class TypesVisitor : public ::IceUtil::noncopyable, public ParserVisitor { diff --git a/cpp/src/slice2cpp/Main.cpp b/cpp/src/slice2cpp/Main.cpp index df62a318de1..1b554a842e5 100644 --- a/cpp/src/slice2cpp/Main.cpp +++ b/cpp/src/slice2cpp/Main.cpp @@ -34,6 +34,7 @@ usage(const char* n) "--depend Generate Makefile dependencies.\n" "-d, --debug Print debug messages.\n" "--ice Permit `Ice' prefix (for building Ice source code only)\n" + "--checksum Generate checksums for Slice definitions.\n" ; // Note: --case-sensitive is intentionally not shown here! } @@ -53,6 +54,7 @@ main(int argc, char* argv[]) bool ice = false; bool caseSensitive = false; bool depend = false; + bool checksum = false; int idx = 1; while(idx < argc) @@ -220,6 +222,15 @@ main(int argc, char* argv[]) } --argc; } + else if(strcmp(argv[idx], "--checksum") == 0) + { + checksum = true; + for(int i = idx ; i + 1 < argc ; ++i) + { + argv[i] = argv[i + 1]; + } + --argc; + } else if(argv[idx][0] == '-') { cerr << argv[0] << ": unknown option `" << argv[idx] << "'" << endl; @@ -274,7 +285,7 @@ main(int argc, char* argv[]) else { Gen gen(argv[0], icecpp.getBaseName(), headerExtension, sourceExtension, include, - includePaths, dllExport, output, impl); + includePaths, dllExport, output, impl, checksum); if(!gen) { u->destroy(); |