On Saturday, 16 February 2013 at 17:03:30 UTC, Gopan wrote:
On Thursday, 14 February 2013 at 16:57:17 UTC, Andrea Fontana wrote:
Maybe you can write 2 different callbacks, one with if, one without and switch between them.

I like that idea. But it is less elegant. For example, for a timer callback, I may have to restart the timer with a new callback function. Instead of a single callback, if it is a event subscription, other subscribers will be affected.

Maybe with a compile-time code generation to avoid code repetitions...

I am looking for a more generic solution. It should work with within a loop also. Just for the sake of achieving it I will have to put those statements in a function, call it with function pointer, etc.

while(true)
{
   ...
   Statement_1;
   if(i == MY_MAGIC_NUMBER)
   {
      //done with this.
   }
   Statement_3;
   ...
}

Just for a int comparison or is it a different long operation?
:)  you will ask me to short cut with a simple condition.

Thanks,
Gopan

for a loop:

while(true)
{
    Statement_1;
    if(magic)
    {
        //do something with magic
        Statement_2;
        break;
    }
    Statement_2;
}

while(true)
{
    Statement_1;
    Statement_2;
}

Simple (assuming that the break in the if statement is the only way out of the loop).

The code repetition can be easily removed by making Statement_1 and Statement_2 mixins.

Remember that D is a compiled language, you can't change the instructions at runtime so there is no way to edit out the if statement at a runtime-dependant time. You have to specify a whole new code path to follow (i.e. the second while loop).

Reply via email to