Mercurial > projects > qtd
diff generator/cppimplgenerator.cpp @ 293:8627891e4556 signals
QList updates
author | eldar |
---|---|
date | Fri, 13 Nov 2009 19:09:28 +0000 |
parents | 19498f420252 |
children | bb37b0ed94c9 |
line wrap: on
line diff
--- a/generator/cppimplgenerator.cpp Tue Nov 10 19:29:42 2009 +0000 +++ b/generator/cppimplgenerator.cpp Fri Nov 13 19:09:28 2009 +0000 @@ -721,6 +721,22 @@ << "}" << endl; } + if (java_class->typeEntry()->isValue() && java_class->hasCloneOperator()) + { + AbstractMetaFunction *ctor = java_class->copyConstructor(); + if(ctor) + { + QString argName = ctor->arguments().at(0)->indexedName(); + s << endl << endl + << "extern \"C\" DLL_PUBLIC void* qtd_" << java_class->name() << "_placed_copy(void* " + << argName << ", " << "void* place) {" << endl + << QString(" const %1& __qt_%2 = (const %1& ) *(%1 *)%2;").arg(java_class->name()).arg(argName) << endl; + + writeFinalConstructor(s, ctor, "result", "original", "(place)"); + s << "}"; + } + } + s << endl << endl; priGenerator->addSource(java_class->package(), fileNameForClass(java_class)); @@ -2340,7 +2356,8 @@ void CppImplGenerator::writeFinalConstructor(QTextStream &s, const AbstractMetaFunction *java_function, const QString &qt_object_name, - const QString &java_object_name) + const QString &java_object_name, + const QString &place) { const AbstractMetaClass *cls = java_function->ownerClass(); AbstractMetaArgumentList arguments = java_function->arguments(); @@ -2349,7 +2366,7 @@ bool hasShellClass = cls->generateShellClass(); s << INDENT << shellClassName(cls) << " *" << qt_object_name - << " = new " << shellClassName(cls) + << " = new " << place << shellClassName(cls) << "("; writeFunctionCallArguments(s, java_function, "__qt_"); s << ");" << endl;