#pragma once


/** Branch prediction hints */
#ifndef LIKELY						/* Hints compiler that expression is likely to be true, much softer than UE_ASSUME - allows (penalized by worse performance) expression to be false */
    #if ( defined(__clang__) || defined(__GNUC__) ) && defined(PLATFORM_UNIX)	// effect of these on non-Linux platform has not been analyzed as of 2016-03-21
        #define LIKELY(x)			__builtin_expect(!!(x), 1)
    #else
        // the additional "!!" is added to silence "warning: equality comparison with exteraneous parenthese" messages on android
        #define LIKELY(x)			(!!(x))
    #endif
#endif

#ifndef UNLIKELY					/* Hints compiler that expression is unlikely to be true, allows (penalized by worse performance) expression to be true */
    #if ( defined(__clang__) || defined(__GNUC__) ) && defined(PLATFORM_UNIX)	// effect of these on non-Linux platform has not been analyzed as of 2016-03-21
        #define UNLIKELY(x)			__builtin_expect(!!(x), 0)
    #else
        // the additional "!!" is added to silence "warning: equality comparison with exteraneous parenthese" messages on android
        #define UNLIKELY(x)			(!!(x))
    #endif
#endif