Suppress annoying "conditional expression is constant" win32 warning
This commit is contained in:
parent
e1678b1801
commit
0366b2e6b3
2 changed files with 64 additions and 56 deletions
|
|
@ -298,21 +298,26 @@ namespace fc
|
||||||
* @brief Checks a condition and throws an assert_exception if the test is FALSE
|
* @brief Checks a condition and throws an assert_exception if the test is FALSE
|
||||||
*/
|
*/
|
||||||
#define FC_ASSERT( TEST, ... ) \
|
#define FC_ASSERT( TEST, ... ) \
|
||||||
FC_EXPAND_MACRO( \
|
FC_EXPAND_MACRO( \
|
||||||
do { if( !(TEST) ) { FC_THROW_EXCEPTION( fc::assert_exception, #TEST ": " __VA_ARGS__ ); } } while(0) \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
)
|
if( !(TEST) ) \
|
||||||
|
FC_THROW_EXCEPTION( fc::assert_exception, #TEST ": " __VA_ARGS__ ); \
|
||||||
|
FC_MULTILINE_MACRO_END \
|
||||||
|
)
|
||||||
|
|
||||||
#define FC_CAPTURE_AND_THROW( EXCEPTION_TYPE, ... ) \
|
#define FC_CAPTURE_AND_THROW( EXCEPTION_TYPE, ... ) \
|
||||||
do { throw EXCEPTION_TYPE( FC_LOG_MESSAGE( error, "", FC_FORMAT_ARG_PARAMS(__VA_ARGS__) ) ); } while(0)
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
|
throw EXCEPTION_TYPE( FC_LOG_MESSAGE( error, "", FC_FORMAT_ARG_PARAMS(__VA_ARGS__) ) ); \
|
||||||
|
FC_MULTILINE_MACRO_END
|
||||||
|
|
||||||
//#define FC_THROW( FORMAT, ... )
|
//#define FC_THROW( FORMAT, ... )
|
||||||
// FC_INDIRECT_EXPAND workas around a bug in Visual C++ variadic macro processing that prevents it
|
// FC_INDIRECT_EXPAND workas around a bug in Visual C++ variadic macro processing that prevents it
|
||||||
// from separating __VA_ARGS__ into separate tokens
|
// from separating __VA_ARGS__ into separate tokens
|
||||||
#define FC_INDIRECT_EXPAND(MACRO, ARGS) MACRO ARGS
|
#define FC_INDIRECT_EXPAND(MACRO, ARGS) MACRO ARGS
|
||||||
#define FC_THROW( ... ) \
|
#define FC_THROW( ... ) \
|
||||||
do { \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
throw fc::exception( FC_INDIRECT_EXPAND(FC_LOG_MESSAGE, ( error, __VA_ARGS__ )) ); \
|
throw fc::exception( FC_INDIRECT_EXPAND(FC_LOG_MESSAGE, ( error, __VA_ARGS__ )) ); \
|
||||||
} while(0)
|
FC_MULTILINE_MACRO_END
|
||||||
|
|
||||||
#define FC_EXCEPTION( EXCEPTION_TYPE, FORMAT, ... ) \
|
#define FC_EXCEPTION( EXCEPTION_TYPE, FORMAT, ... ) \
|
||||||
EXCEPTION_TYPE( FC_LOG_MESSAGE( error, FORMAT, __VA_ARGS__ ) )
|
EXCEPTION_TYPE( FC_LOG_MESSAGE( error, FORMAT, __VA_ARGS__ ) )
|
||||||
|
|
@ -322,9 +327,9 @@ namespace fc
|
||||||
* @param format - a const char* string with "${keys}"
|
* @param format - a const char* string with "${keys}"
|
||||||
*/
|
*/
|
||||||
#define FC_THROW_EXCEPTION( EXCEPTION, FORMAT, ... ) \
|
#define FC_THROW_EXCEPTION( EXCEPTION, FORMAT, ... ) \
|
||||||
do { \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
throw EXCEPTION( FC_LOG_MESSAGE( error, FORMAT, __VA_ARGS__ ) ); \
|
throw EXCEPTION( FC_LOG_MESSAGE( error, FORMAT, __VA_ARGS__ ) ); \
|
||||||
} while(0)
|
FC_MULTILINE_MACRO_END
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -332,10 +337,10 @@ namespace fc
|
||||||
* @brief Appends a log_message to the exception ER and rethrows it.
|
* @brief Appends a log_message to the exception ER and rethrows it.
|
||||||
*/
|
*/
|
||||||
#define FC_RETHROW_EXCEPTION( ER, LOG_LEVEL, FORMAT, ... ) \
|
#define FC_RETHROW_EXCEPTION( ER, LOG_LEVEL, FORMAT, ... ) \
|
||||||
do { \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
ER.append_log( FC_LOG_MESSAGE( LOG_LEVEL, FORMAT, __VA_ARGS__ ) ); \
|
ER.append_log( FC_LOG_MESSAGE( LOG_LEVEL, FORMAT, __VA_ARGS__ ) ); \
|
||||||
throw;\
|
throw; \
|
||||||
} while(0)
|
FC_MULTILINE_MACRO_END
|
||||||
|
|
||||||
#define FC_LOG_AND_RETHROW( ) \
|
#define FC_LOG_AND_RETHROW( ) \
|
||||||
catch( fc::exception& er ) { \
|
catch( fc::exception& er ) { \
|
||||||
|
|
|
||||||
|
|
@ -61,74 +61,77 @@ namespace fc
|
||||||
#define DEFAULT_LOGGER
|
#define DEFAULT_LOGGER
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// suppress warning "conditional expression is constant" in the while(0) for visual c++
|
||||||
|
// http://cnicholson.net/2009/03/stupid-c-tricks-dowhile0-and-c4127/
|
||||||
|
#define FC_MULTILINE_MACRO_BEGIN do {
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
# define FC_MULTILINE_MACRO_END \
|
||||||
|
__pragma(warning(push)) \
|
||||||
|
__pragma(warning(disable:4127)) \
|
||||||
|
} while (0) \
|
||||||
|
__pragma(warning(pop))
|
||||||
|
#else
|
||||||
|
# define FC_MULTILINE_MACRO_END } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define fc_dlog( LOGGER, FORMAT, ... ) \
|
#define fc_dlog( LOGGER, FORMAT, ... ) \
|
||||||
do { \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
if( (LOGGER).is_enabled( fc::log_level::debug ) ) { \
|
if( (LOGGER).is_enabled( fc::log_level::debug ) ) \
|
||||||
(LOGGER).log( FC_LOG_MESSAGE( debug, FORMAT, __VA_ARGS__ ) ); \
|
(LOGGER).log( FC_LOG_MESSAGE( debug, FORMAT, __VA_ARGS__ ) ); \
|
||||||
} \
|
FC_MULTILINE_MACRO_END
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define fc_ilog( LOGGER, FORMAT, ... ) \
|
#define fc_ilog( LOGGER, FORMAT, ... ) \
|
||||||
do { \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
if( (LOGGER).is_enabled( fc::log_level::info ) ) { \
|
if( (LOGGER).is_enabled( fc::log_level::info ) ) \
|
||||||
(LOGGER).log( FC_LOG_MESSAGE( info, FORMAT, __VA_ARGS__ ) ); \
|
(LOGGER).log( FC_LOG_MESSAGE( info, FORMAT, __VA_ARGS__ ) ); \
|
||||||
} \
|
FC_MULTILINE_MACRO_END
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define fc_wlog( LOGGER, FORMAT, ... ) \
|
#define fc_wlog( LOGGER, FORMAT, ... ) \
|
||||||
do { \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
if( (LOGGER).is_enabled( fc::log_level::warn ) ) { \
|
if( (LOGGER).is_enabled( fc::log_level::warn ) ) \
|
||||||
(LOGGER).log( FC_LOG_MESSAGE( warn, FORMAT, __VA_ARGS__ ) ); \
|
(LOGGER).log( FC_LOG_MESSAGE( warn, FORMAT, __VA_ARGS__ ) ); \
|
||||||
} \
|
FC_MULTILINE_MACRO_END
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define fc_elog( LOGGER, FORMAT, ... ) \
|
#define fc_elog( LOGGER, FORMAT, ... ) \
|
||||||
do { \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
if( (LOGGER).is_enabled( fc::log_level::error ) ) { \
|
if( (LOGGER).is_enabled( fc::log_level::error ) ) \
|
||||||
(LOGGER).log( FC_LOG_MESSAGE( error, FORMAT, __VA_ARGS__ ) ); \
|
(LOGGER).log( FC_LOG_MESSAGE( error, FORMAT, __VA_ARGS__ ) ); \
|
||||||
} \
|
FC_MULTILINE_MACRO_END
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define dlog( FORMAT, ... ) \
|
#define dlog( FORMAT, ... ) \
|
||||||
do { \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
if( (fc::logger::get(DEFAULT_LOGGER)).is_enabled( fc::log_level::debug ) ) { \
|
if( (fc::logger::get(DEFAULT_LOGGER)).is_enabled( fc::log_level::debug ) ) \
|
||||||
(fc::logger::get(DEFAULT_LOGGER)).log( FC_LOG_MESSAGE( debug, FORMAT, __VA_ARGS__ ) ); \
|
(fc::logger::get(DEFAULT_LOGGER)).log( FC_LOG_MESSAGE( debug, FORMAT, __VA_ARGS__ ) ); \
|
||||||
} \
|
FC_MULTILINE_MACRO_END
|
||||||
} while (0)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends the log message to a special 'user' log stream designed for messages that
|
* Sends the log message to a special 'user' log stream designed for messages that
|
||||||
* the end user may like to see.
|
* the end user may like to see.
|
||||||
*/
|
*/
|
||||||
#define ulog( FORMAT, ... ) \
|
#define ulog( FORMAT, ... ) \
|
||||||
do { \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
if( (fc::logger::get("user")).is_enabled( fc::log_level::debug ) ) { \
|
if( (fc::logger::get("user")).is_enabled( fc::log_level::debug ) ) \
|
||||||
(fc::logger::get("user")).log( FC_LOG_MESSAGE( debug, FORMAT, __VA_ARGS__ ) ); \
|
(fc::logger::get("user")).log( FC_LOG_MESSAGE( debug, FORMAT, __VA_ARGS__ ) ); \
|
||||||
} \
|
FC_MULTILINE_MACRO_END
|
||||||
} while (0)
|
|
||||||
|
|
||||||
|
|
||||||
#define ilog( FORMAT, ... ) \
|
#define ilog( FORMAT, ... ) \
|
||||||
do { \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
if( (fc::logger::get(DEFAULT_LOGGER)).is_enabled( fc::log_level::info ) ) { \
|
if( (fc::logger::get(DEFAULT_LOGGER)).is_enabled( fc::log_level::info ) ) \
|
||||||
(fc::logger::get(DEFAULT_LOGGER)).log( FC_LOG_MESSAGE( info, FORMAT, __VA_ARGS__ ) ); \
|
(fc::logger::get(DEFAULT_LOGGER)).log( FC_LOG_MESSAGE( info, FORMAT, __VA_ARGS__ ) ); \
|
||||||
} \
|
FC_MULTILINE_MACRO_END
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define wlog( FORMAT, ... ) \
|
#define wlog( FORMAT, ... ) \
|
||||||
do { \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
if( (fc::logger::get(DEFAULT_LOGGER)).is_enabled( fc::log_level::warn ) ) { \
|
if( (fc::logger::get(DEFAULT_LOGGER)).is_enabled( fc::log_level::warn ) ) \
|
||||||
(fc::logger::get(DEFAULT_LOGGER)).log( FC_LOG_MESSAGE( warn, FORMAT, __VA_ARGS__ ) ); \
|
(fc::logger::get(DEFAULT_LOGGER)).log( FC_LOG_MESSAGE( warn, FORMAT, __VA_ARGS__ ) ); \
|
||||||
} \
|
FC_MULTILINE_MACRO_END
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#define elog( FORMAT, ... ) \
|
#define elog( FORMAT, ... ) \
|
||||||
do { \
|
FC_MULTILINE_MACRO_BEGIN \
|
||||||
if( (fc::logger::get(DEFAULT_LOGGER)).is_enabled( fc::log_level::error ) ) { \
|
if( (fc::logger::get(DEFAULT_LOGGER)).is_enabled( fc::log_level::error ) ) \
|
||||||
(fc::logger::get(DEFAULT_LOGGER)).log( FC_LOG_MESSAGE( error, FORMAT, __VA_ARGS__ ) ); \
|
(fc::logger::get(DEFAULT_LOGGER)).log( FC_LOG_MESSAGE( error, FORMAT, __VA_ARGS__ ) ); \
|
||||||
} \
|
FC_MULTILINE_MACRO_END
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#include <boost/preprocessor/seq/for_each.hpp>
|
#include <boost/preprocessor/seq/for_each.hpp>
|
||||||
#include <boost/preprocessor/seq/enum.hpp>
|
#include <boost/preprocessor/seq/enum.hpp>
|
||||||
|
|
@ -164,13 +167,13 @@ namespace fc
|
||||||
// a slowdown.
|
// a slowdown.
|
||||||
#ifdef FC_DISABLE_LOGGING
|
#ifdef FC_DISABLE_LOGGING
|
||||||
# undef ulog
|
# undef ulog
|
||||||
# define ulog(...) do {} while(0)
|
# define ulog(...) FC_MULTILINE_MACRO_BEGIN FC_MULTILINE_MACRO_END
|
||||||
# undef elog
|
# undef elog
|
||||||
# define elog(...) do {} while(0)
|
# define elog(...) FC_MULTILINE_MACRO_BEGIN FC_MULTILINE_MACRO_END
|
||||||
# undef wlog
|
# undef wlog
|
||||||
# define wlog(...) do {} while(0)
|
# define wlog(...) FC_MULTILINE_MACRO_BEGIN FC_MULTILINE_MACRO_END
|
||||||
# undef ilog
|
# undef ilog
|
||||||
# define ilog(...) do {} while(0)
|
# define ilog(...) FC_MULTILINE_MACRO_BEGIN FC_MULTILINE_MACRO_END
|
||||||
# undef dlog
|
# undef dlog
|
||||||
# define dlog(...) do {} while(0)
|
# define dlog(...) FC_MULTILINE_MACRO_BEGIN FC_MULTILINE_MACRO_END
|
||||||
#endif
|
#endif
|
||||||
Loading…
Reference in a new issue