summaryrefslogtreecommitdiff
path: root/cpp/src/slice2java/Gen.cpp
diff options
context:
space:
mode:
authorDwayne Boone <dwayne@zeroc.com>2005-09-01 18:23:20 +0000
committerDwayne Boone <dwayne@zeroc.com>2005-09-01 18:23:20 +0000
commitfc8ab4607ec714da3ea9abe2ad499a2aed8eed7b (patch)
treebe6de088c10f52a33c035ef77ef01372ca212b64 /cpp/src/slice2java/Gen.cpp
parentminor bug fix (diff)
downloadice-fc8ab4607ec714da3ea9abe2ad499a2aed8eed7b.tar.bz2
ice-fc8ab4607ec714da3ea9abe2ad499a2aed8eed7b.tar.xz
ice-fc8ab4607ec714da3ea9abe2ad499a2aed8eed7b.zip
Fix for bug 386.
Diffstat (limited to 'cpp/src/slice2java/Gen.cpp')
-rw-r--r--cpp/src/slice2java/Gen.cpp513
1 files changed, 21 insertions, 492 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp
index c45c07499be..a600b451acf 100644
--- a/cpp/src/slice2java/Gen.cpp
+++ b/cpp/src/slice2java/Gen.cpp
@@ -3301,521 +3301,50 @@ Slice::Gen::HelperVisitor::visitDictionary(const DictionaryPtr& p)
TypePtr key = p->keyType();
TypePtr value = p->valueType();
+ string name = p->name();
string absolute = getAbsolute(p);
string helper = getAbsolute(p, "", "", "Helper");
+ string package = getPackage(p);
+ StringList metaData = p->getMetaData();
+ string mapType = findMetaData(metaData);
if(open(helper))
{
Output& out = output();
- string name = p->name();
- string package = getPackage(p);
- string keyS = typeToString(key, TypeModeIn, package);
- string valueS = typeToString(value, TypeModeIn, package);
- StringList metaData = p->getMetaData();
- string dictType = findMetaData(metaData);
- int iter;
- int i;
+ int iter;
out << sp << nl << "public final class " << name << "Helper";
out << sb;
- out << nl << "public static void" << nl << "write(IceInternal.BasicStream __os, " << "java.util.Map __v)";
- out << sb;
- out << nl << "if(__v == null)";
- out << sb;
- out << nl << "__os.writeSize(0);";
- out << eb;
- out << nl << "else";
+ out << nl << "public static void" << nl << "write(IceInternal.BasicStream __os, java.util.Map __v)";
out << sb;
- out << nl << "__os.writeSize(__v.size());";
- out << nl << "java.util.Iterator __i = __v.entrySet().iterator();";
- out << nl << "while(__i.hasNext())";
- out << sb;
- out << nl << "java.util.Map.Entry __e = (java.util.Map.Entry)" << "__i.next();";
- iter = 0;
- for(i = 0; i < 2; i++)
- {
- string val;
- string arg;
- TypePtr type;
- if(i == 0)
- {
- arg = "__e.getKey()";
- type = key;
- }
- else
- {
- arg = "__e.getValue()";
- type = value;
- }
-
- BuiltinPtr b = BuiltinPtr::dynamicCast(type);
- if(b)
- {
- switch(b->kind())
- {
- case Builtin::KindByte:
- {
- val = "((java.lang.Byte)" + arg + ").byteValue()";
- break;
- }
- case Builtin::KindBool:
- {
- val = "((java.lang.Boolean)" + arg + ").booleanValue()";
- break;
- }
- case Builtin::KindShort:
- {
- val = "((java.lang.Short)" + arg + ").shortValue()";
- break;
- }
- case Builtin::KindInt:
- {
- val = "((java.lang.Integer)" + arg + ").intValue()";
- break;
- }
- case Builtin::KindLong:
- {
- val = "((java.lang.Long)" + arg + ").longValue()";
- break;
- }
- case Builtin::KindFloat:
- {
- val = "((java.lang.Float)" + arg + ").floatValue()";
- break;
- }
- case Builtin::KindDouble:
- {
- val = "((java.lang.Double)" + arg + ").doubleValue()";
- break;
- }
- case Builtin::KindString:
- case Builtin::KindObject:
- case Builtin::KindObjectProxy:
- {
- break;
- }
- case Builtin::KindLocalObject:
- {
- assert(false);
- break;
- }
- }
- }
-
- if(val.empty())
- {
- val = "((" + typeToString(type, TypeModeIn, package) + ')' + arg + ')';
- }
- writeMarshalUnmarshalCode(out, package, type, val, true, iter, false);
- }
- out << eb;
- out << eb;
- out << eb;
-
- BuiltinPtr builtin = BuiltinPtr::dynamicCast(value);
- if((builtin && builtin->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(value))
- {
- //
- // The dictionary uses class values.
- //
- out << sp << nl << "private static class Patcher implements IceInternal.Patcher";
- if(_stream)
- {
- out << ", Ice.ReadObjectCallback";
- }
- out << sb;
- string keyTypeS = keyS;
- BuiltinPtr b = BuiltinPtr::dynamicCast(key);
- if(b)
- {
- switch(b->kind())
- {
- case Builtin::KindByte:
- {
- keyTypeS = "java.lang.Byte";
- break;
- }
- case Builtin::KindBool:
- {
- keyTypeS = "java.lang.Boolean";
- break;
- }
- case Builtin::KindShort:
- {
- keyTypeS = "java.lang.Short";
- break;
- }
- case Builtin::KindInt:
- {
- keyTypeS = "java.lang.Integer";
- break;
- }
- case Builtin::KindLong:
- {
- keyTypeS = "java.lang.Long";
- break;
- }
- case Builtin::KindFloat:
- {
- keyTypeS = "java.lang.Float";
- break;
- }
- case Builtin::KindDouble:
- {
- keyTypeS = "java.lang.Double";
- break;
- }
- default:
- {
- break; // Do nothing
- }
- }
- }
- out << sp << nl << "Patcher(java.util.Map m, " << keyTypeS << " key)";
- out << sb;
- out << nl << "__m = m;";
- out << nl << "__key = key;";
- out << eb;
-
- out << sp << nl << "public void" << nl << "patch(Ice.Object v)";
- out << sb;
- out << nl << valueS << " _v = (" << valueS << ")v;";
- out << nl << "__m.put(__key, v);";
- out << eb;
-
- out << sp << nl << "public String" << nl << "type()";
- out << sb;
- out << nl << "return \"" << value->typeId() << "\";";
- out << eb;
-
- if(_stream)
- {
- out << sp << nl << "public void" << nl << "invoke(Ice.Object v)";
- out << sb;
- out << nl << "patch(v);";
- out << eb;
- }
-
- out << sp << nl << "private java.util.Map __m;";
- out << nl << "private " << keyTypeS << " __key;";
- out << eb;
- }
+ iter = 0;
+ writeDictionaryMarshalUnmarshalCode(out, package, p, "__v", true, iter, false);
+ out << eb;
- out << sp << nl << "public static " << (dictType.empty() ? "java.util.Map" : dictType);
- out << nl << "read(IceInternal.BasicStream __is)";
- out << sb;
- out << nl << "int __sz = __is.readSize();";
- out << nl << (dictType.empty() ? "java.util.Map" : dictType) << " __r = new "
- << (dictType.empty() ? "java.util.HashMap(__sz)" : dictType + "()") << ';';
- out << nl << "for(int __i = 0; __i < __sz; __i++)";
+ out << sp << nl << "public static " << (mapType.empty() ? "java.util.Map" : mapType);
+ out << nl << "read(IceInternal.BasicStream __is)";
out << sb;
+ out << nl << (mapType.empty() ? "java.util.Map" : mapType) << " __v;";
iter = 0;
- for(i = 0; i < 2; i++)
- {
- string arg;
- TypePtr type;
- if(i == 0)
- {
- arg = "__key";
- type = key;
- }
- else
- {
- arg = "__value";
- type = value;
- }
-
- BuiltinPtr b = BuiltinPtr::dynamicCast(type);
- if(b)
- {
- switch(b->kind())
- {
- case Builtin::KindByte:
- {
- out << nl << "java.lang.Byte " << arg << " = new java.lang.Byte(__is.readByte());";
- break;
- }
- case Builtin::KindBool:
- {
- out << nl << "java.lang.Boolean " << arg << " = new java.lang.Boolean(__is.readBool());";
- break;
- }
- case Builtin::KindShort:
- {
- out << nl << "java.lang.Short " << arg << " = new java.lang.Short(__is.readShort());";
- break;
- }
- case Builtin::KindInt:
- {
- out << nl << "java.lang.Integer " << arg << " = new java.lang.Integer(__is.readInt());";
- break;
- }
- case Builtin::KindLong:
- {
- out << nl << "java.lang.Long " << arg << " = new java.lang.Long(__is.readLong());";
- break;
- }
- case Builtin::KindFloat:
- {
- out << nl << "java.lang.Float " << arg << " = new java.lang.Float(__is.readFloat());";
- break;
- }
- case Builtin::KindDouble:
- {
- out << nl << "java.lang.Double " << arg << " = new java.lang.Double(__is.readDouble());";
- break;
- }
- case Builtin::KindString:
- {
- out << nl << "java.lang.String " << arg << " = __is.readString();";
- break;
- }
- case Builtin::KindObject:
- {
- out << nl << "__is.readObject(new Patcher(__r, __key));";
- break;
- }
- case Builtin::KindObjectProxy:
- {
- out << nl << "Ice.ObjectPrx " << arg << " = __is.readProxy();";
- break;
- }
- case Builtin::KindLocalObject:
- {
- assert(false);
- break;
- }
- }
- }
- else
- {
- string s = typeToString(type, TypeModeIn, package);
- BuiltinPtr builtin2 = BuiltinPtr::dynamicCast(type);
- if((builtin2 && builtin2->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(type))
- {
- writeMarshalUnmarshalCode(out, package, type, arg, false, iter, false, StringList(),
- "new Patcher(__r, __key)");
- }
- else
- {
- out << nl << s << ' ' << arg << ';';
- writeMarshalUnmarshalCode(out, package, type, arg, false, iter, false);
- }
- }
- }
- if(!(builtin && builtin->kind() == Builtin::KindObject) && !ClassDeclPtr::dynamicCast(value))
- {
- out << nl << "__r.put(__key, __value);";
- }
- out << eb;
- out << nl << "return __r;";
+ writeDictionaryMarshalUnmarshalCode(out, package, p, "__v", false, iter, false);
+ out << nl << "return __v;";
out << eb;
if(_stream)
{
- out << sp << nl << "public static void" << nl << "write(Ice.OutputStream __outS, " << "java.util.Map __v)";
- out << sb;
- out << nl << "if(__v == null)";
- out << sb;
- out << nl << "__outS.writeSize(0);";
- out << eb;
- out << nl << "else";
+ out << sp << nl << "public static void" << nl << "write(Ice.OutputStream __outS, java.util.Map __v)";
out << sb;
- out << nl << "__outS.writeSize(__v.size());";
- out << nl << "java.util.Iterator __i = __v.entrySet().iterator();";
- out << nl << "while(__i.hasNext())";
- out << sb;
- out << nl << "java.util.Map.Entry __e = (java.util.Map.Entry)" << "__i.next();";
- iter = 0;
- for(i = 0; i < 2; i++)
- {
- string val;
- string arg;
- TypePtr type;
- if(i == 0)
- {
- arg = "__e.getKey()";
- type = key;
- }
- else
- {
- arg = "__e.getValue()";
- type = value;
- }
-
- BuiltinPtr b = BuiltinPtr::dynamicCast(type);
- if(b)
- {
- switch(b->kind())
- {
- case Builtin::KindByte:
- {
- val = "((java.lang.Byte)" + arg + ").byteValue()";
- break;
- }
- case Builtin::KindBool:
- {
- val = "((java.lang.Boolean)" + arg + ").booleanValue()";
- break;
- }
- case Builtin::KindShort:
- {
- val = "((java.lang.Short)" + arg + ").shortValue()";
- break;
- }
- case Builtin::KindInt:
- {
- val = "((java.lang.Integer)" + arg + ").intValue()";
- break;
- }
- case Builtin::KindLong:
- {
- val = "((java.lang.Long)" + arg + ").longValue()";
- break;
- }
- case Builtin::KindFloat:
- {
- val = "((java.lang.Float)" + arg + ").floatValue()";
- break;
- }
- case Builtin::KindDouble:
- {
- val = "((java.lang.Double)" + arg + ").doubleValue()";
- break;
- }
- case Builtin::KindString:
- case Builtin::KindObject:
- case Builtin::KindObjectProxy:
- {
- break;
- }
- case Builtin::KindLocalObject:
- {
- assert(false);
- break;
- }
- }
- }
-
- if(val.empty())
- {
- val = "((" + typeToString(type, TypeModeIn, package) + ')' + arg + ')';
- }
- writeStreamMarshalUnmarshalCode(out, package, type, val, true, iter, false);
- }
- out << eb;
- out << eb;
+ iter = 0;
+ writeStreamDictionaryMarshalUnmarshalCode(out, package, p, "__v", true, iter, false);
out << eb;
- out << sp << nl << "public static " << (dictType.empty() ? "java.util.Map" : dictType)
+ out << sp << nl << "public static " << (mapType.empty() ? "java.util.Map" : mapType)
<< nl << "read(Ice.InputStream __inS)";
out << sb;
- out << nl << "int __sz = __inS.readSize();";
- out << nl << (dictType.empty() ? "java.util.Map" : dictType) << " __r = new "
- << (dictType.empty() ? "java.util.HashMap(__sz)" : dictType + "()") << ';';
- out << nl << "for(int __i = 0; __i < __sz; __i++)";
- out << sb;
- iter = 0;
- for(i = 0; i < 2; i++)
- {
- string arg;
- TypePtr type;
- if(i == 0)
- {
- arg = "__key";
- type = key;
- }
- else
- {
- arg = "__value";
- type = value;
- }
-
- BuiltinPtr b = BuiltinPtr::dynamicCast(type);
- if(b)
- {
- switch(b->kind())
- {
- case Builtin::KindByte:
- {
- out << nl << "java.lang.Byte " << arg << " = new java.lang.Byte(__inS.readByte());";
- break;
- }
- case Builtin::KindBool:
- {
- out << nl << "java.lang.Boolean " << arg << " = new java.lang.Boolean(__inS.readBool());";
- break;
- }
- case Builtin::KindShort:
- {
- out << nl << "java.lang.Short " << arg << " = new java.lang.Short(__inS.readShort());";
- break;
- }
- case Builtin::KindInt:
- {
- out << nl << "java.lang.Integer " << arg << " = new java.lang.Integer(__inS.readInt());";
- break;
- }
- case Builtin::KindLong:
- {
- out << nl << "java.lang.Long " << arg << " = new java.lang.Long(__inS.readLong());";
- break;
- }
- case Builtin::KindFloat:
- {
- out << nl << "java.lang.Float " << arg << " = new java.lang.Float(__inS.readFloat());";
- break;
- }
- case Builtin::KindDouble:
- {
- out << nl << "java.lang.Double " << arg << " = new java.lang.Double(__inS.readDouble());";
- break;
- }
- case Builtin::KindString:
- {
- out << nl << "java.lang.String " << arg << " = __inS.readString();";
- break;
- }
- case Builtin::KindObject:
- {
- out << nl << "__inS.readObject(new Patcher(__r, __key));";
- break;
- }
- case Builtin::KindObjectProxy:
- {
- out << nl << "Ice.ObjectPrx " << arg << " = __inS.readProxy();";
- break;
- }
- case Builtin::KindLocalObject:
- {
- assert(false);
- break;
- }
- }
- }
- else
- {
- string s = typeToString(type, TypeModeIn, package);
- BuiltinPtr builtin2 = BuiltinPtr::dynamicCast(type);
- if((builtin2 && builtin2->kind() == Builtin::KindObject) || ClassDeclPtr::dynamicCast(type))
- {
- writeStreamMarshalUnmarshalCode(out, package, type, arg, false, iter, false, StringList(),
- "new Patcher(__r, __key)");
- }
- else
- {
- out << nl << s << ' ' << arg << ';';
- writeStreamMarshalUnmarshalCode(out, package, type, arg, false, iter, false);
- }
- }
- }
- if(!(builtin && builtin->kind() == Builtin::KindObject) && !ClassDeclPtr::dynamicCast(value))
- {
- out << nl << "__r.put(__key, __value);";
- }
- out << eb;
- out << nl << "return __r;";
+ out << nl << (mapType.empty() ? "java.util.Map" : mapType) << " __v;";
+ writeStreamDictionaryMarshalUnmarshalCode(out, package, p, "__v", false, iter, false);
+ out << nl << "return __v;";
out << eb;
}