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.