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/slice2java/Gen.cpp | |
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/slice2java/Gen.cpp')
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp index bb935500cb7..e5913aa6217 100644 --- a/cpp/src/slice2java/Gen.cpp +++ b/cpp/src/slice2java/Gen.cpp @@ -8,6 +8,7 @@ // ********************************************************************** #include <Gen.h> +#include <Slice/Checksum.h> #include <IceUtil/Functional.h> #include <IceUtil/Algorithm.h> #include <IceUtil/Iterator.h> @@ -852,6 +853,65 @@ Slice::Gen::generateImplTie(const UnitPtr& p) p->visit(&implTieVisitor); } +void +Slice::Gen::writeChecksumClass(const string& checksumClass, const string& dir, const ChecksumMap& map) +{ + // + // Attempt to open the source file for the checksum class. + // + JavaOutput out; + if(!out.openClass(checksumClass, dir)) + { + cerr << "can't open class `" << checksumClass << "' for writing: " << strerror(errno) << endl; + return; + } + + // + // Get the class name. + // + string className; + string::size_type pos = checksumClass.rfind('.'); + if(pos == string::npos) + { + className = checksumClass; + } + else + { + className = checksumClass.substr(pos + 1); + } + + // + // Emit the class. + // + out << sp << nl << "public class " << className; + out << sb; + + // + // Use a static initializer to populate the checksum map. + // + out << sp << nl << "public static java.util.Map checksums;"; + out << sp << nl << "static"; + out << sb; + out << nl << "java.util.Map map = new java.util.HashMap();"; + for(ChecksumMap::const_iterator p = map.begin(); p != map.end(); ++p) + { + out << nl << "map.put(\"" << 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); + } + out << str.str() << "\");"; + } + out << nl << "checksums = java.util.Collections.unmodifiableMap(map);"; + + out << eb; + out << eb; + out << nl; +} + Slice::Gen::OpsVisitor::OpsVisitor(const string& dir) : JavaVisitor(dir) { |