1 /* 2 * Copyright 2012 The Android Open Source Project 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef ANDROID_CUTILS_COMPILER_H 9 #define ANDROID_CUTILS_COMPILER_H 10 11 /* 12 * helps the compiler's optimizer predicting branches 13 */ 14 15 #ifdef __cplusplus 16 # define CC_LIKELY( exp ) (__builtin_expect( !!(exp), true )) 17 # define CC_UNLIKELY( exp ) (__builtin_expect( !!(exp), false )) 18 #else 19 # define CC_LIKELY( exp ) (__builtin_expect( !!(exp), 1 )) 20 # define CC_UNLIKELY( exp ) (__builtin_expect( !!(exp), 0 )) 21 #endif 22 23 /** 24 * exports marked symbols 25 * 26 * if used on a C++ class declaration, this macro must be inserted 27 * after the "class" keyword. For instance: 28 * 29 * template <typename TYPE> 30 * class ANDROID_API Singleton { } 31 */ 32 33 #define ANDROID_API __attribute__((visibility("default"))) 34 35 #endif // ANDROID_CUTILS_COMPILER_H 36