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_Base * | newDelayedAssigner_T (Type &var) | 
///////////////// 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 AT_END | ( | execution_code | ) | 
Value:
\ static struct t_UNIQUE_NAME \ { \ ~UNIQUE_NAME() \ { \ execution_code \ } \ } \ UNIQUE_NAME_WP (atStartVarOnLine_);
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_);
Example: AT_START (cout << "executed before main()!\n") ________________________________________________________rado__
Definition at line 239 of file utilitymacros.h.
| #define DELAYED_ASSIGN | ( | var_ref, | |||
| value | ) | 
Value:
\ UnivesalStorage_T \ < DelayedAssigner_T_Base, \ sizeof (makeDelayedAssigner_T (var_ref)) > \ UNIQUE_NAME (makeDelayedAssigner_T ((var_ref), (value)));
Example: DELAYED_ASSIGN (n, n->next) ________________________________________________________rado__
Definition at line 422 of file utilitymacros.h.
| #define DELAYED_ASSIGN_T | ( | Type, | |||
| var_ref, | |||||
| value | ) | 
Value:
\ DelayedAssigner_T<Type> UNIQUE_NAME (var_ref, value);
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 | ) | #x | 
LINE_STRING __LINE__ as a string
Example: printf (LINE_STRING); ________________________________________________________rado__
Definition at line 138 of file utilitymacros.h.
| #define LINE_STRING_2 | ( | x | ) | 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)
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 }                            \
   }
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 }            \
      }                                \
   }
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 | ( | x | ) | REPEAT_512 (x) REPEAT_512 (x) | 
Definition at line 83 of file utilitymacros.h.
| #define REPEAT_128 | ( | x | ) | REPEAT_64 (x) REPEAT_64 (x) | 
Definition at line 80 of file utilitymacros.h.
| #define REPEAT_16 | ( | x | ) | REPEAT_8 (x) REPEAT_8 (x) | 
Definition at line 77 of file utilitymacros.h.
| #define REPEAT_2 | ( | x | ) | 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 | ( | x | ) | REPEAT_128 (x) REPEAT_128 (x) | 
Definition at line 81 of file utilitymacros.h.
| #define REPEAT_32 | ( | x | ) | REPEAT_16 (x) REPEAT_16 (x) | 
Definition at line 78 of file utilitymacros.h.
| #define REPEAT_4 | ( | x | ) | REPEAT_2 (x) REPEAT_2 (x) | 
Definition at line 75 of file utilitymacros.h.
| #define REPEAT_512 | ( | x | ) | REPEAT_256 (x) REPEAT_256 (x) | 
Definition at line 82 of file utilitymacros.h.
| #define REPEAT_64 | ( | x | ) | REPEAT_32 (x) REPEAT_32 (x) | 
Definition at line 79 of file utilitymacros.h.
| #define REPEAT_8 | ( | x | ) | 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 | ( | x | ) | REPEAT_WC_512 (x), REPEAT_WC_512 (x) | 
Definition at line 108 of file utilitymacros.h.
| #define REPEAT_WC_128 | ( | x | ) | REPEAT_WC_64 (x), REPEAT_WC_64 (x) | 
Definition at line 105 of file utilitymacros.h.
| #define REPEAT_WC_16 | ( | x | ) | REPEAT_WC_8 (x), REPEAT_WC_8 (x) | 
Definition at line 102 of file utilitymacros.h.
| #define REPEAT_WC_2 | ( | x | ) | 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 | ( | x | ) | REPEAT_WC_128 (x), REPEAT_WC_128 (x) | 
Definition at line 106 of file utilitymacros.h.
| #define REPEAT_WC_32 | ( | x | ) | REPEAT_WC_16 (x), REPEAT_WC_16 (x) | 
Definition at line 103 of file utilitymacros.h.
| #define REPEAT_WC_4 | ( | x | ) | REPEAT_WC_2 (x), REPEAT_WC_2 (x) | 
Definition at line 100 of file utilitymacros.h.
| #define REPEAT_WC_512 | ( | x | ) | REPEAT_WC_256 (x), REPEAT_WC_256 (x) | 
Definition at line 107 of file utilitymacros.h.
| #define REPEAT_WC_64 | ( | x | ) | REPEAT_WC_32 (x), REPEAT_WC_32 (x) | 
Definition at line 104 of file utilitymacros.h.
| #define REPEAT_WC_8 | ( | x | ) | 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                            \
      }                                         \
   }
Example: REF_SKIP (100, cout << '*' << endl; } ________________________________________________________rado__
Definition at line 192 of file utilitymacros.h.
| #define SAVE | ( | var_ref | ) | 
Value:
\ UnivesalStorage_T \ < DelayedAssigner_T_Base, \ sizeof (makeDelayedAssigner_T (var_ref)) > \ UNIQUE_NAME (makeDelayedAssigner_T (var_ref));
Example: SAVE (k) ________________________________________________________rado__
Definition at line 409 of file utilitymacros.h.
| #define SAVE_T | ( | Type, | |||
| var_ref | ) | 
Value:
\
      DelayedAssigner_T<Type> UNIQUE_NAME (var_ref);
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 }                     \
      }                                         \
   }
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, | |||
| x | ) | 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, | |||
| x | ) | 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.
| 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.
| 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.
| 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.
 1.4.7