#define DO_EXPAND( VAL ) VAL ## 0 #define EXPAND( VAL ) DO_EXPAND( VAL ) #ifdef BARGINGCHECK #define BCHECK( stmt ) stmt #if EXPAND(BARGINGCHECK) != 10 #define __BCHECK_PRT__( msg ) abort( msg ) #else #define __BCHECK_PRT__( msg ) std::osacquire( std::cerr ) << msg << std::endl #endif #else #define BCHECK( stmt ) #endif // BARGINGCHECK #define __BCHECK_DECL__ size_t ticket = 0, served = 0; #define __BRIDGE_ENTRY_START__ size_t myticket = ticket++; #define __BRIDGE_ENTRY_END__ if( myticket != served ) __BCHECK_PRT__( "**** BARGING ERROR ****" ); served++; #define BCHECK_DECL \ BCHECK( __BCHECK_DECL__ ) #define BRIDGE_ENTRY_START \ BCHECK( __BRIDGE_ENTRY_START__ ) #define BRIDGE_ENTRY_END \ BCHECK( __BRIDGE_ENTRY_END__ )