1*ccdc9c3eSSadaf Ebrahimi // Copyright 2009 The RE2 Authors. All Rights Reserved. 2*ccdc9c3eSSadaf Ebrahimi // Use of this source code is governed by a BSD-style 3*ccdc9c3eSSadaf Ebrahimi // license that can be found in the LICENSE file. 4*ccdc9c3eSSadaf Ebrahimi 5*ccdc9c3eSSadaf Ebrahimi #ifndef UTIL_UTIL_H_ 6*ccdc9c3eSSadaf Ebrahimi #define UTIL_UTIL_H_ 7*ccdc9c3eSSadaf Ebrahimi 8*ccdc9c3eSSadaf Ebrahimi // TODO(junyer): Get rid of this. 9*ccdc9c3eSSadaf Ebrahimi #include <string> 10*ccdc9c3eSSadaf Ebrahimi using std::string; 11*ccdc9c3eSSadaf Ebrahimi 12*ccdc9c3eSSadaf Ebrahimi #define arraysize(array) (int)(sizeof(array)/sizeof((array)[0])) 13*ccdc9c3eSSadaf Ebrahimi 14*ccdc9c3eSSadaf Ebrahimi #ifndef ATTRIBUTE_NORETURN 15*ccdc9c3eSSadaf Ebrahimi #if defined(__GNUC__) 16*ccdc9c3eSSadaf Ebrahimi #define ATTRIBUTE_NORETURN __attribute__((noreturn)) 17*ccdc9c3eSSadaf Ebrahimi #elif defined(_MSC_VER) 18*ccdc9c3eSSadaf Ebrahimi #define ATTRIBUTE_NORETURN __declspec(noreturn) 19*ccdc9c3eSSadaf Ebrahimi #else 20*ccdc9c3eSSadaf Ebrahimi #define ATTRIBUTE_NORETURN 21*ccdc9c3eSSadaf Ebrahimi #endif 22*ccdc9c3eSSadaf Ebrahimi #endif 23*ccdc9c3eSSadaf Ebrahimi 24*ccdc9c3eSSadaf Ebrahimi #ifndef FALLTHROUGH_INTENDED 25*ccdc9c3eSSadaf Ebrahimi #if defined(__clang__) 26*ccdc9c3eSSadaf Ebrahimi #define FALLTHROUGH_INTENDED [[clang::fallthrough]] 27*ccdc9c3eSSadaf Ebrahimi #elif defined(__GNUC__) && __GNUC__ >= 7 28*ccdc9c3eSSadaf Ebrahimi #define FALLTHROUGH_INTENDED [[gnu::fallthrough]] 29*ccdc9c3eSSadaf Ebrahimi #else 30*ccdc9c3eSSadaf Ebrahimi #define FALLTHROUGH_INTENDED do {} while (0) 31*ccdc9c3eSSadaf Ebrahimi #endif 32*ccdc9c3eSSadaf Ebrahimi #endif 33*ccdc9c3eSSadaf Ebrahimi 34*ccdc9c3eSSadaf Ebrahimi #ifndef NO_THREAD_SAFETY_ANALYSIS 35*ccdc9c3eSSadaf Ebrahimi #define NO_THREAD_SAFETY_ANALYSIS 36*ccdc9c3eSSadaf Ebrahimi #endif 37*ccdc9c3eSSadaf Ebrahimi 38*ccdc9c3eSSadaf Ebrahimi #endif // UTIL_UTIL_H_ 39