summaryrefslogtreecommitdiff
path: root/cpp/src/Slice/JavaUtil.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2003-09-11 21:12:38 +0000
committerMark Spruiell <mes@zeroc.com>2003-09-11 21:12:38 +0000
commitcbd7000724b0474b622ce8c7b47819630f2ab818 (patch)
tree6b6897c8cb85ce9b6f260df4d261d1b0341fa402 /cpp/src/Slice/JavaUtil.cpp
parentanother minor fix (diff)
downloadice-cbd7000724b0474b622ce8c7b47819630f2ab818.tar.bz2
ice-cbd7000724b0474b622ce8c7b47819630f2ab818.tar.xz
ice-cbd7000724b0474b622ce8c7b47819630f2ab818.zip
- Removed dependency on Xerces.
- Removed generic stream interface Ice::Stream and ice_marshal functions. - Removed XML stream implementation and related test. - Removed XML transformer and related test. - Removed slice2xsd. - Added C++ wrapper for the expat XML parser in IceXML::Parser. - Removed XML encoding from Freeze.
Diffstat (limited to 'cpp/src/Slice/JavaUtil.cpp')
-rw-r--r--cpp/src/Slice/JavaUtil.cpp749
1 files changed, 5 insertions, 744 deletions
diff --git a/cpp/src/Slice/JavaUtil.cpp b/cpp/src/Slice/JavaUtil.cpp
index bc7b3042379..9bcb7446893 100644
--- a/cpp/src/Slice/JavaUtil.cpp
+++ b/cpp/src/Slice/JavaUtil.cpp
@@ -590,7 +590,7 @@ Slice::JavaGenerator::writeMarshalUnmarshalCode(Output& out,
}
else
{
- out << nl << stream << ".readObject(new " << patchParams << ");";
+ out << nl << stream << ".readObject(" << patchParams << ");";
}
}
}
@@ -654,7 +654,7 @@ Slice::JavaGenerator::writeMarshalUnmarshalCode(Output& out,
}
else
{
- out << nl << stream << ".readObject(new " << patchParams << ");";
+ out << nl << stream << ".readObject(" << patchParams << ");";
}
}
}
@@ -1046,8 +1046,8 @@ Slice::JavaGenerator::writeSequenceMarshalUnmarshalCode(Output& out,
//
out << nl << v << ".add(null);";
ostringstream patchParams;
- patchParams << "IceInternal.ListPatcher(" << v << ", " << origContentS << ".class, __type" << iter
- << ", __i" << iter << ')';
+ patchParams << "new IceInternal.ListPatcher(" << v << ", " << origContentS << ".class, __type"
+ << iter << ", __i" << iter << ')';
writeMarshalUnmarshalCode(out, scope, seq->type(), "__elem", false, iter, false,
list<string>(), patchParams.str());
}
@@ -1232,7 +1232,7 @@ Slice::JavaGenerator::writeSequenceMarshalUnmarshalCode(Output& out,
ostringstream patchParams;
if(isObject)
{
- patchParams << "IceInternal.SequencePatcher(" << v << ", " << origContentS
+ patchParams << "new IceInternal.SequencePatcher(" << v << ", " << origContentS
<< ".class, __type" << iter << ", __i" << iter << ')';
writeMarshalUnmarshalCode(out, scope, seq->type(), o.str(), false, iter, false,
list<string>(), patchParams.str());
@@ -1249,745 +1249,6 @@ Slice::JavaGenerator::writeSequenceMarshalUnmarshalCode(Output& out,
}
void
-Slice::JavaGenerator::writeGenericMarshalUnmarshalCode(Output& out,
- const string& scope,
- const TypePtr& type,
- const string& tn,
- const string& param,
- bool marshal,
- int& iter,
- bool holder,
- const list<string>& metaData)
-{
- string stream = marshal ? "__os" : "__is";
- string v;
- if(holder)
- {
- v = param + ".value";
- }
- else
- {
- v = param;
- }
-
- string name;
- if(tn.empty())
- {
- name = "\"" + param + "\"";
- }
- else
- {
- name = tn;
- }
-
- BuiltinPtr builtin = BuiltinPtr::dynamicCast(type);
- if(builtin)
- {
- switch(builtin->kind())
- {
- case Builtin::KindByte:
- {
- if(marshal)
- {
- out << nl << stream << ".writeByte(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readByte(" << name << ");";
- }
- break;
- }
- case Builtin::KindBool:
- {
- if(marshal)
- {
- out << nl << stream << ".writeBool(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readBool(" << name << ");";
- }
- break;
- }
- case Builtin::KindShort:
- {
- if(marshal)
- {
- out << nl << stream << ".writeShort(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readShort(" << name << ");";
- }
- break;
- }
- case Builtin::KindInt:
- {
- if(marshal)
- {
- out << nl << stream << ".writeInt(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readInt(" << name << ");";
- }
- break;
- }
- case Builtin::KindLong:
- {
- if(marshal)
- {
- out << nl << stream << ".writeLong(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readLong(" << name << ");";
- }
- break;
- }
- case Builtin::KindFloat:
- {
- if(marshal)
- {
- out << nl << stream << ".writeFloat(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readFloat(" << name << ");";
- }
- break;
- }
- case Builtin::KindDouble:
- {
- if(marshal)
- {
- out << nl << stream << ".writeDouble(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readDouble(" << name << ");";
- }
- break;
- }
- case Builtin::KindString:
- {
- if(marshal)
- {
- out << nl << stream << ".writeString(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readString(" << name << ");";
- }
- break;
- }
- case Builtin::KindObject:
- {
- if(marshal)
- {
- out << nl << stream << ".writeObject(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readObject(" << name << ", \"\", null);";
- }
- break;
- }
- case Builtin::KindObjectProxy:
- {
- if(marshal)
- {
- out << nl << stream << ".writeProxy(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readProxy(" << name << ");";
- }
- break;
- }
- case Builtin::KindLocalObject:
- {
- assert(false);
- break;
- }
- }
- return;
- }
-
- ProxyPtr prx = ProxyPtr::dynamicCast(type);
- if(prx)
- {
- string typeS = typeToString(type, TypeModeIn, scope);
- if(marshal)
- {
- out << nl << typeS << "Helper.ice_marshal(" << name << ", " << stream << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << typeS << "Helper.ice_unmarshal(" << name << ", " << stream << ");";
- }
- return;
- }
-
- ClassDeclPtr cl = ClassDeclPtr::dynamicCast(type);
- if(cl)
- {
- if(marshal)
- {
- out << nl << stream << ".writeObject(" << name << ", " << v << ");";
- }
- else
- {
- string typeS = typeToString(type, TypeModeIn, scope);
- ClassDefPtr def = cl->definition();
- if(def && !def->isAbstract())
- {
- out << nl << v << " = (" << typeS << ')' << stream << ".readObject(" << name << ", " << typeS
- << ".ice_staticId(), " << typeS << ".ice_factory());";
- }
- else
- {
- out << nl << v << " = (" << typeS << ')' << stream << ".readObject(" << name << ", \"\", null);";
- }
- }
- return;
- }
-
- StructPtr st = StructPtr::dynamicCast(type);
- if(st)
- {
- if(marshal)
- {
- out << nl << v << ".ice_marshal(" << name << ", " << stream << ");";
- }
- else
- {
- string typeS = typeToString(type, TypeModeIn, scope);
- out << nl << v << " = new " << typeS << "();";
- out << nl << v << ".ice_unmarshal(" << name << ", " << stream << ");";
- }
- return;
- }
-
- EnumPtr en = EnumPtr::dynamicCast(type);
- if(en)
- {
- if(marshal)
- {
- out << nl << v << ".ice_marshal(" << name << ", " << stream << ");";
- }
- else
- {
- string typeS = typeToString(type, TypeModeIn, scope);
- out << nl << v << " = " << typeS << ".ice_unmarshal(" << name << ", " << stream << ");";
- }
- return;
- }
-
- SequencePtr seq = SequencePtr::dynamicCast(type);
- if(seq)
- {
- writeGenericSequenceMarshalUnmarshalCode(out, scope, seq, name, v, marshal, iter, true, metaData);
- return;
- }
-
- ConstructedPtr constructed = ConstructedPtr::dynamicCast(type);
- assert(constructed);
- string typeS = getAbsolute(constructed->scoped(), scope);
- if(marshal)
- {
- out << nl << typeS << "Helper.ice_marshal(" << name << ", " << stream << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << typeS << "Helper.ice_unmarshal(" << name << ", " << stream << ");";
- }
-}
-
-void
-Slice::JavaGenerator::writeGenericSequenceMarshalUnmarshalCode(Output& out,
- const string& scope,
- const SequencePtr& seq,
- const string& name,
- const string& param,
- bool marshal,
- int& iter,
- bool useHelper,
- const list<string>& metaData)
-{
- string stream = marshal ? "__os" : "__is";
- string v = param;
-
- //
- // Check for metadata that overrides the default sequence
- // mapping. If no metadata is found, we use a regular Java
- // array. If metadata is found, the value of the metadata
- // must be the name of a class which implements the
- // java.util.List interface.
- //
- // There are two sources of metadata - that passed into
- // this function (which most likely comes from a data
- // member definition), and that associated with the type
- // itself. If data member metadata is found, and does
- // not match the type's metadata, then we cannot use
- // the type's Helper class for marshalling - we must
- // generate marshalling code inline.
- //
- string listType = findMetaData(metaData);
- list<string> typeMetaData = seq->getMetaData();
- if(listType.empty())
- {
- listType = findMetaData(typeMetaData);
- }
- else
- {
- string s = findMetaData(typeMetaData);
- if(listType != s)
- {
- useHelper = false;
- }
- }
-
- //
- // If we can use the sequence's helper, it's easy.
- //
- if(useHelper)
- {
- string typeS = getAbsolute(seq->scoped(), scope);
- if(marshal)
- {
- out << nl << typeS << "Helper.ice_marshal(" << name << ", " << stream << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << typeS << "Helper.ice_unmarshal(" << name << ", " << stream << ");";
- }
- return;
- }
-
- //
- // Determine sequence depth
- //
- int depth = 0;
- TypePtr origContent = seq->type();
- SequencePtr s = SequencePtr::dynamicCast(origContent);
- while(s)
- {
- //
- // Stop if the inner sequence type has metadata.
- //
- string m = findMetaData(s->getMetaData());
- if(!m.empty())
- {
- break;
- }
- depth++;
- origContent = s->type();
- s = SequencePtr::dynamicCast(origContent);
- }
- string origContentS = typeToString(origContent, TypeModeIn, scope);
-
- if(!listType.empty())
- {
- BuiltinPtr b = BuiltinPtr::dynamicCast(seq->type());
- if(b && b->kind() != Builtin::KindObject && b->kind() != Builtin::KindObjectProxy)
- {
- if(marshal)
- {
- out << nl << "if(" << v << " == null)";
- out << sb;
- out << nl << stream << ".startWriteSequence(" << name << ", 0);";
- out << nl << stream << ".endWriteSequence();";
- out << eb;
- out << nl << "else";
- out << sb;
- out << nl << stream << ".startWriteSequence(" << name << ", " << v << ".size());";
- ostringstream o;
- o << "__i" << iter;
- string it = o.str();
- iter++;
- out << nl << "java.util.Iterator " << it << " = " << v << ".iterator();";
- out << nl << "while(" << it << ".hasNext())";
- out << sb;
-
- switch(b->kind())
- {
- case Builtin::KindByte:
- {
- out << nl << "java.lang.Byte __elem = (java.lang.Byte)" << it << ".next();";
- out << nl << stream << ".writeByte(\"e\", __elem.byteValue());";
- break;
- }
- case Builtin::KindBool:
- {
- out << nl << "java.lang.Boolean __elem = (java.lang.Boolean)" << it << ".next();";
- out << nl << stream << ".writeBool(\"e\", __elem.booleanValue());";
- break;
- }
- case Builtin::KindShort:
- {
- out << nl << "java.lang.Short __elem = (java.lang.Short)" << it << ".next();";
- out << nl << stream << ".writeShort(\"e\", __elem.shortValue());";
- break;
- }
- case Builtin::KindInt:
- {
- out << nl << "java.lang.Integer __elem = (java.lang.Integer)" << it << ".next();";
- out << nl << stream << ".writeInt(\"e\", __elem.intValue());";
- break;
- }
- case Builtin::KindLong:
- {
- out << nl << "java.lang.Long __elem = (java.lang.Long)" << it << ".next();";
- out << nl << stream << ".writeLong(\"e\", __elem.longValue());";
- break;
- }
- case Builtin::KindFloat:
- {
- out << nl << "java.lang.Float __elem = (java.lang.Float)" << it << ".next();";
- out << nl << stream << ".writeFloat(\"e\", __elem.floatValue());";
- break;
- }
- case Builtin::KindDouble:
- {
- out << nl << "java.lang.Double __elem = (java.lang.Double)" << it << ".next();";
- out << nl << stream << ".writeDouble(\"e\", __elem.doubleValue());";
- break;
- }
- case Builtin::KindString:
- {
- out << nl << "java.lang.String __elem = (java.lang.String)" << it << ".next();";
- out << nl << stream << ".writeString(\"e\", __elem);";
- break;
- }
- case Builtin::KindObject:
- case Builtin::KindObjectProxy:
- case Builtin::KindLocalObject:
- {
- assert(false);
- break;
- }
- }
- out << eb; // while
- out << nl << stream << ".endWriteSequence();";
- out << eb;
- }
- else
- {
- out << nl << v << " = new " << listType << "();";
- ostringstream o;
- o << origContentS << "[]";
- int d = depth;
- while(d--)
- {
- o << "[]";
- }
- switch(b->kind())
- {
- case Builtin::KindByte:
- {
- out << nl << o.str() << " __seq" << iter << " = " << stream << ".readByteSeq(" << name << ");";
- out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter
- << ".length; __i" << iter << "++)";
- out << sb;
- out << nl << v << ".add(new java.lang.Byte(__seq" << iter << "[__i" << iter << "]));";
- out << eb;
- iter++;
- break;
- }
- case Builtin::KindBool:
- {
- out << nl << o.str() << " __seq" << iter << " = " << stream << ".readBoolSeq(" << name << ");";
- out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter
- << ".length; __i" << iter << "++)";
- out << sb;
- out << nl << v << ".add(__seq" << iter << "[__i" << iter
- << "] ? java.lang.Boolean.TRUE : java.lang.Boolean.FALSE);";
- out << eb;
- iter++;
- break;
- }
- case Builtin::KindShort:
- {
- out << nl << o.str() << " __seq" << iter << " = " << stream << ".readShortSeq(" << name << ");";
- out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter
- << ".length; __i" << iter << "++)";
- out << sb;
- out << nl << v << ".add(new java.lang.Short(__seq" << iter << "[__i" << iter << "]));";
- out << eb;
- iter++;
- break;
- }
- case Builtin::KindInt:
- {
- out << nl << o.str() << " __seq" << iter << " = " << stream << ".readIntSeq(" << name << ");";
- out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter
- << ".length; __i" << iter << "++)";
- out << sb;
- out << nl << v << ".add(new java.lang.Integer(__seq" << iter << "[__i" << iter << "]));";
- out << eb;
- iter++;
- break;
- }
- case Builtin::KindLong:
- {
- out << nl << o.str() << " __seq" << iter << " = " << stream << ".readLongSeq(" << name << ");";
- out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter
- << ".length; __i" << iter << "++)";
- out << sb;
- out << nl << v << ".add(new java.lang.Long(__seq" << iter << "[__i" << iter << "]));";
- out << eb;
- iter++;
- break;
- }
- case Builtin::KindFloat:
- {
- out << nl << o.str() << " __seq" << iter << " = " << stream << ".readFloatSeq(" << name << ");";
- out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter
- << ".length; __i" << iter << "++)";
- out << sb;
- out << nl << v << ".add(new java.lang.Float(__seq" << iter << "[__i" << iter << "]));";
- out << eb;
- iter++;
- break;
- }
- case Builtin::KindDouble:
- {
- out << nl << o.str() << " __seq" << iter << " = " << stream << ".readDoubleSeq(" << name
- << ");";
- out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter
- << ".length; __i" << iter << "++)";
- out << sb;
- out << nl << v << ".add(new java.lang.Double(__seq" << iter << "[__i" << iter << "]));";
- out << eb;
- iter++;
- break;
- }
- case Builtin::KindString:
- {
- out << nl << o.str() << " __seq" << iter << " = " << stream << ".readStringSeq(" << name
- << ");";
- out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __seq" << iter
- << ".length; __i" << iter << "++)";
- out << sb;
- out << nl << v << ".add(__seq" << iter << "[__i" << iter << "]);";
- out << eb;
- iter++;
- break;
- }
- case Builtin::KindObject:
- case Builtin::KindObjectProxy:
- case Builtin::KindLocalObject:
- {
- assert(false);
- break;
- }
- }
- }
- }
- else
- {
- string typeS = getAbsolute(seq->scoped(), scope);
- if(marshal)
- {
- out << nl << "if(" << v << " == null)";
- out << sb;
- out << nl << stream << ".startWriteSequence(" << name << ", 0);";
- out << nl << stream << ".endWriteSequence();";
- out << eb;
- out << nl << "else";
- out << sb;
- out << nl << stream << ".startWriteSequence(" << name << ", " << v << ".size());";
- ostringstream o;
- o << "__i" << iter;
- iter++;
- string it = o.str();
- out << nl << "java.util.Iterator " << it << " = " << v << ".iterator();";
- out << nl << "while(" << it << ".hasNext())";
- out << sb;
- out << nl << origContentS << " __elem = (" << origContentS << ")" << it << ".next();";
- writeGenericMarshalUnmarshalCode(out, scope, seq->type(), "\"e\"", "__elem", true, iter, false);
- out << eb; // while
- out << nl << stream << ".endWriteSequence();";
- out << eb; // else
- }
- else
- {
- out << nl << v << " = new " << listType << "();";
- out << nl << "final int __len" << iter << " = " << stream << ".startReadSequence(" << name << ");";
- out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < __len" << iter << "; __i" << iter
- << "++)";
- out << sb;
- out << nl << origContentS << " __elem;";
- iter++;
- writeGenericMarshalUnmarshalCode(out, scope, seq->type(), "\"e\"", "__elem", false, iter, false);
- out << nl << v << ".add(__elem);";
- out << eb;
- out << nl << stream << ".endReadSequence();";
- }
- }
- }
- else
- {
- BuiltinPtr b = BuiltinPtr::dynamicCast(seq->type());
- if(b && b->kind() != Builtin::KindObject && b->kind() != Builtin::KindObjectProxy)
- {
- switch(b->kind())
- {
- case Builtin::KindByte:
- {
- if(marshal)
- {
- out << nl << stream << ".writeByteSeq(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readByteSeq(" << name << ");";
- }
- break;
- }
- case Builtin::KindBool:
- {
- if(marshal)
- {
- out << nl << stream << ".writeBoolSeq(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readBoolSeq(" << name << ");";
- }
- break;
- }
- case Builtin::KindShort:
- {
- if(marshal)
- {
- out << nl << stream << ".writeShortSeq(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readShortSeq(" << name << ");";
- }
- break;
- }
- case Builtin::KindInt:
- {
- if(marshal)
- {
- out << nl << stream << ".writeIntSeq(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readIntSeq(" << name << ");";
- }
- break;
- }
- case Builtin::KindLong:
- {
- if(marshal)
- {
- out << nl << stream << ".writeLongSeq(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readLongSeq(" << name << ");";
- }
- break;
- }
- case Builtin::KindFloat:
- {
- if(marshal)
- {
- out << nl << stream << ".writeFloatSeq(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readFloatSeq(" << name << ");";
- }
- break;
- }
- case Builtin::KindDouble:
- {
- if(marshal)
- {
- out << nl << stream << ".writeDoubleSeq(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readDoubleSeq(" << name << ");";
- }
- break;
- }
- case Builtin::KindString:
- {
- if(marshal)
- {
- out << nl << stream << ".writeStringSeq(" << name << ", " << v << ");";
- }
- else
- {
- out << nl << v << " = " << stream << ".readStringSeq(" << name << ");";
- }
- break;
- }
- case Builtin::KindObject:
- case Builtin::KindObjectProxy:
- case Builtin::KindLocalObject:
- {
- assert(false);
- break;
- }
- }
- }
- else
- {
- string typeS = getAbsolute(seq->scoped(), scope);
- if(marshal)
- {
- out << nl << "if(" << v << " == null)";
- out << sb;
- out << nl << stream << ".startWriteSequence(" << name << ", 0);";
- out << nl << stream << ".endWriteSequence();";
- out << eb;
- out << nl << "else";
- out << sb;
- out << nl << stream << ".startWriteSequence(" << name << ", " << v << ".length);";
- out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < " << v << ".length; __i" << iter
- << "++)";
- out << sb;
- ostringstream o;
- o << v << "[__i" << iter << "]";
- iter++;
- writeGenericMarshalUnmarshalCode(out, scope, seq->type(), "\"e\"", o.str(), true, iter, false);
- out << eb;
- out << nl << stream << ".endWriteSequence();";
- out << eb;
- }
- else
- {
- out << nl << "final int __len" << iter << " = " << stream << ".startReadSequence(" << name << ");";
- out << nl << v << " = new " << origContentS << "[__len" << iter << "]";
- int d = depth;
- while(d--)
- {
- out << "[]";
- }
- out << ';';
- out << nl << "for(int __i" << iter << " = 0; __i" << iter << " < " << v << ".length; __i" << iter
- << "++)";
- out << sb;
- ostringstream o;
- o << v << "[__i" << iter << "]";
- iter++;
- writeGenericMarshalUnmarshalCode(out, scope, seq->type(), "\"e\"", o.str(), false, iter, false);
- out << eb;
- out << nl << stream << ".endReadSequence();";
- }
- }
- }
-}
-
-void
Slice::JavaGenerator::printHeader()
{
static const char* header =