comparison generator/cppimplgenerator.cpp @ 167:ae06da58ec25

fixed hacky conversion of arguments when emmitting a signal
author eldar
date Sat, 20 Jun 2009 19:14:29 +0000
parents ae34188ddd84
children d3f4f14d43a5
comparison
equal deleted inserted replaced
166:52da31f967f0 167:ae06da58ec25
1380 s << "EmitCallback emit_callbacks_" << java_class->name() << "[1];" << endl; // Hack for msvc. 1380 s << "EmitCallback emit_callbacks_" << java_class->name() << "[1];" << endl; // Hack for msvc.
1381 else { 1381 else {
1382 // D-side signal callbacks 1382 // D-side signal callbacks
1383 for(int i = 0; i < signal_funcs.size(); i++) { 1383 for(int i = 0; i < signal_funcs.size(); i++) {
1384 AbstractMetaFunction *signal = signal_funcs.at(i); 1384 AbstractMetaFunction *signal = signal_funcs.at(i);
1385 writeSignalHandler(s, java_class, signal); 1385 s << "extern \"C\" DLL_PUBLIC void " << signalExternName(java_class, signal) << "_handle(void* d_entity, void** args);" << endl;
1386 } 1386 }
1387 1387
1388 if(signal_funcs.size() > 0) 1388 if(signal_funcs.size() > 0)
1389 s << "EmitCallback emit_callbacks_" << java_class->name() << "[" << signal_funcs.size() << "] = {" << endl; 1389 s << "EmitCallback emit_callbacks_" << java_class->name() << "[" << signal_funcs.size() << "] = {" << endl;
1390 else 1390 else
3237 3237
3238 QString cls_name = getTypeName(targ->typeEntry(), EnumAsInts); 3238 QString cls_name = getTypeName(targ->typeEntry(), EnumAsInts);
3239 cls_name.remove("_ConcreteWrapper"); 3239 cls_name.remove("_ConcreteWrapper");
3240 3240
3241 s << endl 3241 s << endl
3242 << INDENT << "{" << endl // qtd2 hack, additional scope for avoiding duplicating of "i" 3242 // << INDENT << "{" << endl // qtd2 hack, additional scope for avoiding duplicating of "i"
3243 << INDENT; 3243 << INDENT;
3244 3244
3245 switch (type->type()) { 3245 switch (type->type()) {
3246 case ContainerTypeEntry::LinkedListContainer: 3246 case ContainerTypeEntry::LinkedListContainer:
3247 case ContainerTypeEntry::QueueContainer: 3247 case ContainerTypeEntry::QueueContainer:
3262 s << ";" << endl 3262 s << ";" << endl
3263 << INDENT; 3263 << INDENT;
3264 3264
3265 3265
3266 writeTypeInfo(s, java_type, ForceValueType); 3266 writeTypeInfo(s, java_type, ForceValueType);
3267 QString index = "i_" + qt_name;
3267 s << "::const_iterator " << qt_name << "_end_it = " << qt_name << ".constEnd();" << endl 3268 s << "::const_iterator " << qt_name << "_end_it = " << qt_name << ".constEnd();" << endl
3268 << INDENT << "int i = 0;" << endl 3269 << INDENT << QString("int %0 = 0;").arg(index) << endl
3269 << INDENT; 3270 << INDENT;
3270 s << "for ("; 3271 s << "for (";
3271 writeTypeInfo(s, java_type, ForceValueType); 3272 writeTypeInfo(s, java_type, ForceValueType);
3272 s << "::const_iterator " << qt_name << "_it = " << qt_name << ".constBegin(); " 3273 s << "::const_iterator " << qt_name << "_it = " << qt_name << ".constBegin(); "
3273 << qt_name << "_it != " << qt_name << "_end_it; ++" << qt_name << "_it) {" << endl; 3274 << qt_name << "_it != " << qt_name << "_end_it; ++" << qt_name << "_it) {" << endl;
3276 s << INDENT; 3277 s << INDENT;
3277 writeTypeInfo(s, targ); 3278 writeTypeInfo(s, targ);
3278 s << " __qt_tmp = *" << qt_name << "_it;" << endl; 3279 s << " __qt_tmp = *" << qt_name << "_it;" << endl;
3279 3280
3280 if(targ->isTargetLangString()) 3281 if(targ->isTargetLangString())
3281 s << INDENT << "void *__java_tmp = qtd_string_from_array(" << java_name << ", i);" << endl; 3282 s << INDENT << "void *__java_tmp = qtd_string_from_array(" << java_name << ", " << index << ");" << endl;
3282 3283
3283 writeQtToJava(s, targ, "__qt_tmp", "__java_tmp", 0, -1, BoxedPrimitive); 3284 writeQtToJava(s, targ, "__qt_tmp", "__java_tmp", 0, -1, BoxedPrimitive);
3284 3285
3285 s << INDENT << "qtd_assign_" << cls_name << "_array_element(" << java_name << ", i, __java_tmp);" << endl; 3286 s << INDENT << "qtd_assign_" << cls_name << "_array_element(" << java_name << ", " << index << ", __java_tmp);" << endl;
3286 s << INDENT << "++i;" << endl; 3287 s << INDENT << "++" << index << ";" << endl;
3287 } 3288 }
3288 s << INDENT << "}" << endl 3289 s << INDENT << "}" << endl;
3289 << INDENT << "}" << endl; 3290 // << INDENT << "}" << endl;
3290 3291
3291 } else if (type->type() == ContainerTypeEntry::PairContainer) { 3292 } else if (type->type() == ContainerTypeEntry::PairContainer) {
3292 QList<AbstractMetaType *> args = java_type->instantiations(); 3293 QList<AbstractMetaType *> args = java_type->instantiations();
3293 Q_ASSERT(args.size() == 2); 3294 Q_ASSERT(args.size() == 2);
3294 3295