comparison qt/d2/qt/Signal.d @ 302:55ee4603365d signals

string arguments for signals
author eldar_ins@eldar-laptop
date Sat, 12 Dec 2009 03:22:54 +0500
parents 8627891e4556
children ce07227f00c1
comparison
equal deleted inserted replaced
301:4d8481385c71 302:55ee4603365d
313 template findSymbols(string prefix, C, alias pred) 313 template findSymbols(string prefix, C, alias pred)
314 { 314 {
315 alias findSymbolsImpl!(prefix, C, 0, pred).result findSymbols; 315 alias findSymbolsImpl!(prefix, C, 0, pred).result findSymbols;
316 } 316 }
317 317
318 string __toString(long v)
319 {
320 if (v == 0)
321 return "0";
322
323 string ret;
324
325 bool neg;
326 if (v < 0)
327 {
328 neg = true;
329 v = -v;
330 }
331
332 while (v != 0)
333 {
334 ret = cast(char)(v % 10 + '0') ~ ret;
335 v = cast(long)(v / 10);
336 }
337
338 if (neg)
339 ret = "-" ~ ret;
340
341 return ret;
342 }
343
344 string convertSignalArguments(Args...)() 318 string convertSignalArguments(Args...)()
345 { 319 {
346 // void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) }; 320 // void *_a[] = { 0, const_cast<void*>(reinterpret_cast<const void*>(&_t1)) };
347 321 // at least for string argument need to construct a QString value
348 string res = "void*[" ~ __toString(Args.length+1) ~ "] _a = [null"; 322 string res = prepareSignalArguments!(Args);
323
324 res ~= "void*[" ~ __toString(Args.length+1) ~ "] _a = [null";
349 foreach(i, _; Args) 325 foreach(i, _; Args)
350 res ~= ", " ~ "cast(void*) &" ~ convertSignalArgument!(Args[i])("_t" ~ __toString(i)); 326 res ~= ", " ~ "cast(void*) &" ~ convertSignalArgument!(Args[i])("_t" ~ __toString(i));
351 res ~= "];\n"; 327 res ~= "];\n";
352 return res; 328 return res;
353 } 329 }
461 else 437 else
462 mixin ("enum localIndex = index - 1 - lastSignalIndex_" ~ (typeof(super)).stringof ~ ";"); 438 mixin ("enum localIndex = index - 1 - lastSignalIndex_" ~ (typeof(super)).stringof ~ ";");
463 439
464 static if (signalType == SignalType.NewSignal) 440 static if (signalType == SignalType.NewSignal)
465 { 441 {
466 // pragma (msg, SignalEmitter!(ArgTypes)(SignalType.NewSignal, getFunc!_Name(fullName), defVals, localIndex)); 442 pragma (msg, SignalEmitter!(ArgTypes)(SignalType.NewSignal, getFunc!_Name(fullName), defVals, localIndex));
467 mixin (SignalEmitter!(ArgTypes)(SignalType.NewSignal, getFunc!_Name(fullName), defVals, localIndex)); 443 mixin (SignalEmitter!(ArgTypes)(SignalType.NewSignal, getFunc!_Name(fullName), defVals, localIndex));
468 } 444 }
469 } 445 }
470 mixin InsertMetaMethod!(fullName, metaPrefix, index, defValsLength, ArgTypes); 446 mixin InsertMetaMethod!(fullName, metaPrefix, index, defValsLength, ArgTypes);
471 // pragma (msg, ctfe_meta_signal!(ArgTypes)(fullName, index, defValsLength)); 447 // pragma (msg, ctfe_meta_signal!(ArgTypes)(fullName, index, defValsLength));
485 string res = name ~ "("; 461 string res = name ~ "(";
486 foreach(i, _; T) 462 foreach(i, _; T)
487 { 463 {
488 if(i > 0) 464 if(i > 0)
489 res ~= ","; 465 res ~= ",";
490 res ~= T[i].stringof; 466 static if (isNativeType!(T[i]))
467 res ~= Unqual!(T[i]).stringof;
468 else
469 res ~= T[i].stringof;
491 } 470 }
492 res ~= ")"; 471 res ~= ")";
493 return res; 472 return res;
494 } 473 }
495 474