iterate.h

Go to the documentation of this file.
00001 
00006 #ifndef ITERATE_H
00007 #define ITERATE_H
00008 
00015 #define array_foreach(type,instance, label ) \
00016     type* label = (instance);\
00017     type* ppConcat(endof_,label) = (label+countof(instance));\
00018     for ( ; label < ppConcat(endof_,label); ++label )
00019 
00027 #define array_foreach_const(type,instance, label ) \
00028     const type* label = (const type*)(instance);\
00029     const type* ppConcat(endof_,label) = (const type*)(label+countof(instance));\
00030     for ( ; label < ppConcat(endof_,label); ++label )
00031 
00039 #define array_foreach_reverse(type,instance, label ) \
00040     type* label = ((instance)+countof(instance));\
00041     while ( label-- > (instance) )
00042 
00050 #define array_foreach_const_reverse(type,instance, label ) \
00051     const type* label = (const type*)((instance)+countof(instance));\
00052     while ( label-- > (instance) )
00053 
00054 
00062 #define pointer_foreach(type,instance,count, label ) \
00063     type* label = (instance);\
00064     type* ppConcat(endof_,label) = label+(count);\
00065     for ( ; label < ppConcat(endof_,label); ++label )
00066 
00075 #define pointer_foreach_const(type,instance,count, label ) \
00076     const type* label = (const type*)(instance);\
00077     const type* ppConcat(endof_,label) = (const type*)(label+(count)); \
00078     for ( ; label < ppConcat(endof_,label); ++label )
00079 
00088 #define pointer_foreach_reverse(type,instance,count, label ) \
00089     type* label = ((instance)+(count));\
00090     while ( label-- > (instance) )
00091 
00100 #define pointer_foreach_const_reverse(type,instance, count, label ) \
00101     const type* label = (const type*)((instance)+(count));\
00102     while ( label-- > (const type*)(instance) )
00103 
00104 
00105 #ifdef __cplusplus
00106 
00112 #define stl_foreach(class,instance, label ) \
00113     class::iterator label = (instance).begin();\
00114     for( class::const_iterator label##_end = (instance).end(); label != label##_end; ++label )
00115 
00123 #define stl_foreach_const(class,instance, label ) \
00124     class::const_iterator label = (instance).begin();\
00125     for( class::const_iterator label##_end = (instance).end(); label != label##_end; ++label )
00126 
00134 #define stl_foreach_reverse(class,instance, label ) \
00135     class::reverse_iterator label = (instance).rbegin();\
00136     for( class::const_reverse_iterator label##_end = (instance).rend(); label != label##_end; ++label )
00137 
00146 #define stl_foreach_const_reverse(class,instance,count, label ) \
00147     class::const_reverse_iterator label = (instance).rbegin();\
00148     for( class::const_reverse_iterator label##_end = (instance).rend(); label != label##_end; ++label )
00149 #endif /* __cplusplus */
00150 
00151 /*
00152  * Basic permutation iteratiors
00153  *
00154  * The following iterate on variables that you privide in a relatively 
00155  * efficient manner.
00156  *
00157  * p1,p2,pn Can be integers, pointers into an array or stl random access iterator like objects
00158  * begin,end Are similar to members gotten from stl container type begin,end
00159  */
00160 
00170 #define exponents_2( p1,p2, begin,end )\
00171     for( (p1) = (begin); (p1) < (end); ++(p1) )\
00172     for( (p2) = (begin); (p2) < (end); ++(p2) )\
00173 
00174 
00179 #define exponents_2_calc(begin,end) ( ((end)-(begin)) * ((end)-(begin)) )
00180 
00191 #define arrangements_2( p1,p2, begin,end )\
00192     exponents_2( p1,p2, begin,end )\
00193     if( (p1) != (p2) )
00194 
00200 #define arrangements_2_calc(begin,end)  ( ((end)-(begin)) * ((end)-(begin)-1) )
00201 
00211 #define combinations_2( p1,p2, begin,end )\
00212     for( (p1) = (begin); (p1) < ((end)-1); ++(p1) )\
00213     for( (p2) = (p1)+1; (p2) < (end); ++(p2) )
00214 
00220 #define combinations_2_calc(begin,end)  ( ((end)-(begin)) * ((end)-(begin)-1) / (2) )
00221 
00222 
00223 
00232 #define exponents_3( p1,p2,p3, begin,end )\
00233     for( (p1) = (begin); (p1) < (end); ++(p1) )\
00234     for( (p2) = (begin); (p2) < (end); ++(p2) )\
00235     for( (p3) = (begin); (p3) < (end); ++(p3) )\
00236 
00237 
00242 #define exponents_3_calc(begin,end) ( ((end)-(begin)) * ((end)-(begin)) * ((end)-(begin)) )
00243 
00253 #define arrangements_3( p1,p2,p3, begin,end )\
00254     exponents_3( p1,p2,p3, begin,end )\
00255     if( ppCombination3( &&, ppNOTEQUAL, p1,p2,p3 ) )
00256     /*if( (p1) != (p2) && (p1) != (p3) && (p2) != (p3) )*/
00257     
00263 #define arrangements_3_calc(begin,end)  ( ((end)-(begin)) * ((end)-(begin)-1) * ((end)-(begin)-2) )
00264 
00273 #define combinations_3( p1,p2,p3, begin,end )\
00274     for( (p1) = (begin); (p1) < ((end)-2); ++(p1) )\
00275     for( (p2) = (p1)+1; (p2) < ((end)-1); ++(p2) )\
00276     for( (p3) = (p2)+1; (p3) < (end); ++(p3) )
00277 
00283 #define combinations_3_calc(begin,end)  ( ((end)-(begin)) * ((end)-(begin)-1) * ((end)-(begin)-2) / (3*2) )
00284 
00285 
00286 
00295 #define exponents_4( p1,p2,p3,p4, begin,end )\
00296     for( (p1) = (begin); (p1) < (end); ++(p1) )\
00297     for( (p2) = (begin); (p2) < (end); ++(p2) )\
00298     for( (p3) = (begin); (p3) < (end); ++(p3) )\
00299     for( (p4) = (begin); (p4) < (end); ++(p4) )\
00300 
00301 
00306 #define exponents_4_calc(begin,end) ( ((end)-(begin)) * ((end)-(begin)) * ((end)-(begin)) * ((end)-(begin)) )
00307 
00317 #define arrangements_4( p1,p2,p3,p4, begin,end )\
00318     exponents_4( p1,p2,p3,p4, begin,end )\
00319     if( ppCombination4( &&, ppNOTEQUAL, p1,p2,p3,p4 ) )
00320     /*if( (p1) != (p2) && (p1) != (p3) && (p1) != (p4) && (p2) != (p3) && (p2) != (p4) && (p3) != (p4) ) */
00321 
00327 #define arrangements_4_calc(begin,end)  (((end)-(begin))*(((end)-(begin))-1)*(((end)-(begin))-2)*(((end)-(begin))-3))
00328 
00329 
00338 #define combinations_4( p1,p2,p3,p4, begin,end )\
00339     for( (p1) = (begin); (p1) < ((end)-3); ++(p1) )\
00340     for( (p2) = (p1)+1; (p2) < ((end)-2); ++(p2) )\
00341     for( (p3) = (p2)+1; (p3) < ((end)-1); ++(p3) )\
00342     for( (p4) = (p3)+1; (p4) < (end); ++(p4) )
00343 
00349 #define combinations_4_calc(begin,end)      ((((end)-(begin))*(((end)-(begin))-1)*(((end)-(begin))-2)*(((end)-(begin))-3))/(4*3*2))
00350 
00351 
00360 #define exponents_5( p1,p2,p3,p4,p5, begin,end )\
00361     for( (p1) = (begin); (p1) < (end); ++(p1) )\
00362     for( (p2) = (begin); (p2) < (end); ++(p2) )\
00363     for( (p3) = (begin); (p3) < (end); ++(p3) )\
00364     for( (p4) = (begin); (p4) < (end); ++(p4) )\
00365     for( (p5) = (begin); (p5) < (end); ++(p5) )\
00366 
00367 
00372 #define exponents_5_calc(begin,end) ( ((end)-(begin)) * ((end)-(begin)) * ((end)-(begin)) * ((end)-(begin)) * ((end)-(begin)) )
00373 
00383 #define arrangements_5( p1,p2,p3,p4,p5, begin,end )\
00384     exponents_5( p1,p2,p3,p4,p5, begin,end )\
00385     if( ppCombination5( &&, ppNOTEQUAL, p1,p2,p3,p4,p5 ) )
00386     /*if( (p1) != (p2) && (p1) != (p3) && (p1) != (p4) && (p1) != (p5) && (p2) != (p3) && (p2) != (p4) && (p2) != (p5) && (p3) != (p4) && (p3) != (p5) && (p4) != (p5) ) */
00387 
00393 #define arrangements_5_calc(begin,end)  (((end)-(begin))*(((end)-(begin))-1)*(((end)-(begin))-2)*(((end)-(begin))-3)*(((end)-(begin))-4))
00394 
00403 #define combinations_5( p1,p2,p3,p4,p5, begin,end )\
00404     for( (p1) = (begin); (p1) < ((end)-4); ++(p1) )\
00405     for( (p2) = (p1)+1; (p2) < ((end)-3); ++(p2) )\
00406     for( (p3) = (p2)+1; (p3) < ((end)-2); ++(p3) )\
00407     for( (p4) = (p3)+1; (p4) < ((end)-1); ++(p4) )\
00408     for( (p5) = (p4)+1; (p5) < (end); ++(p5) )
00409 
00415 #define combinations_5_calc(begin,end)      ((((end)-(begin))*(((end)-(begin))-1)*(((end)-(begin))-2)*(((end)-(begin))-3)*(((end)-(begin))-4))/(5*4*3*2))
00416 
00417 
00424 #define ppDuff( unroll, count, op ) ppConcat(ppDuff,unroll)(count,op)
00425 #define ppDuff1 ppDuff4 
00426 #define ppDuff2 ppDuff4
00427 #define ppDuffBegin(op)         op; 
00428 #define ppDuffBlock(op,start)   case start+3: op; case start+2: op; case start+1: op; case start: op; 
00429 #define ppDuffMore(op,start)    ppDuffBlock(op,start+12) ppDuffBlock(op,start+8) ppDuffBlock(op,start+4) ppDuffBlock(op,start);
00430 #define ppDuffSilly(op,start)   ppDuffMore(op,start+48) ppDuffMore(op,start+32) ppDuffMore(op,start+16) ppDuffMore(op,start)
00431 #define ppDuffEnd(op)           case 3: op; case 2: op; case 1: op; case 0:
00432 #define ppDuff4( count, op )\
00433 {\
00434     size_t remain = (count);\
00435     size_t jump = remain & 0x03;\
00436     remain >>= 2;\
00437     switch( jump )\
00438     {\
00439         do {\
00440             ppDuffBegin(op);\
00441             ppDuffEnd(op);\
00442         } while( remain-- );\
00443     }\
00444 }
00445 #define ppDuff8( count, op )\
00446 {\
00447     size_t remain = (count);\
00448     size_t jump = remain & 0x07;\
00449     remain >>= 3;\
00450     switch( jump )\
00451     {\
00452         do {\
00453             ppDuffBegin(op)\
00454             ppDuffBlock(op,4)\
00455             ppDuffEnd(op);\
00456         } while( remain-- );\
00457     }\
00458 }
00459 #define ppDuff16( count, op )\
00460 {\
00461     size_t remain = (count);\
00462     size_t jump = remain & 0x0f;\
00463     remain >>= 4;\
00464     switch( jump )\
00465     {\
00466         do {\
00467             ppDuffBegin(op)\
00468             ppDuffBlock(op,12)\
00469             ppDuffBlock(op,8)\
00470             ppDuffBlock(op,4)\
00471             ppDuffEnd(op);\
00472         } while( remain-- );\
00473     }\
00474 }
00475 #define ppDuff32( count, op )\
00476 {\
00477     size_t remain = (count);\
00478     size_t jump = remain & 0x1f;\
00479     remain >>= 5;\
00480     switch( jump )\
00481     {\
00482         do {\
00483             ppDuffBegin(op)\
00484             ppDuffMore(op,16) \
00485             ppDuffBlock(op,12) ppDuffBlock(op,8) ppDuffBlock(op,4) ppDuffEnd(op);\
00486         } while( remain-- );\
00487     }\
00488 }
00489 #define ppDuff64( count, op )\
00490 {\
00491     size_t remain = (count);\
00492     size_t jump = remain & 0x3f;\
00493     remain >>= 6;\
00494     switch( jump )\
00495     {\
00496         do {\
00497             ppDuffBegin(op)\
00498             ppDuffMore(op,48)\
00499             ppDuffMore(op,32)\
00500             ppDuffMore(op,16)\
00501             ppDuffBlock(op,12) ppDuffBlock(op,8) ppDuffBlock(op,4) ppDuffEnd(op);\
00502         } while( remain-- );\
00503     }\
00504 }
00505 #define ppDuff128( count, op )\
00506 {\
00507     size_t remain = (count);\
00508     size_t jump = remain & 0x7f;\
00509     remain >>= 7;\
00510     switch( jump )\
00511     {\
00512         do {\
00513             ppDuffBegin(op)\
00514             ppDuffSilly(op,64)\
00515             ppDuffMore(op,48)\
00516             ppDuffMore(op,32)\
00517             ppDuffMore(op,16)\
00518             ppDuffBlock(op,12) ppDuffBlock(op,8) ppDuffBlock(op,4) ppDuffEnd(op);\
00519         } while( remain-- );\
00520     }\
00521 }
00522 #define ppDuff256( count, op )\
00523 {\
00524     size_t remain = (count);\
00525     size_t jump = remain & 0xff;\
00526     remain >>= 8;\
00527     switch( jump )\
00528     {\
00529         do {\
00530             ppDuffBegin(op)\
00531             ppDuffSilly(op,192)\
00532             ppDuffSilly(op,128)\
00533             ppDuffSilly(op,64)\
00534             ppDuffMore(op,48)\
00535             ppDuffMore(op,32)\
00536             ppDuffMore(op,16)\
00537             ppDuffBlock(op,12) ppDuffBlock(op,8) ppDuffBlock(op,4) ppDuffEnd(op);\
00538         } while( remain-- );\
00539     }\
00540 }
00541 
00542 /*
00543  * The following macros allow us to do unique permutations of comparisons
00544  * and other low-level stuff without all the extra typing
00545  */
00546 
00547 
00548 /*
00549  * Functions to pass to primitive expansions
00550  */
00551 #define ppAND(a,b)              ((a) && (b))
00552 #define ppOR(a,b)               ((a) || (b))
00553 #define ppEQUAL(a,b)            ((a) == (b))
00554 #define ppNOTEQUAL(a,b)         ((a) != (b))
00555 #define ppGREATER(a,b)          ((a) >  (b))
00556 #define ppLESSTHAN(a,b)         ((a) <  (b))
00557 #define ppGREATEREQUAL(a,b)     ((a) >= (b))
00558 #define ppLESSTHANEQUAL(a,b)    ((a) <= (b))
00559 
00560 
00568 #define ppCombination3( op, fn, a,b,c ) \
00569     ( \
00570         fn((a),(b)) op fn((a),(c)) op \
00571         fn((b),(c)) \
00572     )
00573 
00574 #define ppCombination2( op, fn, a,b )   fn((a),(b))
00575 #define ppCombination1( op, fn, a )     (a)
00576 
00577 #define ppCombination4( op, fn, a,b,c,d ) \
00578     ( \
00579         fn((a),(b)) op fn((a),(c)) op fn((a),(d)) op \
00580         ppCombination3( op, fn, b,c,d )\
00581     )
00582 
00583 #define ppCombination5( op, fn, a,b,c,d,e ) \
00584     ( \
00585         fn((a),(b)) op fn((a),(c)) op fn((a),(d)) op fn((a),(e)) op \
00586         ppCombination4( op, fn, b,c,d,e )\
00587     )
00588 
00589 #define ppCombination6( op, fn, a,b,c,d,e,f ) \
00590     ( \
00591         fn((a),(b)) op fn((a),(c)) op fn((a),(d)) op fn((a),(e)) op \
00592         fn((a),(f)) op \
00593         ppCombination5( op, fn, b,c,d,e,f )\
00594     )
00595 
00596 #define ppCombination7( op, fn, a,b,c,d,e,f,g ) \
00597     ( \
00598         fn((a),(b)) op fn((a),(c)) op fn((a),(d)) op fn((a),(e)) op \
00599         fn((a),(f)) op fn((a),(g)) op \
00600         ppCombination6( op, fn, b,c,d,e,f,g )\
00601     )
00602 
00603 #define ppCombination8( op, fn, a,b,c,d,e,f,g,h ) \
00604     ( \
00605         fn((a),(b)) op fn((a),(c)) op fn((a),(d)) op fn((a),(e)) op \
00606         fn((a),(f)) op fn((a),(g)) op fn((a),(h)) op \
00607         ppCombination7( op, fn, b,c,d,e,f,g,h )\
00608     )
00609 
00610 #define ppCombination9( op, fn, a,b,c,d,e,f,g,h,i ) \
00611     ( \
00612         fn((a),(b)) op fn((a),(c)) op fn((a),(d)) op fn((a),(e)) op \
00613         fn((a),(f)) op fn((a),(g)) op fn((a),(h)) op fn((a),(i)) op \
00614         ppCombination8( op, fn, b,c,d,e,f,g,h,i )\
00615     )
00616 
00617 #define ppCombination10( op, fn, a,b,c,d,e,f,g,h,i,j ) \
00618     ( \
00619         fn((a),(b)) op fn((a),(c)) op fn((a),(d)) op fn((a),(e)) op \
00620         fn((a),(f)) op fn((a),(g)) op fn((a),(h)) op fn((a),(i)) op \
00621         fn((a),(j)) op \
00622         ppCombination9( op, fn, b,c,d,e,f,g,h,i,j )\
00623     )
00624 
00625 
00626 /*
00627  * \brief Unroll a loop to generate repetitive code, or make constants
00628  * (1 ppOps( * 10, 3 )) -> (1 * 10 * 10 * 10) = 1000
00629  * \param op Operation to repeat
00630  * \param count Number of times to repeat operation
00631  */
00632 #define ppOps( op, count ) ppConcat( _ppOP, ppToken(count) )(op)
00633     #define _ppOP0(op)  
00634     #define _ppOP1(op)  op 
00635     #define _ppOP2(op)  op op 
00636     #define _ppOP3(op)  op op op 
00637     #define _ppOP4(op)  op op op op 
00638     #define _ppOP5(op)  op op op op op 
00639     #define _ppOP6(op)  op op op op op op 
00640     #define _ppOP7(op)  op op op op op op op 
00641     #define _ppOP8(op)  op op op op op op op op 
00642     #define _ppOP9(op)  op op op op op op op op op 
00643     #define _ppOP10(op) op op op op op op op op op op 
00644         #define _ppOP11(op) _ppOP10(op) _ppOP1(op)
00645         #define _ppOP12(op) _ppOP10(op) _ppOP2(op)
00646         #define _ppOP13(op) _ppOP10(op) _ppOP3(op)
00647         #define _ppOP14(op) _ppOP10(op) _ppOP4(op)
00648         #define _ppOP15(op) _ppOP10(op) _ppOP5(op)
00649         #define _ppOP16(op) _ppOP10(op) _ppOP6(op)
00650         #define _ppOP17(op) _ppOP10(op) _ppOP7(op)
00651         #define _ppOP18(op) _ppOP10(op) _ppOP8(op)
00652         #define _ppOP19(op) _ppOP10(op) _ppOP9(op)
00653     #define _ppOP20(op) _ppOP10(op) _ppOP10(op)
00654         #define _ppOP21(op) _ppOP20(op) _ppOP1(op)
00655         #define _ppOP22(op) _ppOP20(op) _ppOP2(op)
00656         #define _ppOP23(op) _ppOP20(op) _ppOP3(op)
00657         #define _ppOP24(op) _ppOP20(op) _ppOP4(op)
00658         #define _ppOP25(op) _ppOP20(op) _ppOP5(op)
00659         #define _ppOP26(op) _ppOP20(op) _ppOP6(op)
00660         #define _ppOP27(op) _ppOP20(op) _ppOP7(op)
00661         #define _ppOP28(op) _ppOP20(op) _ppOP8(op)
00662         #define _ppOP29(op) _ppOP20(op) _ppOP9(op)
00663     #define _ppOP30(op) _ppOP20(op) _ppOP10(op)
00664         #define _ppOP31(op) _ppOP30(op) _ppOP1(op)
00665         #define _ppOP32(op) _ppOP30(op) _ppOP2(op)
00666         #define _ppOP33(op) _ppOP30(op) _ppOP3(op)
00667         #define _ppOP34(op) _ppOP30(op) _ppOP4(op)
00668         #define _ppOP35(op) _ppOP30(op) _ppOP5(op)
00669         #define _ppOP36(op) _ppOP30(op) _ppOP6(op)
00670         #define _ppOP37(op) _ppOP30(op) _ppOP7(op)
00671         #define _ppOP38(op) _ppOP30(op) _ppOP8(op)
00672         #define _ppOP39(op) _ppOP30(op) _ppOP9(op)
00673     #define _ppOP40(op) _ppOP30(op) _ppOP10(op)
00674         #define _ppOP41(op) _ppOP40(op) _ppOP1(op)
00675         #define _ppOP42(op) _ppOP40(op) _ppOP2(op)
00676         #define _ppOP43(op) _ppOP40(op) _ppOP3(op)
00677         #define _ppOP44(op) _ppOP40(op) _ppOP4(op)
00678         #define _ppOP45(op) _ppOP40(op) _ppOP5(op)
00679         #define _ppOP46(op) _ppOP40(op) _ppOP6(op)
00680         #define _ppOP47(op) _ppOP40(op) _ppOP7(op)
00681         #define _ppOP48(op) _ppOP40(op) _ppOP8(op)
00682         #define _ppOP49(op) _ppOP40(op) _ppOP9(op)
00683     #define _ppOP50(op) _ppOP40(op) _ppOP10(op)
00684         #define _ppOP51(op) _ppOP50(op) _ppOP1(op)
00685         #define _ppOP52(op) _ppOP50(op) _ppOP2(op)
00686         #define _ppOP53(op) _ppOP50(op) _ppOP3(op)
00687         #define _ppOP54(op) _ppOP50(op) _ppOP4(op)
00688         #define _ppOP55(op) _ppOP50(op) _ppOP5(op)
00689         #define _ppOP56(op) _ppOP50(op) _ppOP6(op)
00690         #define _ppOP57(op) _ppOP50(op) _ppOP7(op)
00691         #define _ppOP58(op) _ppOP50(op) _ppOP8(op)
00692         #define _ppOP59(op) _ppOP50(op) _ppOP9(op)
00693     #define _ppOP60(op) _ppOP50(op) _ppOP10(op)
00694         #define _ppOP61(op) _ppOP60(op) _ppOP1(op)
00695         #define _ppOP62(op) _ppOP60(op) _ppOP2(op)
00696         #define _ppOP63(op) _ppOP60(op) _ppOP3(op)
00697         #define _ppOP64(op) _ppOP60(op) _ppOP4(op)
00698         #define _ppOP65(op) _ppOP60(op) _ppOP5(op)
00699         #define _ppOP66(op) _ppOP60(op) _ppOP6(op)
00700         #define _ppOP67(op) _ppOP60(op) _ppOP7(op)
00701         #define _ppOP68(op) _ppOP60(op) _ppOP8(op)
00702         #define _ppOP69(op) _ppOP60(op) _ppOP9(op)
00703     #define _ppOP70(op) _ppOP60(op) _ppOP10(op)
00704         #define _ppOP71(op) _ppOP70(op) _ppOP1(op)
00705         #define _ppOP72(op) _ppOP70(op) _ppOP2(op)
00706         #define _ppOP73(op) _ppOP70(op) _ppOP3(op)
00707         #define _ppOP74(op) _ppOP70(op) _ppOP4(op)
00708         #define _ppOP75(op) _ppOP70(op) _ppOP5(op)
00709         #define _ppOP76(op) _ppOP70(op) _ppOP6(op)
00710         #define _ppOP77(op) _ppOP70(op) _ppOP7(op)
00711         #define _ppOP78(op) _ppOP70(op) _ppOP8(op)
00712         #define _ppOP79(op) _ppOP70(op) _ppOP9(op)
00713     #define _ppOP80(op) _ppOP70(op) _ppOP10(op)
00714         #define _ppOP81(op) _ppOP80(op) _ppOP1(op)
00715         #define _ppOP82(op) _ppOP80(op) _ppOP2(op)
00716         #define _ppOP83(op) _ppOP80(op) _ppOP3(op)
00717         #define _ppOP84(op) _ppOP80(op) _ppOP4(op)
00718         #define _ppOP85(op) _ppOP80(op) _ppOP5(op)
00719         #define _ppOP86(op) _ppOP80(op) _ppOP6(op)
00720         #define _ppOP87(op) _ppOP80(op) _ppOP7(op)
00721         #define _ppOP88(op) _ppOP80(op) _ppOP8(op)
00722         #define _ppOP89(op) _ppOP80(op) _ppOP9(op)
00723     #define _ppOP90(op) _ppOP80(op) _ppOP10(op)
00724         #define _ppOP91(op) _ppOP90(op) _ppOP1(op)
00725         #define _ppOP92(op) _ppOP90(op) _ppOP2(op)
00726         #define _ppOP93(op) _ppOP90(op) _ppOP3(op)
00727         #define _ppOP94(op) _ppOP90(op) _ppOP4(op)
00728         #define _ppOP95(op) _ppOP90(op) _ppOP5(op)
00729         #define _ppOP96(op) _ppOP90(op) _ppOP6(op)
00730         #define _ppOP97(op) _ppOP90(op) _ppOP7(op)
00731         #define _ppOP98(op) _ppOP90(op) _ppOP8(op)
00732         #define _ppOP99(op) _ppOP90(op) _ppOP9(op)
00733     #define _ppOP100(op) _ppOP90(op) _ppOP10(op)
00734         #define _ppOP101(op) _ppOP100(op) _ppOP1(op)
00735         #define _ppOP102(op) _ppOP100(op) _ppOP2(op)
00736         #define _ppOP103(op) _ppOP100(op) _ppOP3(op)
00737         #define _ppOP104(op) _ppOP100(op) _ppOP4(op)
00738         #define _ppOP105(op) _ppOP100(op) _ppOP5(op)
00739         #define _ppOP106(op) _ppOP100(op) _ppOP6(op)
00740         #define _ppOP107(op) _ppOP100(op) _ppOP7(op)
00741         #define _ppOP108(op) _ppOP100(op) _ppOP8(op)
00742         #define _ppOP109(op) _ppOP100(op) _ppOP9(op)
00743     #define _ppOP110(op) _ppOP100(op) _ppOP10(op)
00744         #define _ppOP111(op) _ppOP110(op) _ppOP1(op)
00745         #define _ppOP112(op) _ppOP110(op) _ppOP2(op)
00746         #define _ppOP113(op) _ppOP110(op) _ppOP3(op)
00747         #define _ppOP114(op) _ppOP110(op) _ppOP4(op)
00748         #define _ppOP115(op) _ppOP110(op) _ppOP5(op)
00749         #define _ppOP116(op) _ppOP110(op) _ppOP6(op)
00750         #define _ppOP117(op) _ppOP110(op) _ppOP7(op)
00751         #define _ppOP118(op) _ppOP110(op) _ppOP8(op)
00752         #define _ppOP119(op) _ppOP110(op) _ppOP9(op)
00753     #define _ppOP120(op) _ppOP110(op) _ppOP10(op)
00754         #define _ppOP121(op) _ppOP120(op) _ppOP1(op)
00755         #define _ppOP122(op) _ppOP120(op) _ppOP2(op)
00756         #define _ppOP123(op) _ppOP120(op) _ppOP3(op)
00757         #define _ppOP124(op) _ppOP120(op) _ppOP4(op)
00758         #define _ppOP125(op) _ppOP120(op) _ppOP5(op)
00759         #define _ppOP126(op) _ppOP120(op) _ppOP6(op)
00760         #define _ppOP127(op) _ppOP120(op) _ppOP7(op)
00761         #define _ppOP128(op) _ppOP120(op) _ppOP8(op)
00762         #define _ppOP129(op) _ppOP120(op) _ppOP9(op)
00763     #define _ppOP130(op) _ppOP120(op) _ppOP10(op)
00764         #define _ppOP131(op) _ppOP130(op) _ppOP1(op)
00765         #define _ppOP132(op) _ppOP130(op) _ppOP2(op)
00766         #define _ppOP133(op) _ppOP130(op) _ppOP3(op)
00767         #define _ppOP134(op) _ppOP130(op) _ppOP4(op)
00768         #define _ppOP135(op) _ppOP130(op) _ppOP5(op)
00769         #define _ppOP136(op) _ppOP130(op) _ppOP6(op)
00770         #define _ppOP137(op) _ppOP130(op) _ppOP7(op)
00771         #define _ppOP138(op) _ppOP130(op) _ppOP8(op)
00772         #define _ppOP139(op) _ppOP130(op) _ppOP9(op)
00773     #define _ppOP140(op) _ppOP130(op) _ppOP10(op)
00774         #define _ppOP141(op) _ppOP140(op) _ppOP1(op)
00775         #define _ppOP142(op) _ppOP140(op) _ppOP2(op)
00776         #define _ppOP143(op) _ppOP140(op) _ppOP3(op)
00777         #define _ppOP144(op) _ppOP140(op) _ppOP4(op)
00778         #define _ppOP145(op) _ppOP140(op) _ppOP5(op)
00779         #define _ppOP146(op) _ppOP140(op) _ppOP6(op)
00780         #define _ppOP147(op) _ppOP140(op) _ppOP7(op)
00781         #define _ppOP148(op) _ppOP140(op) _ppOP8(op)
00782         #define _ppOP149(op) _ppOP140(op) _ppOP9(op)
00783     #define _ppOP150(op) _ppOP140(op) _ppOP10(op)
00784 
00785 /*
00786  * \brief Constant: Raise some constant base value, 'b' to the xth power (ppExp(10,3) = 1000)
00787  * \param b Base value
00788  * \param x Power; must be an integer constant (i.e. 3, not 'x')
00789  */
00790 #define ppExponent( b, x )  ( 1 ppOps( * (b), x ) )
00791 
00792 #endif /* ITERATE_H */

Generated on Fri Jan 2 15:28:34 2009 for Squat by  doxygen 1.5.6