cloudy  trunk
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Data Structures | Macros | Functions
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 >

Macros

#define UTILITYMACROS_H
#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

@verbatim 

///////////////// 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.


Macro Definition 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:
sizeof (makeDelayedAssigner_T (var_ref)) > \
UNIQUE_NAME (makeDelayedAssigner_T ((var_ref), (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)    #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; \

C++ compatible only templates and macros 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 (   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 \
} \
}

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:
sizeof (makeDelayedAssigner_T (var_ref)) > \
UNIQUE_NAME (makeDelayedAssigner_T (var_ref));

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.

#define UTILITYMACROS_H

Definition at line 63 of file utilitymacros.h.


Function Documentation

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<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_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 for cloudy by doxygen 1.8.1.1