Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Are you planning to remove data-dependencies in your logic? You might find the below useful.
Statement Block |
Constant Time Equivalent |
x++; if(x >= MAX_SIZE) x = 0; |
x = ( x + 1 ) % MAX_SIZE; |
x--; if(x < 0) x = MAX_SIZE - 1; |
x = (x + MAX_SIZE – 1) % MAX_SIZE; |
x = x + increment; if(x >= MAX_SIZE) x = 0; |
x = (x + increment) % MAX_SIZE; |
x = x - decrement; if(x < 0) x = MAX_SIZE - 1; |
x = (x + MAX_SIZE – decrement) % MAX_SIZE; |
x = x + increment; if(x >=MAX_SIZE) x = UPPER_LIMIT; |
x = x + increment; x = (x * (!((x/MAX_SIZE)^0))) + (UPPER_LIMIT * (!!((x/MAX_SIZE)^0))); |
x = x - decrement; if(x < MIN_SIZE) x = LOWER_LIMIT; |
x = x - decrement; x = (LOWER_LIMIT * (!(x / MIN_SIZE)^0))) + (x * (!!(( x / MIN_SIZE)^0))); |
if(x % 2) x--; |
x &= ~0x01 ; |
if(x % 2) x++; |
x = (x & (~0x01)) + ((x - (x & (~0x01))) << 1) ; |
if(!(x % 2)) x++; |
x |= 0x01 ; |
if(!(x % 2)) x--; |
x = (x | 0x01) - ((x - (x | 0x01)) << 1) ; |
An example application is below.
#include<stdio.h>
#include<stdlib.h>
int (*lpfnCorrectError[2])(int);
int (*lpfnCorrect[2])(int);
int (*lpfnHandler[6])(int);
int Error(int);
int Correct(int);
int One(int);
int Two(int);
int Three(int);
int Four(int);
int Five(int);
int Quit(int);
int Switch(int);
int main(int argc, char *argv[])
{
char ch[2];
unsigned int num;
lpfnCorrectError[0]=Correct;
lpfnCorrectError[1]=Error;
lpfnCorrect[0]=Switch;
lpfnCorrect[1]=Error;
lpfnHandler[0]=Quit;
lpfnHandler[1]=One;
lpfnHandler[2]=Two;
lpfnHandler[3]=Three;
lpfnHandler[4]=Four;
lpfnHandler[5]=Five;
ReadInput:
fflush(stdin);
num=99;
printf("\nEnter Your Choice between [1..5] or 0 to Quit\t:");
scanf("%2d",&num);
(*lpfnCorrectError[num>>8*sizeof(unsigned int)-1])(num);
goto ReadInput;
return 0;
}
int Correct(int num)
{ //!((num/6)^0) returns 1 if num/6==0
return (*lpfnCorrect[!!((num/6)^0)])(num); //num/6==0?Switch():Error();
}
int Error(int num)
{
return fprintf(stderr,"\tInvalid Input: Please Enter a number between [1..5] or 0 to Quit",num);
}
int Switch(int num)
{
return (*lpfnHandler[num])(num);
}
int One(int num)
{
return printf("\n This is Place Holder for Function One\n");
}
int Two(int num)
{
return printf("\n This is Place Holder for Function Two\n");
}
int Three(int num)
{
return printf("\n This is Place Holder for Function Three\n");
}
int Four(int num)
{
return printf("\n This is Place Holder for Function Four\n");
}
int Five(int num)
{
return printf("\n This is Place Holder for Function Five\n");
}
int Quit(int num)
{
exit(fprintf(stderr,"\n Terminating.....\n"));
return 0;
}
/*****************************************************************/
/**** if(n==p) can be written as !(n^p) **************************/
/**** if(n>=p) can be written as !!((n/p)^0) *********************/
/*****************************************************************/
Comments
- Anonymous
January 04, 2008
PingBack from http://geeklectures.info/2008/01/04/remove-data-dependencies/