Mercurial > projects > qtd
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 |