//**************************************************************************************************
//
// TRACE DEFINITIONS — PREPROCESSOR:
//
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// RuntimeForStatic base library | C+- (SysRoutine) | Author: Sergei Y.Kitáev
#pragma once
#include "include_restrictions.h"

//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//
// TRACE DEFINITIONS (DEPEND ON "$TRACE"-FLAG):
//
//==================================================================================================

#ifdef $TRACING
   #define $TRACE( message ) \
      RuntimeForStatic::$Tracer::Trace($, (message) )
   #define $TRACE_1( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1) )
   #define $TRACE_2( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2) )
   #define $TRACE_3( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3) )
   #define $TRACE_4( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4) )
   #define $TRACE_5( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5) )
   #define $TRACE_6( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6) )
   #define $TRACE_7( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7) )
   #define $TRACE_8( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8) )
   #define $TRACE_9( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9) )
   #define $TRACE_10( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9), (a10) )

   #define $TRACE_INFORMATION( message ) \
      RuntimeForStatic::$Tracer::TraceInformation($, (message) )
   #define $TRACE_INFORMATION_1( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1) )
   #define $TRACE_INFORMATION_2( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2) )
   #define $TRACE_INFORMATION_3( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3) )
   #define $TRACE_INFORMATION_4( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4) )
   #define $TRACE_INFORMATION_5( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5) )
   #define $TRACE_INFORMATION_6( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6) )
   #define $TRACE_INFORMATION_7( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7) )
   #define $TRACE_INFORMATION_8( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8) )
   #define $TRACE_INFORMATION_9( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9) )
   #define $TRACE_INFORMATION_10( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9), (a10) )

   #define $TRACE_WARNING( message ) \
      RuntimeForStatic::$Tracer::TraceWarning($, (message) )
   #define $TRACE_WARNING_1( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1) )
   #define $TRACE_WARNING_2( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2) )
   #define $TRACE_WARNING_3( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3) )
   #define $TRACE_WARNING_4( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4) )
   #define $TRACE_WARNING_5( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5) )
   #define $TRACE_WARNING_6( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6) )
   #define $TRACE_WARNING_7( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7) )
   #define $TRACE_WARNING_8( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8) )
   #define $TRACE_WARNING_9( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9) )
   #define $TRACE_WARNING_10( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9), (a10) )

   #define $TRACE_ERROR( message ) \
      RuntimeForStatic::$Tracer::TraceError($, (message) )
   #define $TRACE_ERROR_1( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1) )
   #define $TRACE_ERROR_2( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2) )
   #define $TRACE_ERROR_3( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3) )
   #define $TRACE_ERROR_4( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4) )
   #define $TRACE_ERROR_5( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5) )
   #define $TRACE_ERROR_6( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6) )
   #define $TRACE_ERROR_7( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7) )
   #define $TRACE_ERROR_8( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8) )
   #define $TRACE_ERROR_9( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9) )
   #define $TRACE_ERROR_10( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9), (a10) )

   #define $TRACE_OPERATION( operation ) \
      RuntimeForStatic::$Tracer::TraceOperation($, (operation) )
   #define $TRACE_OPERATION_1( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1) )
   #define $TRACE_OPERATION_2( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2) )
   #define $TRACE_OPERATION_3( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3) )
   #define $TRACE_OPERATION_4( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4) )
   #define $TRACE_OPERATION_5( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4), (a5) )
   #define $TRACE_OPERATION_6( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4), (a5), (a6) )
   #define $TRACE_OPERATION_7( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7) )
   #define $TRACE_OPERATION_8( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8) )
   #define $TRACE_OPERATION_9( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9) )
   #define $TRACE_OPERATION_10( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9), (a10) )

   #define $TRACE_IN_FUNCTION() \
      RuntimeForStatic::$Tracer::TraceInFunction($, $FUNCTION )
   #define $TRACE_IN_FUNCTION_WITH_SIG() \
      RuntimeForStatic::$Tracer::TraceInFunction($, $FUNCSIG )

   #define $IN_FUNCTION_SCOPE_TRACE() \
      RuntimeForStatic::$InFunctionScopeTracer \
         $IDENT_AUTO( $in_function_scope_tracer_ )($, $FUNCTION )
   #define $IN_FUNCTION_SCOPE_TRACE_WITH_SIG() \
      RuntimeForStatic::$InFunctionScopeTracer \
         $IDENT_AUTO( $in_function_scope_tracer_ )($, $FUNCSIG )
#else
   #define $TRACE( message )                             $VOID_VALUE
   #define $TRACE_1( messageFmt, a1 )                    $VOID_VALUE
   #define $TRACE_2( messageFmt, a1 )                    $VOID_VALUE
   #define $TRACE_3( messageFmt, a1 )                    $VOID_VALUE
   #define $TRACE_4( messageFmt, a1 )                    $VOID_VALUE
   #define $TRACE_5( messageFmt, a1 )                    $VOID_VALUE
   #define $TRACE_6( messageFmt, a1 )                    $VOID_VALUE
   #define $TRACE_7( messageFmt, a1 )                    $VOID_VALUE
   #define $TRACE_8( messageFmt, a1 )                    $VOID_VALUE
   #define $TRACE_9( messageFmt, a1 )                    $VOID_VALUE
   #define $TRACE_10( messageFmt, a1 )                   $VOID_VALUE

   #define $TRACE_INFORMATION( message )                 $VOID_VALUE
   #define $TRACE_INFORMATION_1( messageFmt, a1 )        $VOID_VALUE
   #define $TRACE_INFORMATION_2( messageFmt, a1 )        $VOID_VALUE
   #define $TRACE_INFORMATION_3( messageFmt, a1 )        $VOID_VALUE
   #define $TRACE_INFORMATION_4( messageFmt, a1 )        $VOID_VALUE
   #define $TRACE_INFORMATION_5( messageFmt, a1 )        $VOID_VALUE
   #define $TRACE_INFORMATION_6( messageFmt, a1 )        $VOID_VALUE
   #define $TRACE_INFORMATION_7( messageFmt, a1 )        $VOID_VALUE
   #define $TRACE_INFORMATION_8( messageFmt, a1 )        $VOID_VALUE
   #define $TRACE_INFORMATION_9( messageFmt, a1 )        $VOID_VALUE
   #define $TRACE_INFORMATION_10( messageFmt, a1 )       $VOID_VALUE

   #define $TRACE_WARNING( message )                     $VOID_VALUE
   #define $TRACE_WARNING_1( messageFmt, a1 )            $VOID_VALUE
   #define $TRACE_WARNING_2( messageFmt, a1 )            $VOID_VALUE
   #define $TRACE_WARNING_3( messageFmt, a1 )            $VOID_VALUE
   #define $TRACE_WARNING_4( messageFmt, a1 )            $VOID_VALUE
   #define $TRACE_WARNING_5( messageFmt, a1 )            $VOID_VALUE
   #define $TRACE_WARNING_6( messageFmt, a1 )            $VOID_VALUE
   #define $TRACE_WARNING_7( messageFmt, a1 )            $VOID_VALUE
   #define $TRACE_WARNING_8( messageFmt, a1 )            $VOID_VALUE
   #define $TRACE_WARNING_9( messageFmt, a1 )            $VOID_VALUE
   #define $TRACE_WARNING_10( messageFmt, a1 )           $VOID_VALUE

   #define $TRACE_ERROR( message )                       $VOID_VALUE
   #define $TRACE_ERROR_1( messageFmt, a1 )              $VOID_VALUE
   #define $TRACE_ERROR_2( messageFmt, a1 )              $VOID_VALUE
   #define $TRACE_ERROR_3( messageFmt, a1 )              $VOID_VALUE
   #define $TRACE_ERROR_4( messageFmt, a1 )              $VOID_VALUE
   #define $TRACE_ERROR_5( messageFmt, a1 )              $VOID_VALUE
   #define $TRACE_ERROR_6( messageFmt, a1 )              $VOID_VALUE
   #define $TRACE_ERROR_7( messageFmt, a1 )              $VOID_VALUE
   #define $TRACE_ERROR_8( messageFmt, a1 )              $VOID_VALUE
   #define $TRACE_ERROR_9( messageFmt, a1 )              $VOID_VALUE
   #define $TRACE_ERROR_10( messageFmt, a1 )             $VOID_VALUE

   #define $TRACE_OPERATION( operation )                 $VOID_VALUE
   #define $TRACE_OPERATION_1( operationFmt, a1 )        $VOID_VALUE
   #define $TRACE_OPERATION_2( operationFmt, a1 )        $VOID_VALUE
   #define $TRACE_OPERATION_3( operationFmt, a1 )        $VOID_VALUE
   #define $TRACE_OPERATION_4( operationFmt, a1 )        $VOID_VALUE
   #define $TRACE_OPERATION_5( operationFmt, a1 )        $VOID_VALUE
   #define $TRACE_OPERATION_6( operationFmt, a1 )        $VOID_VALUE
   #define $TRACE_OPERATION_7( operationFmt, a1 )        $VOID_VALUE
   #define $TRACE_OPERATION_8( operationFmt, a1 )        $VOID_VALUE
   #define $TRACE_OPERATION_9( operationFmt, a1 )        $VOID_VALUE
   #define $TRACE_OPERATION_10( operationFmt, a1 )       $VOID_VALUE

   #define $TRACE_IN_FUNCTION()                          $VOID_VALUE
   #define $TRACE_IN_FUNCTION_WITH_SIG()                 $VOID_VALUE

   #define $IN_FUNCTION_SCOPE_TRACE()                    $VOID_VALUE
   #define $IN_FUNCTION_SCOPE_TRACE_WITH_SIG()           $VOID_VALUE
#endif


//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
//
// DEBUG DEFINITIONS (DEPEND ON "_DEBUG"-FLAG):
//
//==================================================================================================

#if _DEBUG
   #define $DBG_PRINT( message ) \
      RuntimeForStatic::$Tracer::Trace($, (message) )
   #define $DBG_PRINT_1( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1) )
   #define $DBG_PRINT_2( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2) )
   #define $DBG_PRINT_3( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3) )
   #define $DBG_PRINT_4( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4) )
   #define $DBG_PRINT_5( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5) )
   #define $DBG_PRINT_6( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6) )
   #define $DBG_PRINT_7( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7) )
   #define $DBG_PRINT_8( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8) )
   #define $DBG_PRINT_9( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9) )
   #define $DBG_PRINT_10( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9), (a10) )

   #define $DBG_PRINT_INFORMATION( message ) \
      RuntimeForStatic::$Tracer::TraceInformation($, (message) )
   #define $DBG_PRINT_INFORMATION_1( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1) )
   #define $DBG_PRINT_INFORMATION_2( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2) )
   #define $DBG_PRINT_INFORMATION_3( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3) )
   #define $DBG_PRINT_INFORMATION_4( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4) )
   #define $DBG_PRINT_INFORMATION_5( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5) )
   #define $DBG_PRINT_INFORMATION_6( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6) )
   #define $DBG_PRINT_INFORMATION_7( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7) )
   #define $DBG_PRINT_INFORMATION_8( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8) )
   #define $DBG_PRINT_INFORMATION_9( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9) )
   #define $DBG_PRINT_INFORMATION_10( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceInformationFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9), (a10) )

   #define $DBG_PRINT_WARNING( message ) \
      RuntimeForStatic::$Tracer::TraceWarning($, (message) )
   #define $DBG_PRINT_WARNING_1( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1) )
   #define $DBG_PRINT_WARNING_2( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2) )
   #define $DBG_PRINT_WARNING_3( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3) )
   #define $DBG_PRINT_WARNING_4( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4) )
   #define $DBG_PRINT_WARNING_5( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5) )
   #define $DBG_PRINT_WARNING_6( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6) )
   #define $DBG_PRINT_WARNING_7( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7) )
   #define $DBG_PRINT_WARNING_8( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8) )
   #define $DBG_PRINT_WARNING_9( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9) )
   #define $DBG_PRINT_WARNING_10( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceWarningFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9), (a10) )

   #define $DBG_PRINT_ERROR( message ) \
      RuntimeForStatic::$Tracer::TraceError($, (message) )
   #define $DBG_PRINT_ERROR_1( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1) )
   #define $DBG_PRINT_ERROR_2( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2) )
   #define $DBG_PRINT_ERROR_3( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3) )
   #define $DBG_PRINT_ERROR_4( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4) )
   #define $DBG_PRINT_ERROR_5( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5) )
   #define $DBG_PRINT_ERROR_6( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6) )
   #define $DBG_PRINT_ERROR_7( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7) )
   #define $DBG_PRINT_ERROR_8( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8) )
   #define $DBG_PRINT_ERROR_9( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9) )
   #define $DBG_PRINT_ERROR_10( messageFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceErrorFmt($, \
         (messageFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9), (a10) )

   #define $DBG_PRINT_OPERATION( operation ) \
      RuntimeForStatic::$Tracer::TraceOperation( operation )
   #define $DBG_PRINT_OPERATION_1( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1) )
   #define $DBG_PRINT_OPERATION_2( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2) )
   #define $DBG_PRINT_OPERATION_3( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3) )
   #define $DBG_PRINT_OPERATION_4( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4) )
   #define $DBG_PRINT_OPERATION_5( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4), (a5) )
   #define $DBG_PRINT_OPERATION_6( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4), (a5), (a6) )
   #define $DBG_PRINT_OPERATION_7( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7) )
   #define $DBG_PRINT_OPERATION_8( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8) )
   #define $DBG_PRINT_OPERATION_9( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9) )
   #define $DBG_PRINT_OPERATION_10( operationFmt, a1 ) \
      RuntimeForStatic::$Tracer::TraceOperationFmt($, \
         (operationFmt), (a1), (a2), (a3), (a4), (a5), (a6), (a7), (a8), (a9), (a10) )

   #define $DBG_TRACE_IN_FUNCTION() \
      RuntimeForStatic::$Tracer::TraceInFunction($, $FUNCTION )
   #define $DBG_TRACE_IN_FUNCTION_WITH_SIG() \
      RuntimeForStatic::$Tracer::TraceInFunction($, $FUNCSIG )

   #define $DBG_IN_FUNCTION_SCOPE_TRACE() \
      RuntimeForStatic::$InFunctionScopeTracer $inFunctionScopeTracer($, $FUNCTION )
   #define $DBG_IN_FUNCTION_SCOPE_TRACE_WITH_SIG() \
      RuntimeForStatic::$InFunctionScopeTracer $inFunctionScopeTracer($, $FUNCSIG )
#else // !$TRACING:
   #define $DBG_PRINT( message )                         $VOID_VALUE
   #define $DBG_PRINT_1( messageFmt, a1 )                $VOID_VALUE
   #define $DBG_PRINT_2( messageFmt, a1 )                $VOID_VALUE
   #define $DBG_PRINT_3( messageFmt, a1 )                $VOID_VALUE
   #define $DBG_PRINT_4( messageFmt, a1 )                $VOID_VALUE
   #define $DBG_PRINT_5( messageFmt, a1 )                $VOID_VALUE
   #define $DBG_PRINT_6( messageFmt, a1 )                $VOID_VALUE
   #define $DBG_PRINT_7( messageFmt, a1 )                $VOID_VALUE
   #define $DBG_PRINT_8( messageFmt, a1 )                $VOID_VALUE
   #define $DBG_PRINT_9( messageFmt, a1 )                $VOID_VALUE
   #define $DBG_PRINT_10( messageFmt, a1 )               $VOID_VALUE

   #define $DBG_PRINT_INFORMATION( message )             $VOID_VALUE
   #define $DBG_PRINT_INFORMATION_1( messageFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_INFORMATION_2( messageFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_INFORMATION_3( messageFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_INFORMATION_4( messageFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_INFORMATION_5( messageFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_INFORMATION_6( messageFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_INFORMATION_7( messageFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_INFORMATION_8( messageFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_INFORMATION_9( messageFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_INFORMATION_10( messageFmt, a1 )   $VOID_VALUE

   #define $DBG_PRINT_WARNING( message )                 $VOID_VALUE
   #define $DBG_PRINT_WARNING_1( messageFmt, a1 )        $VOID_VALUE
   #define $DBG_PRINT_WARNING_2( messageFmt, a1 )        $VOID_VALUE
   #define $DBG_PRINT_WARNING_3( messageFmt, a1 )        $VOID_VALUE
   #define $DBG_PRINT_WARNING_4( messageFmt, a1 )        $VOID_VALUE
   #define $DBG_PRINT_WARNING_5( messageFmt, a1 )        $VOID_VALUE
   #define $DBG_PRINT_WARNING_6( messageFmt, a1 )        $VOID_VALUE
   #define $DBG_PRINT_WARNING_7( messageFmt, a1 )        $VOID_VALUE
   #define $DBG_PRINT_WARNING_8( messageFmt, a1 )        $VOID_VALUE
   #define $DBG_PRINT_WARNING_9( messageFmt, a1 )        $VOID_VALUE
   #define $DBG_PRINT_WARNING_10( messageFmt, a1 )       $VOID_VALUE

   #define $DBG_PRINT_ERROR( message )                   $VOID_VALUE
   #define $DBG_PRINT_ERROR_1( messageFmt, a1 )          $VOID_VALUE
   #define $DBG_PRINT_ERROR_2( messageFmt, a1 )          $VOID_VALUE
   #define $DBG_PRINT_ERROR_3( messageFmt, a1 )          $VOID_VALUE
   #define $DBG_PRINT_ERROR_4( messageFmt, a1 )          $VOID_VALUE
   #define $DBG_PRINT_ERROR_5( messageFmt, a1 )          $VOID_VALUE
   #define $DBG_PRINT_ERROR_6( messageFmt, a1 )          $VOID_VALUE
   #define $DBG_PRINT_ERROR_7( messageFmt, a1 )          $VOID_VALUE
   #define $DBG_PRINT_ERROR_8( messageFmt, a1 )          $VOID_VALUE
   #define $DBG_PRINT_ERROR_9( messageFmt, a1 )          $VOID_VALUE
   #define $DBG_PRINT_ERROR_10( messageFmt, a1 )         $VOID_VALUE

   #define $DBG_PRINT_OPERATION( operation )             $VOID_VALUE
   #define $DBG_PRINT_OPERATION_1( operationFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_OPERATION_2( operationFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_OPERATION_3( operationFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_OPERATION_4( operationFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_OPERATION_5( operationFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_OPERATION_6( operationFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_OPERATION_7( operationFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_OPERATION_8( operationFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_OPERATION_9( operationFmt, a1 )    $VOID_VALUE
   #define $DBG_PRINT_OPERATION_10( operationFmt, a1 )   $VOID_VALUE

   #define $DBG_TRACE_IN_FUNCTION()                      $VOID_VALUE
   #define $DBG_TRACE_IN_FUNCTION_WITH_SIG()             $VOID_VALUE

   #define $DBG_IN_FUNCTION_SCOPE_TRACE()                $VOID_VALUE
   #define $DBG_IN_FUNCTION_SCOPE_TRACE_WITH_SIG()       $VOID_VALUE
#endif // !$TRACING

//==================================================================================================
