/home66/gary/public_html/cloudy/c08_branch/source/utilitymacros.h File Reference

Go to the source code of this file.

Data Structures

class  DelayedAssigner_T_Base
class  DelayedAssigner_T< Type >
class  UnivesalStorage_T< Base, SIZE >

Defines

#define REPEAT_2(x)   x x
#define REPEAT_4(x)   REPEAT_2 (x) REPEAT_2 (x)
#define REPEAT_8(x)   REPEAT_4 (x) REPEAT_4 (x)
#define REPEAT_16(x)   REPEAT_8 (x) REPEAT_8 (x)
#define REPEAT_32(x)   REPEAT_16 (x) REPEAT_16 (x)
#define REPEAT_64(x)   REPEAT_32 (x) REPEAT_32 (x)
#define REPEAT_128(x)   REPEAT_64 (x) REPEAT_64 (x)
#define REPEAT_256(x)   REPEAT_128 (x) REPEAT_128 (x)
#define REPEAT_512(x)   REPEAT_256 (x) REPEAT_256 (x)
#define REPEAT_1024(x)   REPEAT_512 (x) REPEAT_512 (x)
#define REPEAT(count, what)   REPEAT_##count (what)
#define REPEAT_WC_2(x)   x, x
#define REPEAT_WC_4(x)   REPEAT_WC_2 (x), REPEAT_WC_2 (x)
#define REPEAT_WC_8(x)   REPEAT_WC_4 (x), REPEAT_WC_4 (x)
#define REPEAT_WC_16(x)   REPEAT_WC_8 (x), REPEAT_WC_8 (x)
#define REPEAT_WC_32(x)   REPEAT_WC_16 (x), REPEAT_WC_16 (x)
#define REPEAT_WC_64(x)   REPEAT_WC_32 (x), REPEAT_WC_32 (x)
#define REPEAT_WC_128(x)   REPEAT_WC_64 (x), REPEAT_WC_64 (x)
#define REPEAT_WC_256(x)   REPEAT_WC_128 (x), REPEAT_WC_128 (x)
#define REPEAT_WC_512(x)   REPEAT_WC_256 (x), REPEAT_WC_256 (x)
#define REPEAT_WC_1024(x)   REPEAT_WC_512 (x), REPEAT_WC_512 (x)
#define REPEAT_WC(count, text)   REPEAT_WC_##count (text)
#define UNIQUE_NAME_1(prefix, x)   prefix##x
#define UNIQUE_NAME_2(prefix, x)   UNIQUE_NAME_1 (prefix, x)
#define UNIQUE_NAME_WP(prefix)   UNIQUE_NAME_2 (prefix, __LINE__)
#define UNIQUE_NAME   UNIQUE_NAME_WP (uniqueNameOnLine_)
#define LINE_STRING_1(x)   #x
#define LINE_STRING_2(x)   LINE_STRING_1 (x)
#define LINE_STRING   LINE_STRING_2 (__LINE__)
#define HERE   __FILE__ "(" LINE_STRING "):"
#define ONCE(execution_code)
#define SKIP(skip_count, execution_code)
#define REV_SKIP(skip_count, execution_code)
#define LOOP_C(count, loop_code)
#define LOOP(count)
#define AT_START(execution_code)
#define AT_END(execution_code)
#define DELAYED_ASSIGN_T(Type, var_ref, value)
#define SAVE_T(Type, var_ref)
#define SAVE(var_ref)
#define DELAYED_ASSIGN(var_ref, value)

Functions

template<class Type>
DelayedAssigner_T< Type > makeDelayedAssigner_T (Type &var)
template<class Type>
DelayedAssigner_T< Type > makeDelayedAssigner_T (Type &var, const Type &value)
template<class Type>
DelayedAssigner_T_BasenewDelayedAssigner_T (Type &var)


Detailed Description

 ///////////////// UtilityMacros.h ///////////////// rado ////
//                                                            //
//  Copyright (c) 1999 Radoslav Getov                         //
//                                                            //
//  Permission to use, copy, modify and distribute this       //
//  software is granted without fee, provided that the above  //
//  copyright notice and this permission notice appear in the //
//  modified source and the source files that #include it.    //
//                                                            //
////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////
//                                                            //
//  Collection of C and C++ preprocessor utility macros:      //
//                                                            //
//  ------ C and C++ -----                                    //
//  REPEAT_xxx    (text)                                      //
//  REPEAT_WC_xxx (text)                                      //
//  REPEAT        (count, text)                               //
//  REPEAT_WC     (count, text)                               //
//                                                            //
//  UNIQUE_NAME_WP (prefix)                                   //
//  UNIQUE_NAME                                               //
//                                                            //
//  LINE_STRING                                               //
//  HERE                                                      //
//                                                            //
//  ONCE     (execution_code)                                 //
//  SKIP     (skip_count, execution_code)                     //
//  REV_SKIP (skip_count, execution_code)                     //
//  LOOP_C   (count, execution_code)                          //
//                                                            //
//  ------ C++ only -----                                     //
//  LOOP (count)                                              //
//                                                            //
//  AT_START (execution_code)                                 //
//  AT_END   (execution_code)                                 //
//                                                            //
//  DELAYED_ASSIGN_T (Type, var_reference, value)             //
//  SAVE_T           (Type, var_reference)                    //
//  DELAYED_ASSIGN   (var_reference, value)                   //
//  SAVE             (var_reference)                          //
//                                                            //
////////////////////////////////////////////////////////////////

Definition in file utilitymacros.h.


Define Documentation

#define AT_END ( execution_code   ) 

Value:

\
   static struct t_UNIQUE_NAME                  \
            {                                   \
            ~UNIQUE_NAME()                      \
               {                                \
               execution_code                   \
               }                                \
            }                                   \
      UNIQUE_NAME_WP (atStartVarOnLine_);
AT_END Execute 'execution_code' upon globals cleanup.

Example: AT_END (cout << "executed AFTER main() return!\n") ________________________________________________________rado__

Definition at line 257 of file utilitymacros.h.

#define AT_START ( execution_code   ) 

Value:

\
   static struct t_UNIQUE_NAME                  \
            {                                   \
            UNIQUE_NAME()                       \
               {                                \
               execution_code                   \
               }                                \
            }                                   \
      UNIQUE_NAME_WP (atStartVarOnLine_);
AT_START Execute 'execution_code' upon globals initialization.

Example: AT_START (cout << "executed before main()!\n") ________________________________________________________rado__

Definition at line 239 of file utilitymacros.h.

#define DELAYED_ASSIGN ( var_ref,
value   ) 

Value:

DELAYED_ASSIGN Assign 'value' to 'var_ref' upon destruction.

Example: DELAYED_ASSIGN (n, n->next) ________________________________________________________rado__

Definition at line 422 of file utilitymacros.h.

#define DELAYED_ASSIGN_T ( Type,
var_ref,
value   ) 

Value:

DELAYED_ASSIGN_T Assign 'value' to 'var_ref' upon destruction.

Example: DELAYED_ASSIGN_T (Node*, n, n->next) ________________________________________________________rado__

Definition at line 316 of file utilitymacros.h.

#define HERE   __FILE__ "(" LINE_STRING "):"

HERE File name and line number in string form like "File (1234):"

Example (MSVC): #pragma message (HERE "Click here!") ________________________________________________________rado__

Definition at line 151 of file utilitymacros.h.

#define LINE_STRING   LINE_STRING_2 (__LINE__)

Definition at line 141 of file utilitymacros.h.

#define LINE_STRING_1 (  )     #x

LINE_STRING __LINE__ as a string

Example: printf (LINE_STRING); ________________________________________________________rado__

Definition at line 138 of file utilitymacros.h.

#define LINE_STRING_2 (  )     LINE_STRING_1 (x)

Definition at line 139 of file utilitymacros.h.

#define LOOP ( count   ) 

Value:

for(int UNIQUE_NAME = (count);     \
                                UNIQUE_NAME > 0;          \
                                --UNIQUE_NAME)
LOOP 'for' loop header for loop to be executed 'count' times. The statement, following it, is the loop body.

Example: LOOP (rand() % 100) cout << '*'; ________________________________________________________rado__

Definition at line 227 of file utilitymacros.h.

#define LOOP_C ( count,
loop_code   ) 

Value:

\
   {                                            \
   int UNIQUE_NAME = (count);                   \
   for(; UNIQUE_NAME > 0; --UNIQUE_NAME)        \
       { loop_code }                            \
   }
LOOP_C Execute 'loop_code' 'count' times

Example: LOOP_C (100, cout << '*' << endl; ) ________________________________________________________rado__

Definition at line 209 of file utilitymacros.h.

#define ONCE ( execution_code   ) 

Value:

{                                   \
   static int UNIQUE_NAME = 0;         \
   if( !UNIQUE_NAME )                  \
      {                                \
      UNIQUE_NAME = 1;                 \
         { execution_code }            \
      }                                \
   }
ONCE(execution_code) Executes 'execution_code' only the first time.

Example: ONCE (cout << "Here we start"; ) ________________________________________________________rado__

Definition at line 160 of file utilitymacros.h.

#define REPEAT ( count,
what   )     REPEAT_##count (what)

REPEAT (count, what) Textually repeat 'what' 'cnt' times.

Example: char* spaces = REPEAT (32, " "); ________________________________________________________rado__

Definition at line 91 of file utilitymacros.h.

#define REPEAT_1024 (  )     REPEAT_512 (x) REPEAT_512 (x)

Definition at line 83 of file utilitymacros.h.

#define REPEAT_128 (  )     REPEAT_64 (x) REPEAT_64 (x)

Definition at line 80 of file utilitymacros.h.

#define REPEAT_16 (  )     REPEAT_8 (x) REPEAT_8 (x)

Definition at line 77 of file utilitymacros.h.

#define REPEAT_2 (  )     x x

#REPEAT_xxx (text) Textually repeat argument xxx times.

Example: char* spaces = REPEAT_32 (" "); ________________________________________________________rado__

Definition at line 74 of file utilitymacros.h.

#define REPEAT_256 (  )     REPEAT_128 (x) REPEAT_128 (x)

Definition at line 81 of file utilitymacros.h.

#define REPEAT_32 (  )     REPEAT_16 (x) REPEAT_16 (x)

Definition at line 78 of file utilitymacros.h.

#define REPEAT_4 (  )     REPEAT_2 (x) REPEAT_2 (x)

Definition at line 75 of file utilitymacros.h.

#define REPEAT_512 (  )     REPEAT_256 (x) REPEAT_256 (x)

Definition at line 82 of file utilitymacros.h.

#define REPEAT_64 (  )     REPEAT_32 (x) REPEAT_32 (x)

Definition at line 79 of file utilitymacros.h.

#define REPEAT_8 (  )     REPEAT_4 (x) REPEAT_4 (x)

Definition at line 76 of file utilitymacros.h.

#define REPEAT_WC ( count,
text   )     REPEAT_WC_##count (text)

=================| REPEAT_WC (count, text) |================= Textually repeat 'what' 'cnt' times, delimited by comas.

Example: int ones[16] = { REPEAT_WC (16, 1) }; ________________________________________________________rado__

Definition at line 116 of file utilitymacros.h.

#define REPEAT_WC_1024 (  )     REPEAT_WC_512 (x), REPEAT_WC_512 (x)

Definition at line 108 of file utilitymacros.h.

#define REPEAT_WC_128 (  )     REPEAT_WC_64 (x), REPEAT_WC_64 (x)

Definition at line 105 of file utilitymacros.h.

#define REPEAT_WC_16 (  )     REPEAT_WC_8 (x), REPEAT_WC_8 (x)

Definition at line 102 of file utilitymacros.h.

#define REPEAT_WC_2 (  )     x, x

#REPEAT_WC_xxx (text) Textually repeat argument xxx times, delimited by comas.

Example: int ones[] = { REPEAT_WC_16 (1) }; ________________________________________________________rado__

Definition at line 99 of file utilitymacros.h.

#define REPEAT_WC_256 (  )     REPEAT_WC_128 (x), REPEAT_WC_128 (x)

Definition at line 106 of file utilitymacros.h.

#define REPEAT_WC_32 (  )     REPEAT_WC_16 (x), REPEAT_WC_16 (x)

Definition at line 103 of file utilitymacros.h.

#define REPEAT_WC_4 (  )     REPEAT_WC_2 (x), REPEAT_WC_2 (x)

Definition at line 100 of file utilitymacros.h.

#define REPEAT_WC_512 (  )     REPEAT_WC_256 (x), REPEAT_WC_256 (x)

Definition at line 107 of file utilitymacros.h.

#define REPEAT_WC_64 (  )     REPEAT_WC_32 (x), REPEAT_WC_32 (x)

Definition at line 104 of file utilitymacros.h.

#define REPEAT_WC_8 (  )     REPEAT_WC_4 (x), REPEAT_WC_4 (x)

Definition at line 101 of file utilitymacros.h.

#define REV_SKIP ( skip_count,
execution_code   ) 

Value:

{                                            \
   static int UNIQUE_NAME = 0;                  \
   if( ++UNIQUE_NAME >= (skip_count) )          \
      UNIQUE_NAME = 0;                          \
   else                                         \
      {                                         \
      execution_code                            \
      }                                         \
   }
REV_SKIP(cnt,code) Executes 'execution_code' once in 'skip_count' times.

Example: REF_SKIP (100, cout << '*' << endl; } ________________________________________________________rado__

Definition at line 192 of file utilitymacros.h.

#define SAVE ( var_ref   ) 

Value:

SAVE(var_ref) Restore initial value of 'var_ref' upon destruction.

Example: SAVE (k) ________________________________________________________rado__

Definition at line 409 of file utilitymacros.h.

#define SAVE_T ( Type,
var_ref   ) 

Value:

SAVE_T Restore initial value of 'var_ref' upon destruction.

Example: SAVE_T (double, d) ________________________________________________________rado__

Definition at line 326 of file utilitymacros.h.

#define SKIP ( skip_count,
execution_code   ) 

Value:

{                                            \
   static int UNIQUE_NAME = 0;                  \
   if( ++UNIQUE_NAME >= (skip_count) )          \
      {                                         \
      UNIQUE_NAME = 0;                          \
         { execution_code }                     \
      }                                         \
   }
SKIP(cnt,code) Executes 'execution_code' once in 'skip_count' times.

Example: SKIP (100, cout << '*' << endl; } ________________________________________________________rado__

Definition at line 176 of file utilitymacros.h.

#define UNIQUE_NAME   UNIQUE_NAME_WP (uniqueNameOnLine_)

Definition at line 130 of file utilitymacros.h.

#define UNIQUE_NAME_1 ( prefix,
 )     prefix##x

====================| UNIQUE_NAME |========================== Expands to unique identifier on each line.

Example: int UNIQUA_NAME = 0, UNIQUE_NAME = 1; ________________________________________________________rado__

Definition at line 125 of file utilitymacros.h.

#define UNIQUE_NAME_2 ( prefix,
 )     UNIQUE_NAME_1 (prefix, x)

Definition at line 126 of file utilitymacros.h.

#define UNIQUE_NAME_WP ( prefix   )     UNIQUE_NAME_2 (prefix, __LINE__)

Definition at line 128 of file utilitymacros.h.


Function Documentation

template<class Type>
DelayedAssigner_T<Type> makeDelayedAssigner_T ( Type &  var,
const Type &  value 
) [inline]

makeDelayedAssigner_T(2) Returns DelayedAssigner_T <Type> (deducing 'Type' from arguments)

Example: see define DELAYED_ASSIGN ________________________________________________________rado__

Definition at line 351 of file utilitymacros.h.

template<class Type>
DelayedAssigner_T<Type> makeDelayedAssigner_T ( Type &  var  )  [inline]

makeDelayedAssigner_T Return DelayedAssigner_T <Type> (deducing 'Type' from arguments)

Example: see define SAVE ________________________________________________________rado__

Definition at line 338 of file utilitymacros.h.

template<class Type>
DelayedAssigner_T_Base* newDelayedAssigner_T ( Type &  var  )  [inline]

newDelayedAssigner_T Allocate, initialize, and return pointer to a DelayedAssigner_T <Type> (deducing 'Type' from argument)

Example: std::auto_ptr <DeleyedAssigner_T_Base> save_var (allocateDelayedAssigner_T (j); ________________________________________________________rado__

Definition at line 365 of file utilitymacros.h.


Generated on Mon Feb 16 12:14:05 2009 for cloudy by  doxygen 1.4.7